渗透测试-加密SQL注入
在日站的时候,发现一处注入。但是注入语句被AES加密。通过Chrome进行单步debug,拿到了key、iv等信息。最后使用SQLMap加载tamper进行自动注入。
寻找注入点
渗透的时候,发现了一个页面,参数有initSql,看到这个参数名称猜测这个参数是用来进行SQL查询的,但是这个参数被加密了。将initSql的值替换成后一个请求的initSql参数的值,回显信息里面出现了SQL报错信息。
现在可以判断这个就是一个注入点,但是现在这样是没办法把数据成功注入出来!转头一想,进行请求的时候参数值已经被加密,那么这个加密操作十有八九是在前端通过JS进行加密,服务器再进行解密。
寻找加密信息
按照刚刚的思路,现在去import的JS里面进行寻找关键的加密函数以及加密,使用chrome开发者工具中的【Select an element in the page to inspect it】定位到【Sources】中的对应行业,点击左边的行数进行debug,通过不断的单步直至找到对应的js。
使用找到的iv、key可成功的对加密之后的语句进行解密,但是这样去注入得手工一点一点的去搞,还是得祭出SQLMap这种神器最方便。
想起SQLMap可以使用tamper加载脚本,对注入的payload进行处理。这里直接把代码贴上来给大家参考参考。
1 | #!/usr/bin/env python |
后面加载这个tamper就可以直接用SQLMap跑了。
总结
- 这个漏洞产生原因”大概“是因为上次被发现注入,开发人员”偷懒“直接调用CryptoJS进行加密,导致该漏洞产生;
- 现在很多操作都会放在前端进行操作,挖挖前端也是一种思路。