习题4.php2
将场景打开后网页显示了一句话:你能认证这个网站吗?
使用bp:
在使用bp抓包成功后进行爆破,在get后面的路径加上标记 ,在payloads处添加爆破字典注意去掉有效载荷编码,否则/会被转义编码掉,或者直接删除其中的/。爆破出两个路径态码都是200
,index.phps 是php的一个备份的一种形式,点开发现是一段代码,进行访问看下网页
然后查看刷新出来的网页的源代码
if("admin"===$_GET[id]) { #3个=属于强等于,要求后面的值与前面的值保持一致,如果 id的值和admin不相同则跳出if循环,所以两个值不相同才可以继续下去
echo("
not allowed!");
exit();
}
$_GET[id] = urldecode($_GET[id]); #传输的值进行urldecode编码,将编码后的值赋给$_GET[id]
if($_GET[id] == "admin") #进行第2次判断值是否与admin相同
{
echo "
Access granted!";#如果相同的话就通过输出flag
echo "
Key: xxxxxxx ";
}
?>
Can you anthenticate to this website?
因为$_GET特性自带一次urldecode,而代码中又进行了一次urldecode,所以需要对admin进行两次urlencode才能满足if要求进行构造: index.php/?id=%2561dmin(因为正常去带着一个编码的结果去进行一次请求的时候,本身这个url会自己又进行一次解码,所以说呢,本身解了一次,然后url又解了一次,相当于解两次码,所以说我们要正向的进行编码,编两次)
要在index.php后面进行utl编码,因为index.phps只是源代码
习题五.backup
通过题目得知存在备份文件。常见的备份后有:.git,.svn,.swp,.svn.~,.bak,.bash_history
方法一:用不了老师给的工具,所以我直接用的御剑扫描,扫描之后得到一个bak的文件,双击将文件下载下来,直接用记事本打开就可以发现flag
方法二:python脚本编码
import requests url = 'http://61.147.171.105:53788/' # 目标URL dictionary = "php.txt" # 路径字典文件名,包含要尝试的路径列表 # 读取路径字典文件中的路径列表 with open(dictionary,"r") as file: paths = file.read().splitlines() for path in paths: target_url = url + path response = requests.get(target_url) if "cyberpeacef{" in response.text: flag_start = response.text.index("cyperpeace{") flag_end = response.text.index("]",flag_start) + 1 flag = response.text[flag_start:flag_end] print("路径爆破成功:" + target_url) print("flag: " + flag) break else: print("路径爆破失败,未找到flag.")
运行成功得到flag