web滲透之——任意代碼執行漏洞

漏洞原理
當應用在調用一些能將字符串轉化成代碼的函數時,沒有考慮用戶是否能夠控制這個字符串,將造成代碼注入漏洞
在php中:
eval,assert,將字符串當成代碼執行
preg_replace("/wslp/e","$xr",“wslp”);用第二個參數的執行結果替換第三個參數裏的第一個參數指定的值
漏洞形成
如果被執行的字符串是通過前端參數傳過來的攻擊代碼,或者數據庫裏被植入攻擊代碼數據,就會形成漏洞
漏洞勘測
由於thinkphp存在代碼執行漏洞,我們可以使用谷歌語法來搜索這類網站(inurl:think.php)
學習代碼審計,自己找一些代碼執行漏洞
漏洞復現
前端傳值:
http://localhost/dmzx/loudong.php?data=phpinfo()
後臺接收:

<?php
$data = $_GET['data'];
eval("\$xr=$data;");
echo $xr;

前端顯示:
在這裏插入圖片描述
漏洞防禦
1、使用json保存數組,當讀取時就不需要使用eval了
2、對於必須使用eval的地方,一定嚴格處理用戶數據(白名單、黑名單)
3、字符串使用單引號包括可控代碼,插入前使用addslashes轉義(addslashes、魔數引號、 htmlspecialchars、 htmlentities、mysql_real_escape_string)
4、放棄使用preg_replace的e修飾符,使用preg_replace_callback()替換
5、若必須使用preg_replace的e修飾符,則必用單引號包裹正則匹配出的對象(第二個參數用單引號包裹)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章