一次awdplus经历(网鼎杯线下赛)
开头
首先谈谈awdplus吧。个人觉得其实有点像今年的ciscn,其实就是ctf多了一个修题的环节。与awd差别还是挺大的,全程不会接触靶机,不需要ssh连,所以也不存在什么准备各种牛鬼蛇神的脚本,还是比较轻松的,每轮到了时间,拿到flag了,提交,平台会自动攻击未成功防御的选手
上图是其中一道题,攻击就只需要打自己的网站,比如你通过未过滤的命令执行点获得了flag,提交,即代表攻击成功。然后防御需要你写过滤后的源码,与update.sh一起打包成.tar.gz格式的文件,update.sh 里写mv -f 文件名 目标路径,上传到ftp后,在平台上点答题,填入压缩包文件名,平台会自动用exp打,如果exp打失败了,即为修补成功
小tricks:这里问了几个师傅,比如在今年一道目录穿越的题上,我是通过过滤..的方法修补成功,但也有师傅直接把小写的flag,改成大写的flag,exp同样打失败,判断为修补成功,所以exp打的方式可能比较单一苛刻,很多方法都可以起到防御的作用。
web_AliceWebsite
这题比较简单,拿到源码后直接丢到D盾里
可以看到直接爆出,找到对应文件路径,确定位置,源码如下:
<?php
$action = (isset($_GET['action']) ? $_GET['action'] : 'home.php');
if (file_exists($action)) {
include $action;
} else {
echo "File not found!";
}
?>
可以看到这里用户传入的action并没有任何的过滤,直接可以目录穿越
payload: ?action=../../../../flag
防御:
<?php
$action = (isset($_GET['action']) ? $_GET['action'] : 'home.php');
$deny_ext = array("..","../");
if (in_array($action, $deny_ext)){
if (file_exists($action)) {
include $action;
} else {
echo "File not found!";
}
}
?>
这里通过新建一个黑名单,过滤..和../的方法防御成功
FAKA
(源码和复现buu上均有,我就懒得放源码了)
somd5大法好,比赛的时候太难了,找到了md5密码,解不出来,跑也跑不出来,气个半死
后台就是/admin,进入后台后,发现|备份管理|添加备份|下载处同样是目录穿越,吐槽一下,同一个知识点怎么还考两次
function downloadBak() {
$file_name = $_GET['file'];
$file_dir = $this->config['path'];
if (!file_exists($file_dir . "/" . $file_name)) { //检查文件是否存在
return false;
exit;
} else {
$file = fopen($file_dir . "/" . $file_name, "r"); // 打开文件
// 输入文件标签
header('Content-Encoding: none');
header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Accept-Length: " . filesize($file_dir . "/" . $file_name));
header('Content-Transfer-Encoding: binary');
header("Content-Disposition: attachment; filename=" . $file_name); //以真实文件名提供给浏览器下载
header('Pragma: no-cache');
header('Expires: 0');
//输出文件内容
echo fread($file, filesize($file_dir . "/" . $file_name));
fclose($file);
exit;
}
}
防御的话一样做个黑名单,过滤一下即可
看了师傅们博客还有其他很多思路,这里就不赘述了
太菜了,没进总决赛,只有这两道题wp