百度杯12月第四场Blog进阶版解题过程记录
来源:互联网 发布:淘宝账号无法登陆 编辑:程序博客网 时间:2024/05/29 13:24
继上篇百度杯12月第四场Blog挑战赛后,又出了一道Blog进阶版,其中有些内容非常开阔脑洞。
用上一篇提到的insert注入方法能够顺利获取到admin的账号和密码,这里就不再重复阐述;
另外提一下,出题人的解中用到了注册用户名处存在的一个二次注入,可以试一下。
接下来就是坑点的开始了:
在Blog那题中,做到以admin身份登录系统后,接下来使用php://filter读一波网站根目录下的flag.php即可解决,
如图:
但是在这里发现php://filter失效了。
使用上面这个payload读不到任何东西,于是尝试包含其他文件,如下:
发现包含功能还是起作用的,这说明出题人一定是在包含路径上作了手脚废了伪协议读文件内容的方法。。
到现在正常的思路已经走到尽头了,因为网站上所有相关的php我们已经都利用过了(详见上一篇)
接下来思路变得十分重要,从读网站上某个文件的角度去考虑,有以下几个角度:
php伪协议包含读文件内容
上传webshell,执行命令读文件
上传php,读特定文件
后两个其实方法是差不多的,可现在网站既找不到上传点,也不能用伪协议了,如何才能做呢?
这里利用了php对POST上传文件临时保存的特性,以及与自包含递归爆内存的结合成功上传并包含了webshell,下面是详解:
php对post过来的文件有一个默认处理流程,即在一个处理周期内(post,response),首先将post过来的文件保存在/tmp文件夹下,
文件名为php{0-9A-Za-z}的随机字符,如果文件被php文件本身用到了,则php直接使用/tmp里的这个临时文件,如果没用到或者处理完毕了,则将/tmp下的这个临时文件删除。
也就是说,在正常处理流程下,tmp目录下的这个文件存活周期是一次请求到响应,响应过后,它就会被删除,因为kindeditor那里存在的目录遍历漏洞,导致我们可以查看tmp目录下的文件列表,我们也可以对任一php文件post一个文件过去,使其暂存于tmp目录下,问题就在于,我们还没来得及包含这个文件,它就会在这次请求结束后被删除掉。
如何不让它被删除掉呢?删除和处理请求的都是php,所以我们要让php守护进程产生内存溢出,换言之,使之崩溃,而php自身是不会因为错误直接退出的,它会清空自己的内存堆栈,以便从错误中恢复,这就保证了web服务的正常运转的同时,打断了php对临时文件的处理。
自包含恰巧可以做到这一点,什么是自包含呢?
即: /X.php?include=X.php
这样X.php就会将它本身包含进来,而被包含进来的X.php再次尝试处理url的包含请求时,又将自己包含进来一遍,这就形成了无穷递归,递归会导致爆栈,使php无法进行此次请求的后续处理,也就是删除/tmp目录中我们通过post强行上传的临时文件。
整理下php对一个post文件请求的正常处理流程:
1.manager.php接收一个Post请求,php在/tmp目录下创建我们post的文件
2.manager.php处理请求url,包含一个文件
3.manager.php进行文件处理
4.php删除/tmp目录下的临时文件
整理下这个漏洞的触发过程:
1. manager.php接收一个Post请求,php在/tmp目录下创建我们post的文件
2.manager.php处理请求url,不断自包含本身造成内存溢出
3.php发出内存溢出信号,清空缓冲区和调用堆栈,以便接收新的请求
4./tmp目录下的上传文件得以保留
5.包含/tmp目录下的上传文件形成webshell
于是我们本地构造一个payload,通过这个payload递送一个post请求包含一个文件的同时使manager.php自包含溢出崩溃:
上传一个随意文件,
用上一次中发现的目录遍历漏洞查看/tmp目录下文件情况,发现果然增加了一个文件:
文件名为phppnvQgE..,我们上传的文件就是它了。
图为自包含请求返回的效果,(无穷无尽,还在不断返回中
接下来就是用manager.php再去包含/tmp目录下的那个文件了:
payload:
http://2f214b095a5f4812af6256eaabea4dcca38fc9f064014b4a.ctf.game/blog_manage/manager.php?module=../../../../tmp/phppnvQgE&name=phpss
由于我们之前上传的文件是phpinfo,此处正式包含了进来:
故技重施,上传了几个webshell,但是都不能正常使用,这才发现phpinfo里已经用disable-function禁用了大部分函数:
仔细分析后,发现copy函数没有被禁用,于是想到将flag.php利用copy函数copy成一个txt文件,那么就可以像robots.txt一样直接被包含读取咯。。
final-PayloadA:
上传文件:
<?php
copy("/var/www/html/flag.php","/tmp/flag.txt");
?>
此处必须再膜拜一下出题人的严谨,/var/www/html目录被设置为了不可写,试了好多次,发现只能将flag.txt copy到/tmp目录下。
上传上述文件后用manager.php包含一遍,即可在/tmp目录下看到flag.txt了:
payload:
http://2f214b095a5f4812af6256eaabea4dcca38fc9f064014b4a.ctf.game/blog_manage/manager.php?module=../../../../tmp/phprIPURM&name=phpss
查看/tmp目录下:
有flag.txt了,再然后,manager.php包含一波:
payload:
注意这里可能被安全宝封,所以GET方法改为OPTIONS
读到flag~
0 0
- 百度杯12月第四场Blog进阶版解题过程记录
- 2016百度杯12月第四场挑战赛解题过程记录
- 百度杯ctf2月场web-include
- #个人赛第四场解题总结#
- i春秋百度杯CTF比赛2016年12月场writeup
- 记录百度图片抓取过程
- 搬场行业集体退出百度四个月
- 【001】快乐数字解题过程记录
- leetcode小白解题记录——第四题
- 11月-12月记录
- 2013年多校联合第四场(2013 Multi-University Training Contest 4)解题报告
- UESTC 第五届ACM趣味程序设计竞赛第四场(正式赛) 解题报告
- UESTC-第五届ACM趣味程序设计竞赛第四场(正式赛)--不完全解题报告
- 记录一下,百度地图使用过程
- 百度杯”CTF比赛(十一月场)
- 百度杯二月Reverse场CrackMe11writeup
- 百度杯”CTF比赛(十二月场)
- 百度之星2010 复赛第二场 第二题 题目 解题报告
- QT基础学习
- c# Thread 线程
- pyCharm最新2017激活码
- 【web安全】使用burpsuite拦截,篡改,转发请求
- ionic---上拉加载下拉刷新
- 百度杯12月第四场Blog进阶版解题过程记录
- spring-data-jpa通用dao的扩展
- Hibernate总结整理(一)-Hibernate五大核心接口
- C#基础知识—运算符
- 关于Android中多线程中异常捕获出现的问题和解决办法
- Wireshark实战分析之ARP协议
- 最小比例生成树
- ionic---ion-view 视图的生命周期
- iOS 根据 crash 崩溃 报告的内存地址定位到代码位置