Quantcast
Channel: CodeSection,代码区,Python开发技术文章_教程 - CodeSec
Viewing all articles
Browse latest Browse all 9596

湖湘杯总结

$
0
0

0x00 比赛环境吐槽

这个合天啊,真是不想说什么。上次搞比赛web也卡的不行。这次第一道web题,前一个小时根本没法正常访问。开个网页10分钟起。后来开了临时加开了好几个网页也是治标不治本,根本不行。

反正,我感觉不是服务器资源不行,是网页写搓了。

0x01 个人感受

跟着大佬比赛,真的是没我这菜鸡什么事情。web1,我还卡在10分钟一开网页,看后台有什么功能的时候,大佬已经完成注入了。web2,代码审计,看了会代码,问大佬,这是不是条件竞争, 大佬说是的,刚刚出了。web3,代码审计,一起看了一个多小时,大佬说没啥思路,先去吃饭。于是我又看了一个多小时,没啥思路,刷新网页看看有没有提示的时候,题目上赫然一个完成。问大佬什么情况,答:刚刚出了。

ORZ。

0x02 正片开始,web1

一道神棍题,介绍说是python的博客。

访问网页,~嗯~,网页卡住了。回忆了一下公司名字,~嗯~,等着吧。

先开脑洞,可能是P牛博客里面的新型文件包含,考虑到pwnhub上刚刚有过类似的题目,可能性比较高。可能是ssrf,也可能是jinja2的模板注入,还有可能是yaml反序列之类的。总而言之,应该和python的特性有关,嗯。

刷开网页,直接开始弹弹弹,看来还有xss,ORZ,不过这个似乎没什么卵用。

扫一波网页,发现 http://139.129.225.72:8080/admin/index

发现是一个特别简易的登陆框,admin’ or ‘1’=’1。

默数600下,进入后台。

默数600下,进入post。

默数600下,打开编辑页面。

默数600下,打开上传。

默数600下,测试上传。

默数600下,似乎什么反应也没有。

默数600下,看看其他后台功能。

默数600下,学长已经做完题目了,ORZ。

实际上,做题就是那个登陆框的注入。


湖湘杯总结

似乎直接跑还跑不出来,最后要手动union一下,当然我自始至终,就是默数600秒的状态,也就没跑了。

所以说,这个和python写的有什么卵关系,摊手。倒是题目这么卡,可能和用python写的有关,也许作者没处理好高并发的情况。

https://github.com/5alt/0CTF2015Final0cms

有人找到了这么个东西,光看代码,似乎两个家伙长得一模一样,ORZ。

0x03 web 2 ascii字符图库

又是个神棍题,看名字,一下子就会想到也许和编码有关。

那么就可能是xss的各种编码,sql注入的各种编码转化间导致的注入。或者再不济就是

= A, = O, = U

这种mysql下utf-8的奇葩姿势。

打开题目

又弹弹弹了,不过判断了一下,应该又是没什么卵用的。

对每个用户的发言有支持和反对功能,支持高了能排到前面去,可能有高并发下,可以一下子支持多次。不过似乎排到前面也没什么卵用。

有一个注册功能,登陆功能。

直接注册一下,登陆一下,看到服务端print_r了用户信息,并且提示此用户限制登陆。

输出了信息,可能是方便调试注入。于是测试了一会注入姿势,发现开了gpc。果然要和编码有关了吗?

就在这时学长发来一句.bak看源码,能获得index.php,register.php,login.php这三个的源码。


湖湘杯总结

可以看到过掉if以后就能获得flag了。


湖湘杯总结

注册时的逻辑是先往users表里面插入用户和密码,再往privs表里面插入权限信息。

显然两次数据库操作间存在时间差,如果在插入用户密码,还没有插入权限信息的时候登陆,就能获得flag了。

这是一个典型的条件竞争。

于是直接打开上次hctf的跑得比西方记者快的代码,改一下。

跑个一分钟左右就出了。


湖湘杯总结

0x04 web 3 white & black

打开一看


湖湘杯总结

是个登陆框。根据p牛博客所说50%的web打开是登陆框,其中60%以上能拿到源码。(说实话我感觉比例还要高)

于是用bbscan扫了一波。


湖湘杯总结

下载下来看看。


湖湘杯总结

嗯,行数比上面要多一些。

直接通读源码,看看什么情况。


湖湘杯总结
湖湘杯总结

所有和数据库操作的函数都上了waf,mysqli_real_escape_string这个函数是会考虑当前数据库的字符集的,所以宽字节是没有希望的。

注意到username还trim了一下,是为了防止有人尝试用数据库截断来做坏事。


湖湘杯总结
湖湘杯总结

不仅入库的时候上了waf,对所有get和post的数据都过滤了,还考虑了提交数组的情况。

注入基本是没戏了。


湖湘杯总结

可以看到这里出现了一个power,但是搜索项目,没有发现这个参数的用处,观察了一下,发现没给admin.php的代码。

结合white & black,白盒加黑盒,这个应该是下一步的关键。


湖湘杯总结

这里面有个auth函数,应该就是这里,绕过这个验证,获得权限。


湖湘杯总结

可以看到,这里注释也说了,防止边信道攻击。不论是否有结果,都去做一次hash_equals。(当然网这么卡,怎么可能时序边信道)。


湖湘杯总结

这里还向低版本兼容了,下面这个hash_equals是php官网上的一个实现,不敢说没有问题,但也不敢说服务器用的是下面的实现。问题应该不在这里。

后来,我才发现,提示在我截的第一张里面就有


湖湘杯总结

Random我一开始还一直以为是大佬出的题目,我还特地问了一下发现不是就没在意了。

其实这里提示的是:


湖湘杯总结

发现用到了rand这个不安全的随机数。

怎么玩,看p牛博客 .

照着脚本修修改改就进去了。


湖湘杯总结

发现是个upload。


湖湘杯总结
湖湘杯总结

有个可疑请求。

跑一下目录。


湖湘杯总结

发现能看到服务器上的操作记录。


湖湘杯总结

有一条奇葩的请求,似乎是保存截图的功能(我是服务器关掉后复现的,就没看到截图了,ORZ)


湖湘杯总结

服务器监听一下端口,来看一下报文,发现有JSEngine的字样。

后面的做法就和 点我 一样了。

我没复现完,卡在后面ssrf的编码处了,成功设置了ua,但是没能RCE。

调着调着就被拉去开会了,回来环境已经关了。

唉。


Viewing all articles
Browse latest Browse all 9596

Trending Articles