前言:
Natas是一个教授服务器端Web安全基础知识的 wargame,通过在每一关寻找Web安全漏洞,来获取通往下一关的秘钥,适合新手入门Web安全。
接下来给大家分享一下,1-20题的WriteUp。
Natas0:
提示密码就在本页,右键查看源码,注释中发现key
Key:gtVrDuiDfck831PqWsLEZy5gyDz1clto
知识点:查看页面源码
Natas1:
提示密码就在本页,但右键被禁用,可以使用F12查看元素得到key。
(常用的查看源码方法:右键查看、F12查看元素,给页面url前加’view-source:’查看,使用Linux Curl命令查看)
Key:ZluruAthQk7Q2MqmDeTiUij2ZvWy2mBi
知识点:查看页面源码
Natas2:
在源码中发现一个图片的链接,分析图片,无隐写内容,联想到目录权限问题,访问同级目录http://natas2.natas.labs.overthewire.org/files,发现存在名为users.txt的文件,读取得到key。
Key:sJIJNW6ucpu6HPZ1ZAchaDtwd7oGrD14
知识点:水平越权
Natas3:
在源码中发现提示:无信息泄露,谷歌这次不会发现它。提到了搜索引擎,猜测爬虫协议robots.txt中存在信息泄露,访问网站爬虫协议http://natas3.natas.labs.overthewire.org/robots.txt,发现Disallow: /s3cr3t/,尝试访问一下该目录http://natas3.natas.labs.overthewire.org/s3cr3t/,发现了user.txt,读取得到key。
Key:Z9tkRkWmpt9Qr7XrR5jWRkgOU901swEZ
知识点:爬虫协议robots.txt
Natas4:
提示来源出错,合法用户只能来自"http://natas5.natas.labs.overthewire.org/",在http的header中,referer代表从哪里跳转到本页面,只需要将该url写入到referer中即可。
(修改referer的值,可以用Burp Suite抓包后修改,也可以使用firefox插件hackbar来完成,还可以使用curl命令的 --referer参数来实现。)
Key:iX6IOfmpN7AYOQGPwtn3fXpbaJVJcHfq
知识点:页面来源伪造
Natas5:
提示不允许进入,没有登录,查看cookie信息后发现存在loggedin项,且值为0,猜测该值代表是否登录,将其修改为1,得到key。
(cookie信息是网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据,可以使用Burp Suite抓包后修改,也可以使用火狐的FireBug插件来编辑修改,还可以使用linux curl命令的 --cookie参数来修改)
Key:aGoY4q2Dc6MgDq4oL4YtoKtyAg9PeHa1
知识点:cookie伪造
Natas6:
该题提供了php源码,点击查看分析,发现调用了includes/secret.inc页面,在输入一个变量secret后,如果和includes/secret.inc中 预设的secret相同,则输出密码,尝试访问该页面—http://natas6.natas.labs.overthewire.org/includes/secret.inc,在其源码中发现预设字符——"FOEIUWGHFEEUHOFUOIU",将该字符输入到之前的表单查询中,得到key。
Key:7z3hEENjQtflzgnT29q7wAvMNfZdh0i9
知识点:PHP Include
Natas7:
页面出现了两个选项,点击后跳转,观察url发现了page参数,猜测可能存在任意文件读取漏洞,且源码给了提示,密码在/etc/natas_webpass/natas8 中,将/etc/natas_webpass/natas8设为page参数的值,成功读取到key。
Key:DBfUBfqQG69KvJvJ1iAbMoIpwSNQ9bWe
知识点: 任意文件读取漏洞
Natas8:
同样给了php源码,审计源码,发现给了一个预设参数encodedSecret,以及一个加密函数encodeSecret, 该函数将secret参数先进行base64编码、然后用strrev 函数进行倒序,再用 bin2hex 函数转为16进制,返回结果。如果点击提交,且post传入的secret 参数值经加密后,等于 encodedSecret 参数的值,则输出key。至此,只需要将 encodedSecret的值逆推,然后post即可。
先把’3d3d516343746d4d6d6c315669563362’从16进制转成字符,然后把该字符串倒序,最后将之base64解码,得到’oubWYf2kBqz',将该字符串post得到key。
Key:W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl
知识点:常见编码、php函数
Natas9:
仍然给出源码,审计,发现使用了php命令执行函数passthru,执行了grep命令,由此想到命令注入漏洞,且已知各等级密码均存储在/etc/natas_webpass目录下,使用;或|或&来截断grep命令,再用cat读取密码,用#注释掉后面的内容,构造如下:& cat /etc/natas_webpass/natas10 #,post得到key。
Key:nOpp1igQAkUzaI1GUUjzn1bFVj7xCNzu
知识点:命令注入漏洞
Natas10:
这题和上题类似,但使用了正则过滤,过滤掉了一些字符,无法继续截断,但可以利用grep命令匹配密码来实现,grep支持正则,输入 [a-zA-Z] /etc/natas_webpass/natas11 #
即可得到key。
Key:U82q5TCMMQ9xuFoI3dYX61s7OZD9JKoK
知识点:正则表达式、grep命令
Natas11:
页面提示cookie被异或加密保护,查看源码,发现了一个预定义参数和三个函数
参数:$defaultdata = array( "showpassword"=>"no", "bgcolor"=>"#ffffff") #猜测将showpassword设置为yes即可得到密码。
异或加密函数:
[PHP] 纯文本查看 复制代码
01 02 03 04 05 06 07 08 09 10 |
|
加载函数:function loadData($def),加载data,将$_COOKIE["data"]解密还原,存为 $mydata 数组,返回$mydata。
保存函数:function saveData($d),将传入的参数,经过编码处理,存入$_COOKIE["data"]中。
主要思路就是得到构造新的输入参数,使得"showpassword"=>"yes",编码后得到新的data。这就要求要知道key的值,而已有一个默认值,由此逆推得到key。
[PHP] 纯文本查看 复制代码
01 02 03 04 05 06 07 08 09 10 11 12 13 |
|
得到key:$key = ’qw8Jqw8Jqw8Jqw8Jqw8Jqw8Jqw8Jqw8Jqw8Jqw8Jq’
再利用key,构造新data:
[PHP] 纯文本查看 复制代码
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 |
|