magic_quotes_gpc選項是php中的乙個重要的安全設定,當該選項為on也就是開啟的時候,所有從get,post,cookie傳遞過來的資料中的',", \,以及null等元字元都會被自動的加上\實現轉義,這個選項使得sql注入或者插入**以及xss中引入字串或者改變程式流程變得困難,但是在php5中一些特殊變數的存在使得在某些情況下,還是會被惡意使用者引入元字元到資料庫以及程式中。
php中的變數除了**於$_get,$_post,$_cookie的提交之外,還**於$_server,$_env, $_session等等,其中$_env和$_session我們又不能很方便的控制和自由提交,所以剩下乙個$_server變數。而$_server變數包括的東西裡除了來自伺服器本身還有有很大一部分**於使用者提交的http請求,如:
query_string //使用者get方法提交時的查詢字串
http_referer //使用者請求的**變數,在一些程式取得使用者訪問記錄時用得比較多
http_user_agent //使用者的瀏覽器型別,也用於使用者的訪問記錄的取得
http_host //提交的主機頭等內容
http_x_forwarded_for //使用者的**主機的資訊
如上的變數在php5.0以下是受magic_quotes_gpc選項影響的,當magic_quotes_gpc選項為on時,該陣列中的元字元等內容就會做轉義處理,為off時,使用者的提交就會不做任何處理,直接送到陣列中。現在的大部分安全點的程式都已經注意到$get,$post,以及$cookie的危險性,如下的內容摘自discuz的變數初試化的**:
$magic_quotes_gpc = get_magic_quotes_gpc();
@extract(daddslashes($_post));
@extract(daddslashes($_get));
if(!$magic_quotes_gpc)
很好,已經注意到來自$_get,$_post,$_files以及$_cookie的變數的安全性,但是$_server變數呢?儘管在magic_quotes_gpc為on的情況下這些變數可能受到保護,但是很明顯,忽視$_server的結果就是安全隱患的增加,你就可以去尋找程式取得$_server的地方,很可能就是脆弱點了!同樣,在bo-blog裡有如下**:
然後在tb.php中58行左右用如下語句寫replies表:
$blog->query("insert into `replies` values ('', '4', '', '', '-1', '', '', '', '', '', '0', '0', '0', '0', '', '0', '', '0', '', '0', '', '', '', '', '', '', '', '')");
很明顯可以看到,如果我們能避過'然後用/*注釋掉後面的東西的話,我們就可以偽造ip後面的一些內容了,由於很多程式本身就疏於對$_server變數,所以我們只要饒過php本身對'的轉義就可以了。在php4中,如果magic_quotes_gpc為off的話就不用管了,但是如果magic_quotes_gpc為on的話,我們可能作為就不是那麼大了!
但是這種情況在php5中獲得了徹底的改觀,在測試中發現php5中無論magic_quotes_gpc是on還是off,php對$_server變數是不會做轉義處理的,意味著我們可以很輕鬆地帶程序式',",以及null字元,這對於那些變數過濾不嚴格的程式來說是致命的!不知道php5是為了什麼原因而這樣做的,用如下的指令碼可以證明這一點:
我們在magic_quotes_gpc為on 和 php5的情況下用nc向伺服器提交:
將會看到:
很顯然,在php5的環境中我們的$_server變數將不再受magic_quotes_gpc的保護,至於程式該如何加強自己的安全性,還是那句話,加強程式自身的過濾機制吧,不要依賴於語言本身了!記得所有的輸入都是有害的 :)
php5繞過open basedir讀檔案指令碼
漏洞很久之前 大概5年前 被提出來了,但並不是php 上的問題,所以問題一直存在,直到現在。我一直沒留意,後來yaseng告訴我的,他測試了好像5.5都可以。給出我寫的exp 如我們欲讀取 etc passwd。其實原理就是建立乙個鏈結檔案x,用相對路徑指向a a a a,再建立乙個鏈結檔案exp指...
PHP中GPC繞過的一些總結
1.通過資料庫 文字 中轉 通過資料庫中 注意存入資料庫和select出的資料 使用者輸入 gpc addslashes 資料庫 執行sql語句 include 寫入快取檔案 insert update select 這個問題是程式設計師容易忽略的,往往只是依靠gpc或addslashes函式對使用...
PHP中GPC繞過的一些總結
1.通過資料庫 文字 中轉 通過資料庫中 注意存入資料庫和select出的資料 使用者輸入 gpc addslashes 資料庫 執行sql語句 include 寫入快取檔案 insert update select 這個問題是程式設計師容易忽略的,往往只是依靠gpc或addslashes函式對使用...