2021 DASCTF July X CBCTF 4th/web/cat flag

这篇博客详细介绍了参与2021 DASCTF July X CBCTF 4th/web/cat flag挑战的解题过程。博主分享了如何绕过正则表达式和escapeshellarg函数,通过查找常见web中间件日志文件的位置,最终在Nginx的日志access.log中发现flag文件名。解题关键在于利用ASCII码大于127的字符来同时规避正则和escapeshellarg函数的限制。

题目源码:

<?php

if (isset($_GET['cmd'])) {
    $cmd = $_GET['cmd'];
    if (!preg_match('/flag/i',$cmd))
    {
        $cmd = escapeshellarg($cmd);
        system('cat ' . $cmd);
    }
} else {
    highlight_file(__FILE__);
}
?>

知识点:

1.绕过正则

2.escapeshellarg函数绕过

3.熟悉常见web中间件日志文件存放位置

解题过程:

1.了解代码流程

(1)我们需要通过get方式传入cmd参数。

(2)正则的if语句判断。

判断条件:传入的cmd参数中是否包含flag/FLAG/字样

判断成功:传入的cmd参数中不包含flag/FLAG/字样,并执行如下代码。

    {
        $cmd = escapeshellarg($cmd);
        system('cat ' . $cmd);
    }

其中cmd参数会通过escapeshellarg函数处理后再通过system函数执行cat $cmd命令

判断不成功:传入的cmd参数中包含flag/FLAG/字样,并执行如下代码。

{
    highlight_file(__FILE__);
}

2.解题思路:

我们要通过查看日志文件来找到flag文件名称,并且需要绕过正则和escapeshellarg函数来最终达到执行cat命令拿到flag。

3.具体绕过姿势

(1)首先百度查询并通过测试发现日志文件为/var/log/nginx/access.log 

payload1:?cmd=/var/log/nginx/access.log

利用cat命令查看日志发现baohanflag的文件名this_is_final_flag_e2a457126032b42d.php

(2)绕过正则和escapeshellarg函数:

因为escapeshellarg函数会忽略ASCII码大于127的字符,所以我们找一个ASCII码大于127的字符嵌在'flag'中,这样既可以绕过正则又可以绕过escapeshellarg函数,一举两得,这里找一个字符例如%af,%df,%ae绕过即可。

payload:?cmd=this_is_final_fla%aeg_e2a457126032b42d.php

 

总结:

1.常见日志文件存放位置

Nginx:

访问日志文件:
/var/log/nginx/access.log 
/usr/local/nginx/logs/access.log
错误日志:
/var/log/nginx/error.log
/usr/local/nginx/logs/error.log

Apache:

访问日志:
/var/log/apache/access.log
/usr/local/apache/logs/access_log
错误日志:
/var/log/apache/error_log
/usr/local/apache/logs/error_log

Tomcat:

/var/tomcat/logs
/usr/local/tomcat/logs/catalina.out

更多日志目录及介绍

https://blog.csdn.net/qq_41814777/article/details/106883265

2.escapeshellarg函数绕过

选择一个ASCII码大于127的字符

例如:%df、%ae、%af等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值