buuctf 套娃 解析

打开环境,查看源代码可以获得一段注释

 其中query的目的是获得所有上传的数据,第一个if过滤了“_”和%5f(也就是url编码的“_”),第二个if使得变量b_u_p_t要不等于23333并且后面的preg函数要使变量b_u_p_t等于23333

第一个if过滤了b_u_p_t,所以我们需要使用空格或者"."来绕过。第二个preg函数可以使用换行符进行绕过(编码为%0a)

构建payload如下

?b.u.p.t=23333%0a

 提交后得到回显

尝试进入secrettw.php

 发现无法访问,尝试从源代码寻找线索

获得一行加密内容。经查询发现是jsfuck加密,使用网站进行解密

 获得结果,尝试post传参

 首先我们来审计一下这段代码

 这个函数change实现的是将字符串v进行base64编码后,对每一个字符进行【ascii编码+i*2】的处理,最终结果输出到字符串re中。

 这段关于ip的代码要求你的访问ip为127.0.0.1。关于ip可以通过修改报表的client-ip与x-forward

进行修改

这段在满足ip=127.0.0.1和变量2333内容为“todat is a happy day”后,会将变量file内容通过函数 change进行处理,最后通过file_get_contents函数打开re函数的内容

于是payload的思路为:通过满足ip和变量2333的需求,从而在file_get_content()函数中打开flag.php,得到flag。

首先我们写一个脚本对写进change函数的数据进行处理

a="flag.php"
b=""
for i in range(0,len(a)):
    b=b+chr(ord(a[i])-i*2)
print(b)

得到

fj]a&f\b

再进行base64加密,得到

ZmpdYSZmXGI=

使用bp抓包,修改client-ip构建payload

 得到flag,此题结束。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值