【攻防世界】PHP2
又因为编码后参数%61dmin中存在特殊字符%,浏览器会自动进行URL解码,所以我们对%进行编码:%25。网站是由前端,后端,数据库,服务器,域名,其他组件(图像、视频、第三方API、安全认证等)组成;总之:可能考察php脚本在服务器上运行,php脚本文件的经典路径;会在服务器上执行,生成动态的HTML页面,然后将页面发送给用户的浏览器进行显示。urldecode是PHP函数,解码经过URL编码的
1.信息收集:
你能验证这个网站吗?
怎样验证这个网站呢?网站是由前端,后端,数据库,服务器,域名,其他组件(图像、视频、第三方API、安全认证等)组成;
还有一个信息,这个题目的名称是PHP2
那php和这个网站的关系是什么?
PHP2是服务器端脚本语言,主要用于处理和生成网页的内容,当用户访问一个网站时,PHP脚本会在服务器上执行,生成动态的HTML页面,然后将页面发送给用户的浏览器进行显示。
按照这个思路找到php脚本的路径,保存在什么文件;
总之:可能考察 php语言在网站上运行的脚本文件;
2.按照思路:
常见的 PHP 脚本通常是保存在以 .php
为扩展名的文件上。这些文件可以存储在web 服务器的文档根目录中,以便通过浏览器访问和执行;经典的示例文件名:可能是 index.php
或 script.php,
实际上可以选择任何合法的文件名作为 PHP 脚本的文件名。
1.尝试index.php
文件:
能够正常访问,意味着存在这样脚本文件;
2.尝试script.php文件:
意味着根本不存在这样脚本文件;
总之:知道了php脚本文件是:index.php
这个脚本文件是在服务器上运行的,不是在客户端浏览器上,我们得知道这个脚本文件里的代码,也就是说找到脚本源代码,php文件源代码通常在phps文件,尝试一下:
果然在这里,通常不可能访问到一般网站的脚本路径,更不用说是脚本的源代码;
总之:可能考察php脚本在服务器上运行,php脚本文件的经典路径;更重要的是php源码审计;
3.代码审计:
<?php
if("admin"===$_GET[id]) {
echo("<p>not allowed!</p>");
exit();
}
$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "admin")
{
echo "<p>Access granted!</p>";
echo "<p>Key: xxxxxxx </p>";
}
?>
Can you anthenticate to this website?
代码核心在:
$_GET[id] = urldecode($_GET[id]); //通过get请求得到参数id的值,再对其进行url解码
if($_GET[id] == "admin") //url 解码后的值等于"admin" 成立
知识点:
urldecode是PHP函数,解码经过URL编码的字符串,解码回原始的形式;URL编码中某些字符被替换为%后跟两个十六进制形式;这是为了确保 URL 中的特殊字符不会与 URL 结构冲突。例如,空格字符在 URL 中被编码为 %20
,而 &
字符被编码为 %26,%字符被编码为%25
操作:
脚本里的urldecode:可以对"admin"部分或者对全部进行编码,对a进行编码:%61;id=%61dmin
又因为编码后参数%61dmin中存在特殊字符%,浏览器会自动进行URL解码,所以我们对%进行编码:%25
最终id==%2561bmin
也就是所对这个php脚本通过get请求给参数id赋值;这个脚本自动运行;
尝试结果:
得到了flag;
总之:考察PHP代码审计,PHP函数;反向思维解决问题;
更多推荐
所有评论(0)