目录
[SWPUCTF 2021 新生赛]easy_md5
[SWPUCTF 2021 新生赛]include
[SWPUCTF 2021 新生赛]PseudoProtocols
这里通过nssctf的题单web安全入门来写,会按照题单详细解释每题。题单在NSSCTF中。
想入门ctfweb的可以看这个系列,之后会一直出这个题单的解析,题目一共有28题,打算写10篇。
[SWPUCTF 2021 新生赛]easy_md5
[SWPUCTF 2021 新生赛]easy_md5 |
<?php highlight_file(__FILE__); #显示这个文件的代码include 'flag2.php'; #包含flag文件if (isset($_GET['name']) && isset($_POST['password'])){ #if判断通过get请求name变量通过post请求password变量$name = $_GET['name']; #定义name$password = $_POST['password']; #定义passwordif ($name != $password && md5($name) == md5($password)){ #要求name和password值不同但md5值相同echo $flag;}else {echo "wrong!";}}
else {echo 'wrong!';
}
?>
这里记住md5的题基本都是这个,md5弱比较,md值为0e开头的会被识别为科学计数法结果为
0所以我们直接搜索md5值为0e开头的值就行
240610708
0e462097431906509019562988736854
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e509367213418206700842008763514
s1502113478a
0e861580163291561247404381396064
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s155964671a
0e342768416822451524974117254469
这里面的都是
得到FLAG
[SWPUCTF 2021 新生赛]include
[SWPUCTF 2021 新生赛]include
按他说的传入一个file
<?php
ini_set("allow_url_include","on"); #通过ini_set是allow_url_include的选项改为on allow_url_include为on代表允许远程服务器上包含php文件
header("Content-type: text/html; charset=utf-8");
error_reporting(0); #通过error_reporting关闭错误报告
$file=$_GET['file']; #通过get获取file变量赋值给file
if(isset($file)){ #if判断show_source(__FILE__); #show_source将当前文件输出到页面上echo 'flag 在flag.php中';
}else{echo "传入一个file试试";
}
echo "</br>";
echo "</br>";
echo "</br>";
echo "</br>";
echo "</br>";
include_once($file); #include_once将$file变量指定的文件包含进来,并执行文件中的php代码
?>
这里include开了肯定是文件包含,我们使用php伪协议通过base64过滤器将文件内容转为base64内容
php://filter/read=convert.base64-endode/resource=flag.php
php://filter/read
是一种特殊的数据源,用于读取并过滤输入数据。read
表示读取操作,即将数据源的内容读取到 PHP 程序中。可以在 read
后面指定一个或多个过滤器,用于对数据进行过滤和转换。
在通过base64解密
[SWPUCTF 2021 新生赛]PseudoProtocols
[SWPUCTF 2021 新生赛]PseudoProtocols |
这里和上面一样的使用伪协议
base64解密
<?php
ini_set("max_execution_time", "180"); #ini_set 设置php运行时间的选项 max_execution_time为180表示php程序最多可以运行180秒
show_source(__FILE__); #通过show_source将当前文件源码输出到页面
include('flag.php'); #包含flag.php
$a= $_GET["a"]; #通过get方法获取a变量赋值给a
if(isset($a)&&(file_get_contents($a,'r')) === 'I want flag'){ #通过if判断先判断是不是空,然后通过file_get_contents读取变量$a'r'代表已只读的方法打开。如果读取成功会返回文件内容如果读取失败返回flaseecho "success\n";echo $flag;
}
?>
很明显我们要构造$a的内容为a通过data方式传递a的内容为I want flag
这里我们要明白通过url指定的a的值为I want flag 是不行的因为file_get_contents在解析url时会把a的值当为地址去解析即去$a=I want flag中获取数据打开,而$a=I want flag中没有数据。
通过data 中file_get_contents会直接将数据I want flag读取
data:<MIME type>[;charset=<charset>][;base64],<data>
其中 <MIME type>是数据类型 test/plain 代表文本类型 image/png代表图片类型
<charset> 代表字符编码 如 utf-8 gb2312
<base64> 指示数据部分是否进行了base64编码
<data> 数据部分可以是文本,图片,等等