欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

強(qiáng)悍的PHP腳本注入技巧(圖)

 更新時(shí)間:2007年01月16日 00:00:00   作者:  

起因:
 聽(tīng)承諾說(shuō)CASI出2.0了,而且承諾也給了一個(gè)有漏洞的地址,正好沒(méi)事就測(cè)試了一下,最近非常郁悶,學(xué)不下去,正好今天承諾勾起了我學(xué)習(xí)php的美好時(shí)光,看看自己還能不能搞這樣的站吧.

過(guò)程:
承諾給的地址是http://www.gametea.com//showboard.php?id=282
很標(biāo)準(zhǔn)的php注入形式,我們也按照標(biāo)準(zhǔn)的php注入方法來(lái)進(jìn)行注入,首先再后面加一個(gè)',

http://www.gametea.com/showboard.php?id=282' 

如圖1

他告訴我們2個(gè)方面的信息,第一是magic_quotes_gpc = off
第二個(gè)就是web路徑/home/newgt/showboard.php

再提交語(yǔ)句以前我們還是先來(lái)說(shuō)明一下php注入的原理和一個(gè)小例子,php注入就是利用變量過(guò)濾不足造成的

看看下面兩句SQL語(yǔ)句:

①SELECT * FROM article WHERE articleid='$id'
②SELECT * FROM article WHERE articleid=$id

  兩種寫(xiě)法在各種程序中都很普遍,但安全性是不同的,第一句由于把變量$id放在一對(duì)單引號(hào)中,這樣使得我們所提交的變量都變成了字符串,即使包含了正確的SQL語(yǔ)句,也不會(huì)正常執(zhí)行,而第二句不同,由于沒(méi)有把變量放進(jìn)單引號(hào)中,那我們所提交的一切,只要包含空格,那空格后的變量都會(huì)作為SQL語(yǔ)句執(zhí)行,我們針對(duì)兩個(gè)句子分別提交兩個(gè)成功注入的畸形語(yǔ)句,來(lái)看看不同之處。

① 指定變量$id為:
1' and 1=2 union select * from user where userid=1/*
此時(shí)整個(gè)SQL語(yǔ)句變?yōu)椋?BR>SELECT * FROM article WHERE articleid='1' and 1=2 union select * from user where userid=1/*'

②指定變量$id為:
1 and 1=2 union select * from user where userid=1
此時(shí)整個(gè)SQL語(yǔ)句變?yōu)椋?BR>SELECT * FROM article WHERE articleid=1 and 1=2 union select * from user where userid=1

  看出來(lái)了嗎?由于第一句有單引號(hào),我們必須先閉合前面的單引號(hào),這樣才能使后面的語(yǔ)句作為SQL執(zhí)行,并要注釋掉后面原SQL語(yǔ)句中的后面的單引號(hào),這樣才可以成功注入,如果php.ini中magic_quotes_gpc設(shè)置為on或者變量前使用了addslashes()函數(shù),我們的攻擊就會(huì)化為烏有,但第二句沒(méi)有用引號(hào)包含變量,那我們也不用考慮去閉合、注釋,直接提交就OK了。


好了現(xiàn)在我們就要按照angel的方法來(lái)提交語(yǔ)句了http://www.gametea.com/showboard.php?id=282%20and%2

01=2%20union%20select%2050,9,8,7,6,5,4,3,2,1

如圖2

再這里我們可以得知7和9這兩個(gè)地方是文本的,也就是說(shuō)可以顯示我們想要的文件的內(nèi)容,下面我們就是要讀取服務(wù)器上的文件了從web路徑上看這臺(tái)機(jī)器應(yīng)該是UNIX的,那么我們的目標(biāo)就是拿到/etc/passwd這個(gè)文件了

我們知道,在SQL語(yǔ)句中,可以使用各種MySQL內(nèi)置的函數(shù),經(jīng)常使用的就是DATABASE()、USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()這些函數(shù)來(lái)獲取一些系統(tǒng)的信息,還有一個(gè)應(yīng)用得比較多的函數(shù),就是load_file(),該函數(shù)的作用是讀入文件,并將文件內(nèi)容作為一個(gè)字符串返回。
  看到這里,應(yīng)該可以想到我們可以做什么了,就是讀取一些機(jī)密文件,但是也是有條件限制的:

  • 欲讀取文件必須在服務(wù)器上
  • 必須指定文件完整的路徑
  • 必須有權(quán)限讀取并且文件必須完全可讀
  • 欲讀取文件必須小于 max_allowed_packet

  如果該文件不存在,或因?yàn)樯厦娴娜我辉蚨荒鼙蛔x出,函數(shù)返回空。比較難滿足的就是權(quán)限,在windows下,如果NTFS設(shè)置得當(dāng),是不能讀取相關(guān)的文件的,當(dāng)遇到只有administrators才能訪問(wèn)的文件,users就別想load_file出來(lái)。

  在實(shí)際的注入中,我們有兩個(gè)難點(diǎn)需要解決:

  • 絕對(duì)物理路徑
  • 構(gòu)造有效的畸形語(yǔ)句

  在很多PHP程序中,當(dāng)提交一個(gè)錯(cuò)誤的Query,如果display_errors = on,程序就會(huì)暴露WEB目錄的絕對(duì)路徑,只要知道路徑,那么對(duì)于一個(gè)可以注入的PHP程序來(lái)說(shuō),整個(gè)服務(wù)器的安全將受到嚴(yán)重的威脅。構(gòu)造語(yǔ)句已經(jīng)是小意思了。

我們這里用的load_file(char())這個(gè)函數(shù)我們需要把/etc/passwd轉(zhuǎn)化成16進(jìn)制的我們請(qǐng)出asc2chr這個(gè)工具來(lái)幫我們完成轉(zhuǎn)化工作

如圖三

相關(guān)文章

最新評(píng)論