overthewire-natas

文章描述了一次在线Web挑战(类似CTF)的过程,玩家通过解决一系列难题获取密码,涉及网页源码解析、隐藏密码查找、HTTP头利用、代码审计、PHP逆向工程、SQL注入等技术。作者分享了解决步骤和工具,如Hackbar插件和PHP解密过程。
摘要由CSDN通过智能技术生成

一个训练web的小网站:https://overthewire.org/wargames/natas/

类似于ctf题,不同的是拿到的不是flag而是下一道题的密码

第一关给出了默认密码,进入后查看源码获得natas1密码:g9D9cREhslqBKtcA2uocGHPfMZVzeFK6

 将url中的0改成1,使用natas1用户名和刚才的密码进入到natas1关卡中

 禁用右键,没什么用,而且这里禁用只有在白色的这一小部分有效,剩下的灰色部分都仍旧可以右键

 拿到密码:h4ubbcXrWqsTo7GGnnUMLppXbOogfBZ7

第三关

 这回不再直接放在源码中了,而是多了个png图片,打开发现什么都没有,访问files目录试试

 在users.txt中拿到密码:G6ctbMJ5Nb4cbFwhpMPSvxGHhQ7I6W8Q

natas和关数对不上,容易搞混,从这开始统一用natasX了

natas3:

 什么意思?让我们用谷歌语法?

查了半天没查到,一看别的大佬写的攻略,人家的意思是google真的查不到,让我们去找robots.txt,我还以为是提醒我们查google

 拿到密码:tKOcJIbzM4lTs8hbCmzn5Zr4434fGZQm

natas4:

 要伪造访问地址,拿XFF试了半天,想起来这是ip的,这里的是要伪造从哪个页面访问到这个页面,用到的是http头中的referer

有可能会出现页面空白的情况,可能是大家共用的原因,多试几次就好了

 忘了说没说过这个插件,这是火狐的hackbar,能够代替bp的小部分功能,方便节省些时间

 一定要是这个,另一个最顶上没有这个v2的hackbar是要收费的

安装这个插件后f12最右边就是,左边是加载,分割和执行,中间可以添加post,referer等数据

拿到密码:Z0NsrtIkJoKALBCLi5eqFfcRN82Au2oD

natas5:

 怎么跟上一关一模一样?

试了半天发现好像还是卡的原因,没进到natas5里边

 在natas5里输完用户名和密码之后告诉我们没有登陆,这次直接抓包直观看看

 发现cookie中有个loggedin=0,改成1发到repeater里

 拿到natas6:fOIvE0MDtPTgRhqmmvvAOt2EfXR6uQgR

natas6:

 从这开始需要分析一下代码了,这里的php部分首先include了一个secret.inc,直接构造路径访问并查看源代码能够得到secret变量的值

 然后会比较POST传递的参数和$secret的值,如果相同,则给出密码,如果不同给出Wrong secret

复制secret的值查询

 得到密码:jmxSiH3SP6Sonf8dv66ng8v1cIEdjXWr

natas7:

 给了两个页面

 没什么东西,看看源代码

 两个页面只有显示的文字不同,hint中提示了password的路径,url中又有参数,有可能是要用到伪协议

 成功用file读取到密码:a6bZCNYwdKqN5cGP11ZdtPg0iImQQhAB

natas8:

 似乎依旧是代码审计

 访问index-source看源码

 分析源码,首先定义了一个encodeSecret变量,然后写了一个加密的函数,最后比较加密过的POST数据和encodeSecret变量

那我们需要做的就是逆向它的加密过程,这里要用php反着写一遍,为了方便直接用gpt帮我们写

一直忘记整一个php的编辑器,这里直接拿蚁剑插件来跑

 回去输入到查询中,得到

 密码:Sda6t0vkOPkM8YeOZkAGVhFoaplvlJFd

natas9:

 继续审计代码

 大概就是先判断有无needle这么个参数,如果有就执行这段“grep -i $key dictionary.txt”

看起来是个命令执行,直接用管道符过滤掉前面的输出,输出我们要执行的命令:1 | ls /

成功执行

 找了半天没找到密码在哪,忽然想起来之前伪协议的时候提示过一次密码在/etc/natas_webpass/......

 这里除了natas9和natas10,其他的都是读不了的

 读取natas10拿到密码:D44EcsFkLxPIkAAKLosx8z3hxX1Z4MCE

natas10:

 跟上一关一样的界面,这次估计是过滤了

 能够看到过滤了很多东西

这里基本就用不了我们的命令了,可能有比较复杂的绕过但是这里不讨论,能够看到给出的是grep命令,那我们可以用grep本身来读取密码,要注意的是grep的通配符并不是*

 尝试了. /etc/.......,发现能读取9和10的,读不了11,可能是又卡出了什么bug,刷新一下清清cookie试试

 好使了:1KFqoJXi6hRaPluAmk8ESDW4fSysRoIg

natas11:

 异或?坏了,这我到现在还没学呢,赶紧学学

嗯……看了能有一个小时左右?没找到字母和字母怎么异或的,寻思先把题做了,结果最后那个base64解不开,一查才发现那个%3D是url编码后的=号,不能直接粘贴,mad气死我了

好了现在我们来看看代码:

 从第一句和最后一句来看跟php反序列化挺像的,要将showpassword更新成yes来获取密码

然后分析一下这几个函数,首先是xor_encrypt

 这里是一个异或运算的过程,但是key没有给出

接下来是最主要的这个

 这里把cookie中的data拿出来,先base64解码,然后异或运算,然后json解码,剩下的是一点赋值操作,而我们能够拿到cookie中的data数据,也就是能反推出key的值

脚本见这位大佬文章:https://blog.csdn.net/weixin_47610939/article/details/122609404

拿到key之后再更改下脚本,将showpassword改成yes加密,然后放到cookie中

 natas12:YWqo0pjpcXzSIl5NMAVxg12QxeC1w9QG

natas13:

 一眼顶针,鉴定为文件上传,先康康源代码

 给了全部代码,有点长 又一堆函数,直接审计不如先传一下试试

 传了个shell.php,上去的是随机生成的文件名加.jpg,再回头看代码

看起来三个函数都带有随机,仔细一看三个函数依次调用了前一个函数,感觉有点离谱,为啥不写到一个里呢

先看第一个函数,主要在循环中这一句:$string .= $characters[mt_rand(0, strlen($characters)-1)];

.=在php中用来将右边的值附加到左边的变量上,mt_rand函数用来生成随机整数,这里是生成了从0到characters字符库长度-1中的随机数字,来随机选择characters中的字符,然后附加给 string

第二个函数没什么东西,将生成出来的随机字符串作为文件名放到了$dir/和.$ext中间

第三段传入了个$fn,经过处理变成了$ext,这个pathinfo函数没太看懂是干嘛的,似乎是提取文件后缀,但是瞅了半天没看见哪给我改成jpg的,然后发现下边的html中有一小段调用了genRandomSting()并加上.jpg输出的,这个值赋值给了filename,然后传到了主函数 中,接着通过上边的一堆处理把文件名改成了这个

想了半天没想出来这怎么绕过,一看攻略反应过来了,这里的value是在 html中更改的,通过post传进去的是filename,直接抓包改掉filename就行了

 抓包可以看到生成的随机文件名,这里直接改为shell.php

 文件名似乎依旧是随机生成的,但是我们只需要后缀就行了

这里不知道为什么写进去之后蚁剑连不上,哥斯拉也是,只好手动往里敲

 依旧是老地方,/etc/natas_webpass/natas13

 natas13:lW3jYRI02ZKDBb8VtQBU1f6eDRo6WEj9

natas13

跟上一关一样,又是让人头大的代码审计

 看了半天,大概只有这一个地方有问题:

 跟上一关一样尝试直接修改时,会给我们这样的提示:

百度的值exif_imagetype用来检查文件是否为图片,检查的是头两个字节

这里我直接用了以前做sqlilabs时候做的图片马,结果发现有大小限制,然后又改小,结果还是有这行返回的报错,我以为是哪不对,结果发了好几遍之后发现下边还有个提示

 没太看懂这代码的逻辑,总之访问是可以用了

 但是蚁剑还是用不了,也不知道为什么

 只能接着手搓

 嗯……感觉马改进的不太合理,应该把phpinfo放在eval后边,要不就得拉到最下面看回显

 natas14:qPazSJBmrmU7UQJv17MHk1PGC4DxZMEP

natas14

 随便打打单双引号,看来是来到了注入环节,来看看源代码

 这几个反斜杠给我看得稍微有点迷,试了试admin" or 1=1不好使,但是" or 1=1好使,密码要写双引号

在尝试注入的时候经常会报这个:

 没太搞懂这是怎么回事

拿到的natas15:TTkaI7AWG4iDERztBcEyKV7kRXH1EZRB

natas15

依旧是单双引号,出现报错:

 正常的:

 看起来有点像布尔?

瞅瞅代码吧

 呃……好像确实是布尔

试了下sqlmap,结果发现由于有个登陆验证,sqlmap跑不了,可能得自己写脚本自动登录之类的

手注太麻烦了而且我在尝试的时候不知道为什么一直是doesn't exist的回显,等我再研究研究再说

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值