好友
阅读权限10
听众
最后登录1970-1-1
|
某开源应用新近sql注入漏洞
已经公开的细节有如下请求body
PS: waf大神估计一眼就看来注入点了
/api_jsonrpc.phpuser_data = {
"jsonrpc": "2.0",
"method": "user.get",
"params": {
"selectRole": ["roleid, u.passwd", "roleid"],
"userids": str(userid)
},
"auth": auth_token,
"id": 1
}
下载该应用代码分析,版本比较为:6.0.31 —— 6.0.32rc
源码分析 api_jsonrpc.php
根据uri中端点,找到代码文件 api_jsonrpc.php
上面代码 将http数据作为 jsonRpc 属性初始化 CjsonRpc 对象,最终执行其方法 execute()
CJsonrpc 类
上面初始化得对象,在这里得实现内部,data 被传递到成员变量 _jsonDecoded
在上面执行得成员函数 execute 中,jsonDecoded被使用 “.” 分隔,传递到 api 和 method中 api 与 method 上面得代码中使用 CapiClient 类的 callMethod 配置接口,这里直接使用poc中的数据可知,对应的 api 与 method 是: user , get, 在类 API 中 获取对应api
获取poc中api : user
CUser -> get 从上面代码可见 api : user 对应的类为 Cuser
Method : get
addRelatedObjects
在该函数中,前台的 selectRole 参数值使用 ',r.'.implode(',r.', $options['selectRole'])将数组元素用逗号连接,并在每个字段名前加上表的别名 r.(即,查询role表中数据)selectRole作为列表,但是其中的元素中如果字符串中使用“逗号”,那么最终的查询将被拼接为可利用形式举例:正常查询:"selectRole":["roleid", "roleid"] 最终sql语句 select r.roleid, r.roleid威胁查询:"selectRole":["roleid", "roleid, u.passwd"] 最终sql语句select r.roleid, ,u.passwd, r.roleid
注:仅作学习探讨用 |
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|