攻防世界PHP2
一、
1.进入环境
看到一句话“Can you anthenticate to this website?”意思为:你能认证到这个网站吗?
2.burpsuite
用burpsuite抓包后也没有什么重要的信息o(一︿一+)o
我们可以进入index.php,但页面并没有变化。
于是输入index.php开始有东西出来了。
在这里可能看的不明显,我们直接回到页面在后面+/index.phps看看
给出了一下代码
3.解析代码
not allowed!"); exit();}$_GET[id] = urldecode($_GET[id]);if($_GET[id] == "admin"){ echo "Access granted!
"; echo "Key: xxxxxxx
";}?>Can you anthenticate to this website?
只需一眼就可以看出这是一个 PHP 代码片段,用于检查用户是否具有访问网站的权限
第一行是 PHP 的开头标记,表示 PHP 代码的开始。
第二行检查通过 URL 传递的 'id' 参数的值是否等于 'admin'。如果它相等,则使用 'echo' 函数显示消息“not allowed!”并使用 'exit' 函数退出脚本。这是为了防止未经授权访问网站的管理员页面。
第六行使用 'urldecode' 函数解码 'id' 参数的 URL 编码值。
第七行检查 'id' 参数的解码值是否等于 'admin'。如果它相等,则使用 'echo' 函数显示消息“Access granted!”和一个密钥。
代码以 PHP 结束标记结束。
咱们的目的就是求出这个密钥了( ¯▽¯;)
4.但要注意的是这个函数urldecode
urldecode() 是一个 PHP 函数,用于解码 URL 编码字符串。在 URL 中,一些字符是有特殊含义的,例如空格、问号、等号等。如果需要在 URL 中使用这些字符,就需要对其进行编码,将其转换成特定的编码格式。例如空格会被编码成 %20。urldecode() 函数可以将这些编码格式的字符解码回原始字符,以便使用或显示。
在上面的 PHP 代码片段中,urldecode() 函数用于解码传递的 'id' 参数的 URL 编码值,以便后续判断 'id' 参数的值是否等于 'admin'。
所以直接输入下面是不行的。
http://61.147.171.105:64170/?id=admin
我们需要将admin进行转换,也就是进行url编码。
admin 的 URL 编码是 %61%64%6d%69%6e。
http://61.147.171.105:64170/?id=%61%64%6d%69%6e
还是不行滴!
因为浏览器本身会进行因此url解码,这里相当于进行两次url解码,应该是
http://61.147.171.105:64170/?id=%2561%2564%256d%2569256e
最后也是得到结果了!\( ^▽^ )/
5.知识总结:(✿◡‿◡)
1.后缀名为.phps的文件:phps即php source,phps文件就是php的源代码文件,通常用于提供给用户查看php代码,因为用户无法通过web浏览器直接查看到php文件的内容,所以需要用phps文件代替
2.在传入参数时,浏览器会对非ASCII编码进行一次urlencode,结果在代码执行时,相当于id还是admin,所以我们在传参时需要进行两次URL编码
3.在URL编码中, "%" 符号是一个特殊字符,它被用来表示接下来的两个字符是一个ASCII值的十六进制表示。因此,如果我们想要在URL中出现一个 "%" 符号本身,而不是它的特殊含义,那么我们需要对它进行编码。
4.对于 "admin" 字符串,在进行一次URL编码后,会得到 "%61%64%6d%69%6e" 这个字符串。如果我们想对其进行二次URL编码,可以使用 "%25" 来代替每个 "%" 符号。由于 "%25" 在URL编码中表示 "%" 符号,所以最终的二次URL编码结果为 "%2561%2564%256d%2569%256e"。
5.另一方面,如果我们将 "%25" 放在 "dmin" 前面,会得到 "%25dmin"。这个字符串也可以被解码为 "admin"。这是因为,在进行URL解码时,系统会先解码所有出现的 "%" 符号,然后再将剩下的字符串解码为原始字符。因此,"%25dmin" 和 "%2564%6d%69%6e" 都可以被解码为 "admin"。
来源地址:https://blog.csdn.net/m0_74047686/article/details/129494742