作为一名安全小白,若你想对Web安全进行了解学习,那么推荐你尝试这个闯关游戏,此款游戏共33关,当你拿到上一关密钥时方可进入下一关,在这里我和大家分享一下闯关经验以及学习心得。附上游戏地址:http://overthewire.org/wargames/natas/natas0.html
首先我对Natas进行一下介绍,在这个闯关游戏中大家会学习到一些基础的web安全知识,每一关都有其对应的网址,http://natasX.natas.labs.overthewire.org,其中X代表关数,每一关用户名为其关数,秘钥会藏在/etc/natas_webpass/目录下,例如第0关用户名为Level 0,密码为natas0。当你闯过上一关时便会获得下一关的密钥,你的任务便是想办法找到密钥,从而获得知识的宝藏,让我们开始闯关之旅吧。注:本游戏不需使用SSH进行登录。
Natas Level 0
Username: natas0
Password: natas0
URL: http://natas0.natas.labs.overthewire.org
按照所给信息,我们访问网页http://natas0.natas.labs.overthewire.org,输入用户名以及密码得到提示,you can find the password for the next level on this page,按照提示在这个页面上,于是我们想到了web的基础操作,查看源代码,通过查看源代码我们获得了秘钥。
Natas Level 1
进入level1看到如下提示:
尝试查看源代码,但是会发现鼠标右键已经被锁定。在这里我们需要学习的是查看源代码的其他方式,比如通过谷歌开发者工具栏F12查看源代码,或者在URL前加上view-source:来查看源代码,通过源代码我们获取到下一关的密钥。
Natas Level 2
来到第二关,我们看到如下页面。
按照惯例查看源代码,我们似乎并不能直接获得密钥,但是我们发现这样一段html
<img class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="files/pixel.png">
保持一颗好奇心,点进去查看一片黑,似乎也没有什么信息,我们尝试查看上层文件,似乎发现了什么
尝试打开users.txt,在user.txt中我们发现了通往下一关的密钥。
Natas Level 3
进入level3,仍然是there is nothing on this page,查看源代码,我们看到这样一句话:
<!-- No more information leaks!! Not even Google will find it this time... -->
这句话的意思是Google也无法发现它,我们都知道Google是一个搜索引擎,为了让搜索引擎无法爬取一个页面,通常我们会使用robots.txt
小贴士:什么是robots.txt?
robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写。robots.txt应放置于网站的根目录下。如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。 在有了对robots.txt的了解以后,我们访问robots.txt,看到如下界面
继续尝试访问http://natas3.natas.labs.overthewire.org/s3cr3t/,我们看到users.txt,便获得了进入下一关的秘钥。
Natas Level 4
进入第四关,我们看到如下页面
大体意思是我们的访问是非法的,访问者应该来自"http://natas5.natas.labs.overthewire.org/" 在这里我们需要知道当浏览器向web服务器发送请求的时候会带上referer,告诉服务器我是从哪个页面过来的,所以我们需要抓包修改referer,得到下一关秘钥。
Natas Level 5
进入第五关,我们看到Access disallowed. You are not logged in的提示,很奇怪我们明明登陆了,却提示我们没有登录,这时候我们应该想到是cookie在作怪,cookie是由服务器分配给浏览器的,cookie中携带了会话状态和身份信息,每次http请求都会将cookie请求传送给服务器,服务器根据不同的请求信息作出不同的响应。知道这些后我们抓包查看cookie,果然设置为了0,修改cookie值为1,我们发送请求得到下一关的秘钥。
Natas Level 6
进入到level6 我们看到如下图
查看源代码,进行审计
大体意思是我们post一个参数,如果这个参数的值和需要提交的值相同则会返回密钥值,而我们要提交什么参数才能得到秘钥呢,看到includes/secret.inc,我们访问这个页面查看源代码得到一串字符,在页面提交便得到了下一关的密钥秘钥。
Natas Level 7
进入level 7我们看到了这样的一个页面
尝试点击Home和About来观察URL的变化,通过观察得知这是一个Get的方式,查看源代码发现hint
<!-- hint: password for webuser natas8 is in /etc/natas_webpass/natas8 -->
通过这段hint我们大致可以判断这是一个文件包含的漏洞,构造url使得page=1,返回如下报错信息。而我们又知道在PHP中,Include为包含并运行指定文件,当包含外部文件发生错误时,系统给出警告,但整个php文件继续执行,那这是一个文件包含漏洞是无疑的了。
构造URL使得page的值等于hint中的值便可以拿到下一关的秘钥。
Natas Level 8
进入到level8,我们看到了和level6相同的界面,查看一下源代码,发现只有前半部分有所区别,我在这里省略后半部分的讲述。
大体意思是:对字符串secret进行了编码,反过来我们可以对其进行解码
提交得到的结果我们得到下一关的秘钥。
Natas Level 9
进入level9,首先仍然查看源代码进行审计
通过代码审计可知通过函数passthru( )调用grep命令来查找我们输入的内容是否在dictionary.txt中。这里补充passthru()函数的相关知识
语法:void passthru ( string $command [, int &$return_var ] ) 同 exec() 函数类似, passthru() 函数 也是用来执行外部命令(command)的。 当所执行的 Unix 命令输出二进制数据, 并且需要直接传送到浏览器的时候, 需要用此函数来替代 exec() 或 system() 函数。 既然是一个外部命令,那我们尝试是否有注入,我们通过;来截断grep,所以构造语句;cat /etc/natas_webpass/natas10便可以得到下一关的密钥。
好啦今天就写到这里,欢迎大家展开讨论,我们下期再见。
共同学习,写下你的评论
评论加载中...
作者其他优质文章