我在解决codeshell.kr的问题
<?php
include("./config.php");
$foo = $_GET['______foo_adm1nkyj______'];
$check = urldecode($_SERVER['QUERY_STRING']);
if(preg_match("/_| /i", $check))
{
die("no hack ~_~");
}
if($foo == "adm1nkyj")
{
echo $flag;
}
echo "<br/>";
highlight_file(__FILE__);
?>我该怎么做才能拿到$flag?这些代码的脆弱性是什么?它在$_GET里吗?还是preg_match()?尽管在谷歌搜索,我还是找不到它。
发布于 2016-09-30 15:02:52
解决办法是:
http://123.111.158.161/codeshell/prob2/?......foo.adm1nkyj......=adm1nkyj这是因为PHP用请求数据数组($_GET、$_POST、$_REQUEST、$_COOKIE)键中的下划线替换点和空格。
来自PHP文档
注意:变量名称中的点和空格被转换为下划线。例如,
<input name="a.b" />变成了$_REQUEST["a_b"]。
这可能是一个遗留下来的时候,登记全球仍然是一件事。
发布于 2016-09-30 15:02:41
当您知道一件事时,这个问题实际上非常简单: php用下划线替换GET变量名称中的点。
脚本检查GET变量中是否有下划线,如果有,就会死。因此,它无法达到检查GET变量值的程度。但是如果你用点代替下划线,它就会通过。
就叫这个网址吧:
123.111.158.161/codeshell/prob2/?......foo.adm1nkyj......=adm1nkyjhttps://stackoverflow.com/questions/39793641
复制相似问题