這個問題是程式設計師容易忽略的,往往只是依靠gpc或addslashes函式對使用者直接輸入的資料進行處理,這樣資料中的'"等都會被\轉義,這樣就能正確的執行sql語句,有效防止注入攻擊了。但存入資料庫的資料呢?在執行完sql語句存入資料庫的是經過gpc處理前的原始資料,那麼當程式再select出的就是受汙染的資料了,如果把select出的資料再執行sql語句,那麼就觸發了sqlinj,如果直接寫入快取檔案的話就有可能直接拿shell了:)
通過文字中**
使用者輸入===>gpc\addslashes()===>寫入文字檔案===>include===>再次寫入文字檔案\執行sql語句
這個和通過資料庫中轉大致是一樣的,對於寫檔案的操作如果處理不當是有可能被攻擊者直接拿shell的,我們來看看php168的乙個**片段:
function login_logs($username,$password)
}write_file("adminlogin_logs.php",$writefile);
}function write_file($filename,$data,$method="rb+",$iflock=1)
@fputs($handle,$data);
if($method=="rb+") @ftruncate($handle,strlen($data));
@fclose($handle);
@chmod($filename,0777);
if( is_writable($filename) )else
php168在登入後台時如果輸入的使用者名稱或密碼有誤就會執行這個login_logs函式把登入者的資訊記錄在adminlogin_logs.php,如果使用者輸入的$username的資料是「";eval($_post[cmd]); //」,前面的"被閉合了,成功的寫入了shell。但如果gpc為on的話,"會被轉義成\",無法利用了。但注意這裡會先包含adminlogin_logs.php,並迴圈陣列把資料再次寫入adminlogin_logs.php,要知道,這裡的\僅僅是轉義字元,所以include後$logdb依舊是受汙染的原資料,再次寫入檔案時"就起作用了,成功寫入了shell。
PHP168 CMS的一次新異漏洞分析
admin global.php對後台管理的使用者名稱與密碼沒有任何過濾產生了這個漏洞 if post loginname post loginpwd else rs db get one select m.tb username as username,m.tb password as passw...
linux乙個漏洞的分析
程式最早是國外的大佬寫的。這個漏洞的原理非常簡單,就是利用coredump的時候,可以在 etc cron.d目錄下生成core檔案。而在 etc cron.d目錄下的檔案,crontab會定時以指定的使用者許可權來執行。如果在core檔案中,指定使用者許可權是root,那麼 就能夠以我們希望的方式...
原 對乙個函式的理解
作用 統計乙個數中值為1的位的個數。說明 此函式是將乙個數的二進位中,值為1的位的個數加以統計。比如十進位制數22,轉為二進位制是10110 它值為1的位的個數是3。費話 此函式來自 函式 int count one bits unsigned value 呼叫函式 include include ...