概述
关于SQL注入,想必这里也不用多讲。互联网上关于SQL注入的Paper、Blog有很多,以及各个漏洞平台层出不穷的漏洞报告。但是,这些漏洞都有一个很大的共同点:数据查询参数过滤不够严谨所导致的Select型注入。
这两天在对一个WordPress插件漏洞分析的时候,发现其漏洞存在于Insert语句之中,和之前所接触到的漏洞有很大的不同。于是对这个漏洞进行了深入的分析、实验、思考、总结,下面是这次漏洞研究的详细过程。
过程记录
WordPress漏洞:
首先得说明一下这个WordPress插件漏洞(WordPress Simple Ads Manager),https://www.exploit-db.com/exploits/36613/,这个exploit中包括了多个注入漏洞,我们主要关注的是 SQL INJECTION 1.
上图中主要的信息有三个,从上之下分别是:①注入页面 ②注入点 ③漏洞代码
漏洞环境:
为了能够漏洞重放,首先就是环境搭建。我的测试环境中有WordPress,只需要安装存在此漏洞的插件即可。下面是我的实验环境:
- OS: CentOS 6.6
- PHP: 5.3.3
- Mysql: 5.1.73
- WordPress: 4.2-zh_CN
- Simple-Ads-Manager: 2.6.96
安装此插件后,需要启用此插件。然后在后台添加一个测试的Ad,并在文章中引用此Ad.下面是我的测试Ad:
当访问带有此Ad的页面是,就会触发此漏洞页面。
漏洞验证:
使用Burpsuite Repeater重放测试,正常的请求
红色框为请求的参数信息
- action=sam_hits&hits%5B0%5D%5B%5D=1&hits%5B0%5D%5B%5D=1&level=3
解码为:
- action=sam_hits&hits[0][]=1&hits[0][]=1&level=3
绿色框为返回的信息
竟然返回sql,不过这不是重点,都可以拿到源代码什么看不到呢?
这里有两个hits[0][],前面的对应的sql语句中的pid,后门的对应的是id. 下面根据上面的WordPress漏洞进行注入测试:
- Paylaod: (select 1)
咋一看,虽然提示success,感觉有点不对劲。
- Payload: (select * from (select (sleep(5)))abcd)