Posted by ColasDAD on 26 Aug, 2022
再一次去打酱油了,只是这次酱油打的有点意思,一道PWN都不会的我,居然凭一己之力,靠AliceWebsite的攻防和BabyJS全场第2、小组第1的防守,把队伍带进了小组TOP30排行榜^_^。老规矩,这里把赛题拿出来分享。
下载地址web_AliceWebsite,解压密码w3LcOm3_t0_WDB2020!。 这题真的很基础,简单的PHP文件包含漏洞。进攻:直接index页面action参数后面跟file:///flag就出结果了。防守也很简单,index.php里面把php部分的判断写死即可,如下:
<?php
$action = (isset($_GET['action']) ? $_GET['action'] : 'home.php');
if ($action=='home.php') {
include 'home.php';
} else if ($action=='about.php') {
include 'about.php';
} else {
echo "File not found!";
}
?>
下载地址web_faka,解压密码w3LcOm3_t0_WDB2020!。
这题我作为没php环境的酱油人,现场没做出来,大家可以参考一下别人的题解,最终问题还是文件包含。
下载地址web_babyJS,解压密码8652ee29ebef5a49。
这题进攻我不会,但是防守成功。题目内容提示“nodejs的url库真好用”,自然而然想到的就去审计调用url的地方去了,在\routes\index.js里debug的get请求部分有使用var u=req.query.url.replace(/[\"\']/ig,'');替换掉“’”和“””单双引号,虽然我不懂nodejs,但是本能的感觉变量u会存在问题,直接两个地方都都对u进行限制防御,一开始尝试限制字符“flag”没效果,接着尝试限制“%”时防守成功。代码如下:
router.get('/debug', function(req, res, next) {
console.log(req.ip);
if(blacklist.indexOf(req.ip)!=-1){
console.log('res');
var u=req.query.url.replace(/[\"\']/ig,'');
u=u.replace('%','');
console.log(url.parse(u).href);
let log=`echo '${url.parse(u).href}'>>/tmp/log`;
console.log(log);
child_process.exec(log);
res.json({data:fs.readFileSync('/tmp/log').toString()});
}else{
res.json({});
}
});
router.post('/debug', function(req, res, next) {
console.log(req.body);
if(req.body.url !== undefined) {
var u = req.body.url;
u=u.replace('%','');
var urlObject=url.parse(u);
if(blacklist.indexOf(urlObject.hostname) == -1){
var dest=urlObject.href;
request(dest,(err,result,body)=>{
res.json(body);
})
}
else{
res.json([]);
}
}
});
可以估计这题有urlencode绕过的问题,懂nodejs的大佬来解释一下。 babyJS这题是下半场才放出的,估计很多大佬都没想到会用nodejs这种比较新的语言,没任何准备。我这歪打正着防守成功那一霎那真是我队的高光时刻,直接让排名直线上升。让这次酱油之旅居然充满了惊喜和意外,同时也让自己感叹,还是需要扎实的基础啊。
下载地址pwn_easypwn,解压密码w3LcOm3_t0_WDB2020!。
下载地址pwn_lua_uaf,解压密码w3LcOm3_t0_WDB2020!。
下载地址pwn_orwheap,解压密码w3LcOm3_t0_WDB2020!。
下载地址pwn_crypto-system,解压密码85223e7ca4c2b3b3。
下载地址pwn_ciri,解压密码没有,有志者试试爆破吧。