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