首页 > 其他分享 >overthewire-natas

overthewire-natas

时间:2023-09-15 21:11:49浏览次数:33  
标签:函数 natas 拿到 这里 密码 php overthewire

一个训练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的回显,等我再研究研究再说

标签:函数,natas,拿到,这里,密码,php,overthewire
From: https://www.cnblogs.com/theskyforfly/p/17649758.html

相关文章

  • OverTheWire攻关过程-Natas模块33
    我们打开关卡lv33,登陆查看信息是一个上传文件的页面应该是做了很多过滤查看源码//grazXeR,thefirsttosolveit!thanksforthefeedback!//~morlaclassExecutor{private$filename=""; //三个私有参数private$signature='adeafbadbabec0dedabada55ba55d00d......
  • OverTheWire攻关过程-Natas模块9
    我们打开lv9,查看信息看到是搜索框搜索结果不显示查看下源码没有显示,奇怪打开bp没发现异常只能从搜索框来进行思考输入“”“会出现一大堆的字典奇怪要在这里做文章"natas10";cat/etc/natas_webpass/natas10好像有密码记录并且验证......
  • OverTheWire攻关过程-Natas模块8
    我们打开lv8,查看信息有一个验证框输入值显示错误将输入的值进行对比,相同就过我们将值输入错误查询下这些加密函数将数字装换下控制台不行然后查询函数反转字符串函数查询解码以下是过程,使用的都是在线工具16进制转换成字符串反转字符base64解码得到结果oubWYf2kBq提交得到密码验证......
  • OverTheWire攻关过程-Natas模块3
    我们打开lv3,查看信息没有信息我们右键源码发现没有匹配字样也没有信息查看大神思路访问下robots文件存在一个目录我们访问下目录发现有一个目录打开user文件得到密码验证密码......
  • OverTheWire攻关过程-Natas模块0
    我们来看下Natas模块的介绍机器翻译Natas教授服务器端web安全的基础知识.每个级别的natas都有自己的网站,位于http://natasX.natas.labs.overthewire.org,其中X是级别号。没有SSH登录。要访问某个级别,请输入该级别的用户名(例如,natas0为级别0)及其密码。每个级别都可以访问下一级别的......
  • OverTheWire攻关过程-Bandit模块33
    我们打开lv32-lv33,查看信息机器翻译在所有这些git的东西之后,是时候再次逃脱了。祝你好运!您可能需要解决此级别的命令嘘,伙计看来是需要sh命令先了解下sh命令我们登陆服务器查看信息已进入就是shell尝试了几个,发现不行输入$0可以得到正常的shellcat/etc/bandit_pass/bandit33得到密......
  • OverTheWire攻关过程-Bandit模块31
    我们打开lv30-lv31,查看信息机器翻译有一个git仓库在ssh://bandit30-git@localhost/home/bandit30-git/repo经由端口2220。用户bandit30-git的密码与用户bandit30的密码相同。克隆存储库并找到下一级别的密码。您可能需要解决此级别的命令git的一样的使用git命令我们登陆服务器查......
  • OverTheWire攻关过程-Leviathan模块5
    我们打开lv4-lv5,查看信息信息一样估计都是调试程序我们登陆服务器查看信息有一个隐藏的文件(目录)有一个文件查看类型file命令执行看看奇怪,是二进制的信息这个时候搜索引擎查询再次查询还是一样的结果验证下密码能正常登陆......
  • OverTheWire攻关过程-Leviathan模块4
    我们打开lv3-lv4,查看信息依然信息很少我们登陆服务器查看信息带有sudo权限的文件应该是可执行文件执行,请输入密码错误退出机会只有一次调试过程要输入一个密码然后strcmp函数进行对比我们尝试输入这个"snlprintf\n"得到一个shell输入catcat/etc/leviathan_pass/leviathan4得到密码......
  • OverTheWire攻关过程-Bandit模块29
    我们打开lv28-lv29,查看信息机器翻译有一个git仓库在ssh://bandit28-git@localhost/home/bandit28-git/repo经由端口2220。用户bandit28-git的密码与用户bandit28的密码相同。克隆存储库并找到下一级别的密码。您可能需要解决此级别的命令git的我们登陆服务器没有文件git拉取到本......