为了账号安全,请及时绑定邮箱和手机立即绑定

Web安全初探之闯关游戏Natas(上)

标签:
安全

        作为一名安全小白,若你想对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的基础操作,查看源代码,通过查看源代码我们获得了秘钥。

https://img1.sycdn.imooc.com//5b9a14bd0001e20805640030.jpg

  •  Natas Level 1

        进入level1看到如下提示:

https://img1.sycdn.imooc.com//5b9a151a00015c8e07530176.jpg

尝试查看源代码,但是会发现鼠标右键已经被锁定。在这里我们需要学习的是查看源代码的其他方式,比如通过谷歌开发者工具栏F12查看源代码,或者在URL前加上view-source:来查看源代码,通过源代码我们获取到下一关的密钥。

  • Natas Level 2

        来到第二关,我们看到如下页面。

https://img1.sycdn.imooc.com//5b9a16430001ad9807530155.jpg

按照惯例查看源代码,我们似乎并不能直接获得密钥,但是我们发现这样一段html 

<img class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="files/pixel.png">

保持一颗好奇心,点进去查看一片黑,似乎也没有什么信息,我们尝试查看上层文件,似乎发现了什么

https://img1.sycdn.imooc.com//5b9a16c80001ec6609740412.jpg

尝试打开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,看到如下界面

https://img1.sycdn.imooc.com//5b9a1b080001ef9c02130061.jpg

继续尝试访问http://natas3.natas.labs.overthewire.org/s3cr3t/,我们看到users.txt,便获得了进入下一关的秘钥。

  • Natas Level 4

        进入第四关,我们看到如下页面

https://img1.sycdn.imooc.com//5b9a241e0001360807140198.jpg

大体意思是我们的访问是非法的,访问者应该来自"http://natas5.natas.labs.overthewire.org/" 在这里我们需要知道当浏览器向web服务器发送请求的时候会带上referer,告诉服务器我是从哪个页面过来的,所以我们需要抓包修改referer,得到下一关秘钥。

https://img1.sycdn.imooc.com//5b9a24890001e53c18810666.jpg

  • Natas Level 5

        进入第五关,我们看到Access disallowed. You are not logged in的提示,很奇怪我们明明登陆了,却提示我们没有登录,这时候我们应该想到是cookie在作怪,cookie是由服务器分配给浏览器的,cookie中携带了会话状态和身份信息,每次http请求都会将cookie请求传送给服务器,服务器根据不同的请求信息作出不同的响应。知道这些后我们抓包查看cookie,果然设置为了0,修改cookie值为1,我们发送请求得到下一关的秘钥。

https://img1.sycdn.imooc.com//5b9a254c0001769f12690477.jpg

 

  • Natas Level 6

        进入到level6 我们看到如下图

https://img1.sycdn.imooc.com//5b9a25af0001ac9307090213.jpg

 

查看源代码,进行审计

https://img1.sycdn.imooc.com//5b9a25ec000125aa07570229.jpg

大体意思是我们post一个参数,如果这个参数的值和需要提交的值相同则会返回密钥值,而我们要提交什么参数才能得到秘钥呢,看到includes/secret.inc,我们访问这个页面查看源代码得到一串字符,在页面提交便得到了下一关的密钥秘钥。

  • Natas Level 7

        进入level 7我们看到了这样的一个页面

https://img1.sycdn.imooc.com//5b9a26a20001668f04820162.jpg

尝试点击Home和About来观察URL的变化,通过观察得知这是一个Get的方式,查看源代码发现hint

<!-- hint: password for webuser natas8 is in /etc/natas_webpass/natas8 --> 

通过这段hint我们大致可以判断这是一个文件包含的漏洞,构造url使得page=1,返回如下报错信息。而我们又知道在PHP中,Include为包含并运行指定文件,当包含外部文件发生错误时,系统给出警告,但整个php文件继续执行,那这是一个文件包含漏洞是无疑的了。

https://img1.sycdn.imooc.com//5b9a27180001895b06920321.jpg

构造URL使得page的值等于hint中的值便可以拿到下一关的秘钥。

  • Natas Level 8

        进入到level8,我们看到了和level6相同的界面,查看一下源代码,发现只有前半部分有所区别,我在这里省略后半部分的讲述。

https://img1.sycdn.imooc.com//5b9a275e0001d3bd06940302.jpg

大体意思是:对字符串secret进行了编码,反过来我们可以对其进行解码

https://img1.sycdn.imooc.com//5b9a27a10001043707500076.jpg

 

提交得到的结果我们得到下一关的秘钥。

  • Natas Level 9

        进入level9,首先仍然查看源代码进行审计

 

https://img1.sycdn.imooc.com//5b9a27fb0001d51d04680202.jpg

通过代码审计可知通过函数passthru( )调用grep命令来查找我们输入的内容是否在dictionary.txt中。这里补充passthru()函数的相关知识

语法:void passthru ( string $command [, int &$return_var ] )                                      同 exec() 函数类似, passthru() 函数 也是用来执行外部命令(command)的。 当所执行的 Unix 命令输出二进制数据, 并且需要直接传送到浏览器的时候, 需要用此函数来替代 exec() 或 system() 函数。                                                                                                                                                既然是一个外部命令,那我们尝试是否有注入,我们通过;来截断grep,所以构造语句;cat /etc/natas_webpass/natas10便可以得到下一关的密钥。

好啦今天就写到这里,欢迎大家展开讨论,我们下期再见。


点击查看更多内容
6人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Linux系统工程师
手记
粉丝
7201
获赞与收藏
414

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消