nssctf web 入门(7)

本文是针对CTFWeb入门的解析,讲述了如何通过分析代码中的过滤机制,利用正则表达式的漏洞以及PHP的eval函数进行命令注入。文章中提到了如何绕过字符黑名单,使用URL编码和特殊字符如~来执行Linux命令,并讨论了如何在命令执行无回显时利用tee命令显示结果。
摘要由CSDN通过智能技术生成

这里通过nssctf的题单web安全入门来写,会按照题单详细解释每题。题单在NSSCTF中。

想入门ctfweb的可以看这个系列,之后会一直出这个题单的解析,题目一共有28题,打算写10篇。

[SWPUCTF 2021 新生赛]hardrce

[SWPUCTF 2021 新生赛]hardrce

<?php
header("Content-Type:text/html;charset=utf-8");   
error_reporting(0);  #屏蔽错误报错信息
highlight_file(__FILE__); #将当前文件的代码显示到页面上
if(isset($_GET['wllm']))  #通过get获取wllm判断是不是空
{
    $wllm = $_GET['wllm']; #将get获取的wllm赋值给wllm
    $blacklist = [' ','\t','\r','\n','\+','\[','\^','\]','\"','\-','\$','\*','\?','\<','\>','\=','\`',]; #这里定义了一个黑名单数组
    foreach ($blacklist as $blackitem)  #foreach在php中用于遍历数组,这里代表将blacklist中的每个元素挨个取出放到blackitem中
    {
        if (preg_match('/' . $blackitem . '/m', $wllm)) { #通过preg_match匹配wllm中有没有blacklist中的内容 .在这里用来拼接 /m代表匹配多行字符串,也就是匹配所有的内容
        die("LTLT说不能用这些奇奇怪怪的符号哦!");
    }}
if(preg_match('/[a-zA-Z]/is',$wllm)) #绕通过preg_match匹配所有的大小写字符串
{
    die("Ra's Al Ghul说不能用字母哦!");
}
echo "NoVic4说:不错哦小伙子,可你能拿到flag吗?";
eval($wllm); #eval执行php代码
}
else
{
    echo "蔡总说:注意审题!!!";
}
?> 蔡总说:注意审题!!!

这里过滤了所有的字母我们肯定要编码,同时又过滤了很多字符,我们发现没有过滤% url编码是将url中非ascill码和特殊字符转换为可接受的ascll码的过程,%带着16进制编码

 这里像system这种普通文本不用经过url转换我们可以用~取反来帮我们

 

 绕过了但是ls没有东西这里没有过滤()我们试试将()不编码

(~system)(~ls /)

写进去的时候不要有D6D7

 [SWPUCTF 2021 新生赛]finalrce

[SWPUCTF 2021 新生赛]finalrce

<?php
highlight_file(__FILE__);  #把当前文件的代码显示到页面上
if(isset($_GET['url']))    #通过get方法获取一个url并判断url的值是不是空
{
    $url=$_GET['url'];     #将通过get获取的url的值赋值给url变量
    if(preg_match('/bash|nc|wget|ping|ls|cat|more|less|phpinfo|base64|echo|php|python|mv|cp|la|\-|\*|\"|\>|\<|\%|\$/i',$url))  #通过preg_match判断url中中有没有像bash|nc|wget|ping|ls|cat|more|less|phpinfo|base64|echo|php|python|mv|cp|la|\-|\*|\"|\>|\<|\%|\$中的内容    /i代表匹配大小写
{
        echo "Sorry,you can't use this.";
    }
    else
    {
        echo "Can you see anything?";
        exec($url);  #exec是执行命令的函数,这里会执行url的值
    }
}

 这里我们通过\来绕过如l\s 我们知道\在正则表达式中有特殊含义可以用来匹配特殊字符,这里我们代表匹配以l开头\s代表匹配一个空白字符

由此我们通过正则匹配的方式绕过了过滤 之外我们考虑exec会执行命令但是因为没有回显,所有我们不知道有什么内容这里>也被过滤了无法通过>输出到文件中

在linux中tee是一个命令行工具,可以以标准输出复制到标准输出 一般是将终端输出输出到文件

如ls | tee 1.txt 这个命令会将ls执行的结果输出到终端同时会输出到1.txt中所有我们可以使用tee来显示结果

所以得到payload l\s / | tee 1.txt

这里查看根目录下的文件

 

 

 这里没有过滤tac 我们使用tac

tac /flllllaaaaaaggggggg 因为在过滤规则中有la使用我们要通过\转义符使la的a变成普通字符这样就不会触发la的特殊方式

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许允er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值