All Posts

HGAME 2019 week-2 writeup

WEB 0x01 easy_php 打开题目链接发现什么都没看见,只有标题上的一句话:Where is my robots? 于是便想到了robots.txt文件(网站和爬虫之间的协议)于是进入: http://118.24.25.25:9999/easyphp/robots.txt 又提示了一个新的页面,进入: http://118.24.25.25:9999/easyphp/img/index.php 看到了某社区的logo(纯洁的我当然不知道这是啥),和一串php代码,不太清楚这个图片有什么用(也许是为了更加贴切H-Game?)于是就干脆直接看代码了: <?php error_reporting(0); $img = $_GET['img']; if(!isset($img)) $img = '1'; $img = str_replace('../', '', $img); include_once($img.".php"); highlight_file(__FILE__); ?> 分析代码: 1.变量$img不为空(很显然) 2.变量$img通过函数str_replace()过滤了“../” 3.由include_once()函数引发的文件包含漏洞。(在这里,img只需要为文件名即可,后缀”php”已存在) 经过以上分析,首先搜索了str_replace()函数的相关漏洞: 漏洞解析 :https://www.freebuf.com/column/183986.html 这一题考察的是一个 str_replace 函数过滤不当造成的任意文件包含漏洞。程序仅仅只是将 ../ 字符替换成空,这并不能阻止攻击者进行攻击。例如攻击者使用payload:….// 或者 …/./ ,在经过程序的 str_replace 函数处理后,都会变成 ../ ,所以上图程序中的 str_replace 函数过滤是有问题的。 所以尝试着猜测并构造了: http://118.24.25.25:9999/easyphp/img/index.php?img=....//flag 刚开始出来的是个带hgame{}的字符串,以为就是flag了,开开心心去提交以为能一血结果被泼了一盆凉水…. (后来出题人将hgame{}去掉了) ,题目出了提示让我们在think think,于是就想到了是否可以用PHP伪协议php://filter来读取一下文件的源码,所以构造payload: http://118.24.25.25:9999/easyphp/img/index.php?img=php://filter/read=convert.base64-encode/resource=....//flag 得到了一串base64编码,解码后得到又一串php代码: <?php //$flag = 'hgame{You_4re_So_g0od}'; echo "maybe_you_should_think_think"; ?> 得到flag,然后出题人竟然坏坏地把本来第一步就可以出来的flag注释了。。。让我们看源码233

HGAME 2019 week-1 writeup

WEB 0x00 谁吃了我的 flag? 这题真的 真的 做了 好久 好久。。刚开始想着是不是能从 bp 抓到的 http 头中找到些什么,结果发现一无所获。。 然后重新回去读了一下题目。 没好好关机啊。。而且还是用 vim,没保存,于是就上百度搜了一下, 找到了一道实验吧的题的 wp: https://blog.csdn.net/wy_97/article/details/76559354 讲了关于的 vim 临时文件,.filename.swp ,于是便访问:http://118.25.111.31:10086/.index.html.swp得到 swp 文件,用vim -r 恢复一下,就看到了flag。 0x01 换头大作战 打开题目发现有一个表单,这时随意输入些什么如“want” 发现题目提示我们需要使用 POST 的方式提交表单,于是我们去找十二姑娘将 method 改为 POST 然后重新提交表单即可 这里提示我们使用X-Forwarded-For进行 ip 伪装成本地访问,故启动 burpsuite 抓包 将我们抓到的包发去 repeater 进行改包并重发: X-Forwarded-For :127.0.0.1 重发后提示我们修改 User-agent 为水狐 2333,于是很显然:将后面的Chrome改为:Waterfox/50.0 再重发,得到提示我们需要从 bilibili 来访问题目,于是: referer:www.bilibili.com 得到you are not admin,故更改 cookies=0 -> cookies=1 拿到 flag. 0x02 代码审计 分析源码可知: 1. strpos 函数判断我们提交的变量 id 的值在字符串”vidar”中第一次出现的位置。 2.