Burpsuite+SQLMAP双璧合一绕过Token保护的应用进行注入攻击
2017-08-04 21:09
501 查看
0×00 带有token 保护的应用
有这样的一个应用(自己写的一个, 后面会附上代码),你手动去注入的时候,发现是有注入点的加上一个单引号,报错了
确实是有注入
但是用sqlmap跑的时候却没有
Burpsuite 重放失败
查看页面源代码 ,发现有个隐藏的token字段
说明后端对token进行了校验,每次请求之后都会重新生成一个新的token, 因为SQLMAP 每次都是提交的旧的token,每次都会校验失败,所以根本没走到业务逻辑那块,就被302重定向了,所以永远注入不出来, 但是我们知道这里是可以注入的。
0×01. 使用burpsuite的Macros功能协助SQLMAP成功注入
burpsuite 中的Macros 就是在那些经过代理的报文经过burpsuite发送之前被发送到服务器中的一些HTTP的请求(可以是一个HTTP请求,也可以是一系列HTTP请求),Macros 发送的最后一个HTTP请求的响应报文中的参数(具体是哪个参数或者哪些参数是要在配置Macros的时候设置的),的值会被截取回来,然后自动替换经过代理的报文请求中的参数的值(这个参数也需要设置),当然这个过程是透明的,我们感觉不到,在proxy的http history中我们也看不到请求报文的修改过程(不过我们可以打开Macros的跟踪日志观察到这一过程),这样我们既可以让SQLMAP请求报文中的token(假设是我们需要更新的那个参数)自动更新,从而通过服务端的token验证,达到自动化注入的目的。下面我们开始我们的测试吧
首先我们需要访问一下,带有token 响应的http url,这里为http://localhost/csrf.php (这是我本地自己编写的一个简单的测试页面,你的也许可能不同,不过道理都是一样的, 后面会附上源代码)
我们从响应报文中可以看到,响应报文中含有一个隐藏字段的token,这个token每次请求后都会更新,然后返回给用户,我们就需要让Macros替我们在SQLMAP报文被发送到server端之前去请求这个URL获取最新的token,然后更新到SQLMAP的请求报文,这样SQLMAP的请求报文每次都会验证通过,从而可以自动化的注入
首先设置一个Macros
切换到 Burpsuite 的 Project options 选项卡,点击Macros下的add按钮
这时候弹出两个窗口,一个是Macro 记录器,一个是Macro编辑器,Macro记录器是记录发送那些HTTP请求,Macro编辑器是编辑一些参数,比如具体截取响应报文中的哪一个参数等等
我们首先操作Macro记录器,点击选择我们要发送HTTP请求,然后点击右下角的OK按钮即可(如上图)
然后我们开始操作Macro编辑器, 选择Configure item, 在弹出的界面中找到’Custom parameter locations in response’区域,然后点击右侧的 Add按钮
在弹出的窗口中,首先给要截取得参数值命名,这里就叫做token ,然后用鼠标选择我们要截取的内容,这里就把token的值选取了即可,如果出现如下界面就表示OK了
然后点击右下角的OK,然后在所有回到的界面中继续点击右下角的OK
至此,我们就配置完毕了Macros,总结一下,就是Macros 记录器记录了发送哪一个HTTP请求,Macros编辑器确定了截取response中的那个参数内容,然后给截取后的参数值命名
好了,下面我们开始让Burpsuite 自动调用Macros,并替换经过代理的请求中的token的值
我们切换回Project options 的选项卡,找到Session Handling Rules
点击Add 按钮,在弹出的界面中找到Rules Action区域,点击下方的Add按钮,在弹出的下拉列表中选择Run as Macros
在弹出的界面中进行如下配置
选择我们要使用的Macros(这里为我们上面配置的Macro2),我们在跟新请求报文参数配置中,我们选择仅更新我们指定的参数即可,我们点击’Update only following parameters’, 然后点击右下侧的Edit,在弹出的界面中的输入框中输入我们要更新请求报文中的哪个参数(这里我们选择我们需要的token),点击点击Add,点击close
如果出现下面的界面,说明配置OK
点击Ok,回到上一个界面,切换到Scope标签,进行如下配置
选中 proxy ,点击 Use custom scope,在Include in scope区域增加一个我们需要应用的scope,这里配置为作用于所有本机的流量,点击Ok,然后回到上一个界面继续点击Ok
至此我们配置完毕,下面开始使用SQLMAP自动注入了
在注入之前我们可以开启Macros 的日志,看看这个过程发生哪些变化
好了,开始SQLMAP注入吧(注意SQLMAP要挂代理经过burpsuite哦)
python sqlmap.py -r 100 –dbms=mysql –flush-session –proxy=http://127.0.0.1:8090
–flush-session 这个参数是刷新以前的记录,因为我已经跑过一遍了,所以要想观察所有的注入过程,需要重新来过,所以要加上这个参数,如果你没有跑过,是不需要加上的
–proxy=http://127.0.0.1:8090 ,这个是burpsuite的代理,sqlmap支持HTTP[S] ,socks代理
看到了吧,SQLMAP自动注入成功!
0×02. 附录
参看的英文原文: https://www.cyberis.co.uk/burp_macros.html英文原文并没有提供代码,下面的代码是我自己测试用的
<?php /** * Created by PhpStorm. * User: ForrestX386 * Date: 2017/3/3 * Time: 21:19 */ session_start(); if(isset($_SESSION['token']) && isset($_POST['username'])){ if(empty($_POST['token']) || $_POST['token'] != $_SESSION['token']){ header('Location: http://localhost/error.php?token='. $_SESSION['token']); exit(-1); } } $token = md5(time()); $_SESSION['token'] = $token; ?> <html> <head> <title>sqlmap with csrf token</title> </head> <body> <form method="post" action="/csrf.php" id="form1"> <div> <input name="username" type="text" id="username" style="width:270px;"/> <input type="submit" name="btnSearch" value="Search" id="btnSearch" /> <input type="hidden" name="token" id="token" value="<?php echo $token ?>" /> </div> </form> <br/> </body> </html> <?php if (isset($_POST['username'])) { $conn = mysql_connect('127.0.0.1', 'root', 'root'); if (!$conn) { die('数据库连接错误' . mysql_error()); } else { mysql_select_db('test', $conn); $user_name = $_POST['username']; $sql = "select * from user where username='$user_name'"; $result = mysql_query($sql) or die('error' . mysql_error()); while($row=mysql_fetch_array($result)){ $username = $row['username']; $age = $row['age']; $sex = $row['sex']; echo $username .'   '; echo $age . '   '; echo $sex; echo "<br />"; } } mysql_close($conn); } else { echo "username is null"; } ?>
*本文作者:ForrestX386,转载请注明来自FreeBuf
ForrestX386
5 篇文章 等级:
3级
|
|
上一篇:一款好用的php webshell检测工具
下一篇:
如何手写一款SQL injection tool?
这些评论亮了
evil7
(5级)入梦落樱满熏香,梦醒犹记四月谎回复
你的问题早就已经解决了(参见git-history和具体commit增添内容,记忆中是13年的一个issue还是14年提到过),我之前分析工具反杀的文章提到过一个token的自动步进造成的执行注入,说的就是crsf bypass的自动步进,还有就是这种情况下了,你可以去看看源码和文档。另外不要再百度“如何用sqlmap注入”、“如何成为一名合格黑客”、“如何成为白帽子”什么的了,百度可以用来搜斗图素材,但别用来搜文档。
不知道我有么有打错参数,撸主自己多看看 -hh 多用 -v 吧,图里的地址,举个栗子:
sqlmap -u "http://localhost/csrf.php" --data="id=1&token=" --csrf-token="token" --csrf-url="http://localhost/csrf.php" --flush-session --batch -v 6
好了,迷途的小熊弟,加油研究,我继续上班。
)12(
亮了
发表评论
已有 20 条评论
Black-Hole
(6级)
FreeBuf专栏作者 2017-03-10
回复
1楼
已收藏
亮了(3)
yiran4827
(4级) 姿势可以不猥琐,人一定要猥琐
2017-03-10 回复
2楼
大牛膜拜一下
亮了(3)
补丁君
(3级) 皮皮虾训练场长
2017-03-10 回复
3楼
这文章怎么好像在哪见过。。。
亮了(3)
Scales
(3级) 我这么复杂,一句话怎么能够概括呢~
2017-03-10 回复
4楼
这个姿势比较猥琐
亮了(0)
evil7
(5级) 入梦落樱满熏香,梦醒犹记四月谎
2017-03-10 回复
5楼
你的问题早就已经解决了(参见git-history和具体commit增添内容,记忆中是13年的一个issue还是14年提到过),我之前分析工具反杀的文章提到过一个token的自动步进造成的执行注入,说的就是crsf bypass的自动步进,还有就是这种情况下了,你可以去看看源码和文档。另外不要再百度“如何用sqlmap注入”、“如何成为一名合格黑客”、“如何成为白帽子”什么的了,百度可以用来搜斗图素材,但别用来搜文档。
不知道我有么有打错参数,撸主自己多看看 -hh 多用 -v 吧,图里的地址,举个栗子:
sqlmap -u "http://localhost/csrf.php" –data="id=1&token=" –csrf-token="token" –csrf-url="http://localhost/csrf.php" –flush-session –batch -v 6
好了,迷途的小熊弟,加油研究,我继续上班。
亮了(12)
evil7
(5级) 入梦落樱满熏香,梦醒犹记四月谎
2017-03-10 回复
@ evil7 看到有好多人都不知道,上面只是想说明在form.action!=self.location.href情况下的,文章这个栗子里csrf-token获取地址和提交地址都是本页面,很多生产环境也有这样的,这种可以直接缺省–csrf-url。各位大佬请参看sqlmap -hh | grep token 先了解了解usage。
亮了(3)
ForrestX386
(3级) 前进,前进,继续前进
2017-03-10 回复
@ evil7 感谢前辈提点
亮了(0)
J-1975
(1级)
2017-03-10 回复
6楼
赞一个,之前看到过同样思路的,不过是用py先获取token再提交
亮了(1)
xixuedafa123
(2级)
2017-03-10 回复
@ J-1975 @ J-1975 python sqlmap.py -u "http://192.168.83.117/2.php" –data="token=123&id=root" –eval="import urllib2;import re;a=urllib2.build_opener();a.addheaders.append((‘Cookie’, ‘PHPSESSID=72u0q0sem6tbnrqq4bmqs4an05′));token=re.search(r’\w{32}’,a.open(‘http://192.168.83.117/2.php’).read()).group(0);print
token;" -p id –dbs –cookie="PHPSESSID=72u0q0sem6tbnrqq4bmqs4an05" –current-user
抄的网上的
亮了(2)
rj00
(3级) yangge
2017-03-10 回复
7楼
赞一个
亮了(0)
test 2017-03-10
回复
8楼
厉害了
亮了(0)
gncao
(1级)
2017-03-10 回复
9楼
顶一个,学习学习
亮了(0)
沙狐
(1级)
2017-03-10 回复
10楼
赞
亮了(0)
墨霝
(3级)
2017-03-10 回复
11楼
厉害了!
亮了(0)
手写的从前
(1级)
2017-03-10 回复
12楼
good
亮了(0)
小牛 2017-03-11
回复
13楼
@ evil7 手注的时候还是有用的
亮了(0)
8098
(1级) 好好先生
2017-03-13 回复
14楼
感觉有点复杂,不知道有没有其他的简单一点方式实现用sqlmap自动化注入
亮了(0)
六翼
(1级)
2017-03-15 回复
15楼
看的麻烦啊,还是burpsuite配合手工更方便些。
亮了(0)
leo022
(1级)
2017-05-09 回复
16楼
亮了(0)
baiwuya
(1级)
2017-05-27 回复
17楼
厉害了……
相关文章推荐
- Burpsuite+SQLMAP绕过Token保护(Burpsuite Macros应用)
- 利用sqlmap和burpsuite绕过csrf token进行SQL注入
- 使用sqlmap 绕过防火墙进行注入测试
- 使用sqlmap 绕过防火墙进行注入测试
- 如何使用Burp Suite Macros绕过防护进行自动化fuzz测试
- sqlmap和burpsuite绕过csrf token进行SQL注入检测
- SQLMAP 脚本自动注入应用(burpsuit辅助)
- burp结合sqlmap进行后台登录框post注入
- 利用sqlmap和burpsuite绕过csrf token进行SQL注入 (转)
- 使用sqlmap 绕过防火墙进行注入测试
- (转载)使用sqlmap 绕过防火墙进行注入测试
- 【SQL注入/WAF】使用sqlmap 绕过防火墙进行注入测试
- 用 Apache 服务器模块保护您的网站免受应用层 DOS 攻击 | Linux 中国
- 使用jni技术进行android应用签名信息核查及敏感信息保护
- Html.AntiForgeryToken() 防止CSRF攻击 的AJaX应用
- BurpSuite+sqlmap: SQLiPy扩展使用说明
- sqlmap注入之tamper绕过WAF防火墙过滤
- Sqlmap plugin for BurpSuite
- Html.AntiForgeryToken() 防止CSRF攻击 的AJaX应用
- BurpSuite+SQLmap的一种另类扫描