商丘做建设网站的公司,泰安房产网58同城,大型网站开发报价方案,wordpress自动发布图片ssrf练习
目录
ssrf类型
漏洞形成原理#xff08;来自网络#xff09;
靶场题目
第一题#xff08;url探测网站下文件#xff09;
第二关#xff08;使用伪协议#xff09;
关于http和file协议的理解
file协议
http协议
第三关#xff08;端口扫描#xff09…ssrf练习
目录
ssrf类型
漏洞形成原理来自网络
靶场题目
第一题url探测网站下文件
第二关使用伪协议
关于http和file协议的理解
file协议
http协议
第三关端口扫描
第四关post请求 ssrf类型
漏洞形成原理来自网络
很多网站提供了从其他的服务器上获取数据的功能。通过指定的URL网站可以从其他地方获取图片、下载文件、读取文件内容等。SSRF的实质就是利用存在缺陷的Web站点作为代理攻击远程和本地的服务器。
SSRF漏洞形成的原因大都是由于服务端提供了从其他服务器获取数据的功能但没有对目标地址做过滤与限制。攻击者可以利用改漏洞获取内部系统的一些信息因为它是由服务端发起的所以它能够请求到与它相连而与外网隔离的内网系统。
靶场题目 第一题url探测网站下文件
非常的简单ok呀有30分钟不着急这一关的目的应该是通过url跳转到内网服务器上的127.0.0.1/flag没有做任何限制导致可以直接读取到内网的文件
/?urlhttp://127.0.0.1/flag.php
?url这个意思应该是参数可控导致可以跳转到别的界面
题目让我们访问内网的http://127.0.0.1/flag.php 开头也是直接给出来了啊非常的不错没有什么难度 第二关使用伪协议
Apache2的默认目录在/var/www/html也就是网站的默认目录
让我想一想这一关和上一关有什么不同的地方上一关是直接读取内网的127.0.0.1/flag.php文件那这一关为什么不可以呢
我尝试用http协议发现并不能访问到这个文件 用file协议就可以获取当然也可以写成/?urlhttp:///var/www/html/flag.php/应该是表示本地的IP地址的意思 关于http和file协议的理解
file协议主要是读取本地的文件是不对外开放的
http协议是对外开放的在搭建的网站下的目录
file协议
本地系统的文件 http协议
例如读取到pikachu下的文件靶场的本地网站 第三关端口扫描
这一关需要使用dict伪协议了具体是什么我也不知道啊
在网上找的
Dict协议查看端口版本信息向服务器端口请求curl命令
来靶场给的提示 开局一个IP地址啊非常的人性化 那我们直接加上dict协议再打开我们的bp开始爆破
添加payload位置 payload选数值8000-9000 爆破到8839号时发现长度不一样但是里面却没有flag怎么回事后来发现需要使用http协议去访问这个网站嗯那我一开始使用http协议不好吗反正就是看那个长度是不是一样的
它的目的是啥就是判断这个端口是否开放吗那我用http协议不也是可以看这个端口是不是开放的那不就是打得开就是开放的
诶好像不是这样的如果是22号端口ssh话用http协议是不能判断是不是开放的如果22号端口开放的话就可以爆破了真聪明。好了用http协议直接查看这个端口吧 http协议查看端口就是这个网站的内容咯ok啊主页就是flag 第四关post请求
ok呀开局先看wp不然我不会写不就是浪费我50个金币了哎之前金币一下就用光了这下给省着点了这道题好像有点麻烦呜呜呜以下内容参考ctfhub之ssrf练习
先分析一下首先利用file协议进入file:///var/www/html/index.php意思是先看他的网站主页源码吧然后再就没了然后我们再看file:///var/www/html/flag.php代码的意思是让我们用post方法提交一个key值然后它就给我们返回一个flagkey值怎么获取呢那就是要用url://127.0.0.1/flag.php获取key值要问我怎么知道key值在这个地方的话我也不晓得跟着网上一步一步做的Just View From 127.0.0.1看网上好像是这个提示知道了key值是这里要是我自己做我哪知道 啊我了个豆然后再由于curl支持gopher协议所以这里是利用curl进行进行post请求完成内网攻击。起码你必须包含以下要素POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Content-Length: 36
key1e91e9e5b8b3cfe84f5442b9739553c6解释几个可能存在的疑问
1.为什么这里并没有使用curl直接从网页上发起请求就可以了
因为index.php本身就有curl_exec()在截取url之后的参数后本来就能够完成操作了。2.burp suite修改参数直接post行不行
不行虽然能够更改包参数但是我们无法做到从服务器发起请求3.为什么需要两次编码
这是因为在浏览器的地址栏进行get传参时浏览器会自动进行一次UrlDecode的解码。但是这里curl就需要url编码的东西所以需要编两次参考CTFHub技能树 Web-SSRF POST请求_ctfhub 知识树 post-CSDN博客
注在第一次编码后的数据中将%0A全部替换为%0D%0A。
因为 Gopher协议包含的请求数据包中可能包含有、等特殊字符
避免与服务器解析传入的参数键值对混淆所以对数据包进行 URL编码
这样服务端会把%后的字节当做普通字节。
gopher协议格式及利用条件看到这就是有个下划线的
Gopher协议格式URL:gopher://host:port/gopher-path_后接TCP数据流 》正因为这个本质所以他可以用来发起GET、POST的http请求。 好了开靶场了寄什么提示也没有这是让我盲猜吗是要根据前几关来做出判断吗
好了根据前几关我学了http协议、file协议 先看一下http://127.0.0.1/index.php和http://127.0.0.1/index.php这里面有什么吧前几关也是这样的ok呀找到了一个key值 在从网站下的目录找一下吧file://127.0.0.1/var/www/html/flag.php这里的代码没来的及截图
其实就是让我用post提交一个key值且ip地址为127.0.0.1如果正确就返回flag 然后编码替换我自己的key值
_POST%20/flag.php%20HTTP/1.1%0d%0AHost:127.0.0.1%0d%0AContent-Type:application/x-www-form-urlencoded%0d%0AContent-Length:36%0d%0A%0d%0Akeyd2c25785320f2cf34b3fcc8eb9e66c92%0d%0a
在编码
gopher://127.0.0.1:80/_POST%2520/flag.php%2520HTTP/1.1%250d%250AHost:127.0.0.1%250d%250AContent-Type:application/x-www-form-urlencoded%250d%250AContent-Length:36%250d%250A%250d%250Akeyd2c25785320f2cf34b3fcc8eb9e66c92%250d%250a
把编码的值放到框框里这个框框应该是用post方法提交的试着试着好像错了我就在url上提交了 靶场时间不够了我还续费了10分钟其实我是把别人的payload复制过来了改成了我自己的key值 再分析一下需要gopher协议换行符需要是%0D%0A别问为啥我也不晓得
content-length这里需要换两行换一行行不行我也没有试过
但是我自己去编码的时候空格会编码成加号/会编码成%2f但是别的文章没有还有就是POST前面为什么会出现下划线如果去掉会怎么样不想再开一次靶场了看看有没有别的靶场要不要金币
我知道了为啥会加下划线了因为那个是gopher的语句他的格式就是这样的 参考文章
SSRF漏洞原理解析[通俗易懂]-腾讯云开发者社区-腾讯云 (tencent.com)
Ubuntu 18.04 Apache2默认网站目录和默认网站主页修改_改变apache2的目录默认样式-CSDN博客
http协议与file协议_浏览器file协议-CSDN博客
服务器端请求伪造--SSRF - FreeBuf网络安全行业门户
SSRF - ctfhub - 1【内网访问、伪协议读取、端口扫描、POST详解、上传文件】_ssrf用bp扫描的协议-CSDN博客
【网络安全 | HTTP】 gopher协议原理、语法及利用总结-阿里云开发者社区 (aliyun.com)
Gopher协议原理和限制介绍——Gopher协议支持发出GET、POST请求类似协议转换可以先截获get请求包和post请求包在构成符合gopher协议的请求 - bonelee - 博客园 (cnblogs.com)