攻防世界mfw_攻防世界web高手进阶区write up(13-19)

https://adworld.xctf.org.cn/task?now_checked_num=3&name=web

13.baby_web

解题思路:

代码审计完成之后,思路就很清晰了,对Demo这个类进行序列化,base64加密之后,赋值给var变量进行get传参就行。

在类Demo中有三个方法,一个构造,一个析构,还有就是一个魔术方法,构造函数__construct()在程序执行开始的时候对变量进行赋初值。析构函数__destruct(),在对象所在函数执行完成之后,会自动调用,这里就会高亮显示出文件。

在反序列化执行之前,会先执行__wakeup这个魔术方法,所以需要绕过,当成员属性数目大于实际数目时可绕过wakeup方法,正则匹配可以用+号来进行绕过。

在 PHP5 < 5.6.25, PHP7 < 7.0.10 的版本存在wakeup的漏洞。

构造payload get flag

14.supersqli

解题思路:网页源码提示

可能是要手工注入,但是可以用sqlmap判断是否存在注入点

找到了注入点,之后–dbs爆出supersqli数据库,-D supersqli –tables却爆不出数据表,所以要回到手工注入

加单引号,报错

–+或者#可以注释多余的单引号,但是这里#被过滤,用url编码%23也行,使sql语句闭合

order by 判断只有两个字段

接着使用union select 爆字段,发现这个时候出现了如下提示:

关键字都被过滤不能使用了,没法进行注入,这个时候尝试一下堆叠注入

查询所有数据库:

查询所有表:

查询words表中所有列:

查询1919810931114514表中所有列:(字符串为表名操作时要加反引号)

根据两个表的情况结合实际查询出结果的情况判断出words是默认查询的表,因为初始查询的结果是一个数字和字符串,words表结构是id和data,传入的inject参数也就是赋值给了id

这道题没有禁用rename和alert,所以我们可以采用修改表结构的方法来得到flag 将words表名改为words1,再将数字名表改为words,这样数字名表就是默认查询的表了,但是它少了一个id列,可以将flag字段改为id,或者添加id字段

payload

http://220.249.52.133:36575/?inject=1';rename tables `words` to `words1`;rename tables `1919810931114514` to `words`; alter table `words` change `flag` `id` varchar(100);%23

15.easytornado

解题思路:tornado是python中的一个web应用框架。

拿到题目发现有三个文件,发现flag在/fllllllllllllag文件里;

render是python中的一个渲染函数,渲染变量到模板中,即可以通过传递不同的参数形成不同的页面。猜测存在服务端模板注入攻击 (SSTI)

filehash=md5(cookie_secret+md5(filename))

现在filename=/fllllllllllllag,只需要知道cookie_secret就能访问flag。

在url加个单引号测试一下,发现一个错误页面

尝试/error?msg={{datetime}} 在Tornado的前端页面模板中,datetime是指向python中datetime这个模块,Tornado提供了一些对象别名来快速访问对象,可以参考Tornado官方文档

通过查阅文档发现cookie_secret在Application对象settings属性中,还发现self.application.settings有一个别名

handler指向的处理当前这个页面的RequestHandler对象, RequestHandler.settings指向self.application.settings, 因此handler.settings指向RequestHandler.application.settings。构造payload获取cookie_secret

计算filehash值:

构造payload get flag

file?filename=/fllllllllllllag&filehash=md5(cookie_secret+md5(/fllllllllllllag))

16.shrine

解题思路:网页源码审计,发现是 flask框架 在 /shrine/ 下的 SSTI,

而且进行了过滤,

将 ( 和 ) 替换为空字符串

将 config 和 self 添加进了黑名单

构造payload

/shrine/{{get_flashed_messages.__globals__['current_app'].config['FLAG']}}

get flag

17.lottery

解题思路:是一个彩票站,首先注册个账号,每个账号出生金额为20,每次购买7个数的彩票,金额-2。flag需要通过购买获得。

把附件下载下来,打开robots.txt,发现是git泄露,正常遇到这种情况用GitHack下载泄露文件,但这里附件已经给出。

在api.php代码审计

其中 $numbers 来自用户json输入 {“action”:”buy”,”numbers”:”1234567″},

没有检查数据类型。 $win_numbers 是随机生成的数字字符串。

使用 PHP 弱类型松散比较,以”1″为例,和TRUE,1,”1″相等。由于 json 支持布尔型数据,因此可以抓包改包,发送:

{"action":"buy","numbers":[true,true,true,true,true,true,true]}

刷钱

18.mfw

解题思路: 检查网页,发现网站是用Git,PHP,Bootstrap写的、网页源码没有线索,就用dirsearch扫一下目录,发现存在Git泄露

使用 GitHack获取源码

在templates文件夹中找到flag文件,打开却是空的

于是在index.php找到关键源码

page没有经过任何过滤和处理,所以可以传递参数闭合strpos函数

构造payload get flag

19.web2

解题思路: 打开网页,只用一页代码,提示说逆向加密算法,解密$miwen就是flag

编写解密代码,get flag

本文来自zonei123,经授权后发布,本文观点不代表立场,转载请联系原作者。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值