Web_XCTF_WriteUp | PHP2
题目
分析
尝试 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编码原理_百分号编码-查错网
本文作者:Guanz
本文链接:https://www.cnblogs.com/Guanz/p/17858906.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步