Web_XCTF_WriteUp | PHP2

发布时间 2023-11-30 14:35:38作者: Guanz

题目

分析

尝试 url 接弱密码和找 php 源码,坐牢 1h。
看了大佬的 WP 才知道 php 源码文件扩展名是 phps,于是将 url 接上 /index.phps 找到源码:


整理一下代码,大致意思是:

if("admin"===$_GET[id]) {          // 如果传入的id值为字符串admin
  echo("not allowed!");            // 输出字符串not allowed!
  exit();                          // 退出
}

$_GET[id] = urldecode($_GET[id]);  // 将传入的id值进行url解码后赋值给id
if($_GET[id] == "admin")           // 如果id值为字符串admin
{
  echo "Access granted!";          // 输出字符串Access granted!
  echo "Key: xxxxxxx ";            // 输出字符串Key: xxxxxxx 
}

也就是说要得到 Key,输入的 id 值本身不能是 admin,但经 urldecode 解密后为 admin。


因为找到的 url 在线加密都不对字符进行加密(后来找到了,链接附在文末),于是进行手动操作。先对 admin 进行十六进制加密,再在每个字符的密文前加 % 符号:


将密文拼入 url:

输入错误,拼接的部分直接变成 admin 了?!


了解了发送 http 请求后 url 参数的编解码后才知道,服务器端在收到 url 后会先对 url 进行一次解码。因此想要将编码后的参数传递到 php 代码中,需要对参数再进行一次编码,得到 %2561%2564%256d%2569%256e


拼入 url 发送,得到 flag:

Flag

cyberpeace{7ba6a52f1a72c30030af5463645fb5f2}

参考

PHP_ urldecode-Manual
PHP_ echo-Manual
如何把英文字母等非特殊字符也url编码-д一点红ж-CSDN博客
http请求(GET_POST)时,url_参数编码的过程分析-柒叶-mmmming-SegmentFault思否
在线URL编码_在线URL解码_URLEncode解码_UrlEncode编码原理_百分号编码-查错网