Php的環境一般是apache+php+mysql,平常配置服務器一般是打開php.ini裡的安全模式,將safe_mode設為on,還有就是將display_erors設為off,即關閉錯誤顯示。還有一個非常重要的配置選項-----magic_quotes_gpc,高版本默認為on,以前的版本中默認為off。當magic_quotes_gpc為on的時候我們怎麼防範php的字符變量注入呢?其實只需將提交的變量中的所有單引號、雙引號、反斜線和空字告符自動轉換為含有反斜線的轉義字符。如把「』」變成「\」,把「\」變成「\\」,就ok了。下面我們分為對magic_quotes_gpc=off和magic_quotes_gpc=on的注入清況分析一下。
1 o7 H9 Q6 m7 }+ R/ X' b$ r) G7 ]( W7 Y9 F
我們先看一段有漏洞的php代碼,這段代碼是用來搜索的。
/ K% v3 c5 p- c+ l- r+ R4 R' m! o& g" C& _2 B- o! y
7 x/ x5 W9 T' b: e
從上面代碼中我們可以看出,是一個搜索表單,通過post提交數據,並進行select查詢,當然要分析這些漏洞我們得先掌握php語言和mysql語法。如果我們從表單中提交%』 order by id#(#號在mysql中表示註釋,不執行後面的sql語句),或者用』 order by id#,帶入的sql語句就成了select * from user where u
, B- g/ n. p4 y4 O$ F9 }6 ]
- P4 F# x3 q8 ]sername like 『% %』 order by id# order by username 和 select * from us7 B4 E' ]/ F. D2 b( h* k* @7 \2 H
1 h) f# g* }2 A6 i2 Q* e9 }3 d
ers where username like 『%%』 order by id# order by username。這樣數據庫的內容會全部返回,列出所有用戶名,還有密碼等。當然還有update 語句注入攻擊、insert語句注入攻擊等,最常用的是union語法注入,採用into outfile語句導出php腳本木馬。
. ~" x3 S6 J: j& B- Q% e% ~% ]% o
首先要清楚一些mysql語句,如mysql>select load_file(『c:/boot.ini』)我們可以查看c盤下的boot.ini文件內容,在有注入點的網址後面加入該查詢語句就可以顯示出黑客們想獲得的敏感信息,如查看數據庫的連接文件獲得數據庫帳號,查看ect/password信息等。Select * from table into outfile "C:\\Inetpub\\ wwwroot\\shell.php";也就是從表中導出字符串到C:\Inetpub\wwwroot\shell.php中,通常黑客們在得到mysql帳號的情況下,利用create table rose(cmd text);建立一個rose表,字段cmd為text類型,然後用use rose;打開 rose表,insert into rose values("<?php POST[cmd]);?> ")加入一句話馬到字段裡。然後 select * from rose into outfile "C:\\Inetpub\\wwwroot\\shell.php";將一句話木馬導出為一個shell.php文件,當然這個shell.php中就包含<?php ]);?>,懂php的都知道這句會造成什麼後果,配合提交參數,是可以執行cmd命令和上傳php木馬的。8 U. t. d$ U+ @! X
2 [! w* }, F# F8 T9 N當magic_quotes_gpc=on時,提交變量中的所有單引號、雙引號、反斜線和空字符會自動轉換為含有反斜線的轉義字符,字符型的注入可以防範,但數字型沒有用到單引號,字符型注入也可以通過char()將參數解釋為整數,並返回由這些整數的 ASCII碼字符組成的一個字符串,也可以用16進制來代替字符。例如:在瀏覽器裡輸入http: //localhost/www/admin/login.php?username=char(114,111,115,101)%23' f; O9 A5 c8 t; I7 {
* a; _0 u4 `& @# E) M$ v/ o5 J- \
上面假設的我們知道的用戶名是rose,轉換成ASCII後是char(114,111,115,101),%23是#號
! V" u% R6 }& x: i8 L2 C
1 w$ D0 l7 X |表註釋。那麼sql語句變成:select * from example where=』』,後面的and password=』』被註釋掉了,我們順利進入後台。 |
評分
-
查看全部評分
|