笔记是根据马士兵教育2024HVV专题编写,作为学习记录来分享,如有错误的地方请指正,谢谢
免责声明
本文仅限于学习讨论与技术知识的分享,不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本文作者不为此承担任何责任,一旦造成后果请自行承担!
1、SSRF介绍
SSRF(Server-Side Request Forgery ,服务器端请求伪造)是一种由攻击者构造形成由服务器发起请求的一个安全漏洞。
简单来说就是攻击者通过服务器对内网的机子发起的攻击
2、SSRF漏洞原理
正常访问流程是下面这样
http://website.thm/stock?url=http://api.website.thm/api/stock/item?id=123
但是对于后面url部分没有进行限制,导致我们可以更换成我们想要的url,这就是SSRF漏洞
3、SSRF漏洞挖掘
3.1、网页中可以直接看到的内容
只要网页读取或读取了其他地址的内容,那么就有可能出现SSRF漏洞的出现,通常在下面这几种业务情况:
- 分享
- 转码
- 在线翻译
- 图片加载、下载
- 图片、文章收藏
- 未公开的API
3.2、抓包进一步发现
我们通过抓包,注意URL中的关键字
- share
- wap
- url
- link
- src
- source
- target
- u
- 3g
- dispaly
- sourceURL
- imageURL
- domain
像以下图片几种情况都有可能出现SSRF漏洞,可以使用…/api去尝试,看有没有目录的一个穿越
3.3、pikachu中举例
原网站中就有通过url去跳转访问文件
我们直接修改后面的url
4、SSRF漏洞利用
主要挖掘以下内容
- 服务探测
- 协议
- 访问敏感数据
- 内网探测
4.1、抓包后对url进行地址探测
4.2、探测地址
后面爆破为1到254
4.3、探测出内外资产
响应出,内网有多少的资产,167这个就是存活的
基础知识
内网探测:
C类:192.168.0.0-192.168.255.255
B类:172.16.0.0-172.31.255.255
A类:10.0.0.0-10.255.255.255
常见端口:
http: 80、https: 443、telnet:23、ftp:21、ssh:22、smtp:25、weblogic:7001
tomcat:8080、jboss:8080、oralce:1521、sqlserver:1443
SSRF可以试试那些协议:
ftp、dict、gopher、file、ladp、ssh、smb、http、https
4.4、开始服务探测
标记端口位,用端口去判断出是什么服务
开始爆破
4.5、根据返回判断协议是否有
4.6、读取敏感文件(很重要的一步)
知识点(file协议敏感文件读取)
file协议敏感文件读取:
winodws下:
C:\Windows\system.ini
C:\windows\system32\drivers\etc\hosts
C:\boot.ini //查看系统版本
C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件
C:\Windows\repair\sam //存储系统初次安装的密码
C:\Program Files\mysql\my.ini //Mysql配置
C:\Program Files\mysql\data\mysql\user.MYD //Mysql root
C:\Windows\php.ini //php配置信息
C:\Windows\my.ini //Mysql配置信息
Linux下:
/root/.ssh/authorized_keys //如需登录到远程主机,需要到.ssh目录下,新建authorized_keys文件,并将id_rsa.pub内容复制进去
/root/.ssh/id_rsa //ssh私钥,ssh公钥是id_rsa.pub
/root/.ssh/id_ras.keystore //记录每个访问计算机用户的公钥
/root/.ssh/known_hosts
//ssh会把每个访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。
/etc/passwd // 账户信息
/etc/shadow // 账户密码文件
/etc/my.cnf //mysql 配置文件
/etc/httpd/conf/httpd.conf // Apache配置文件
/etc/redhat-release 系统版本
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/var/lib/mlocate/mlocate.db //全文件路径
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/porc/self/cmdline //当前进程的cmdline参数
/proc/sched_debug 配置文件可以看到当前运行的进程并可以获得对应进程的pid
/proc/pid/cmdline 则可以看到对应pid进程的完整命令行。
/proc/net/fib_trie 内网IP
/proc/self/environ 环境变量
/proc/self/loginuid 当前用户
5、XXE介绍
XML外部实体注入
XML External Entity Injection
5.1、XXE定义
如果Web应用的脚本代码没有限制XML引入外部实体,从而导致用户可以插入一个外部实体,并且其中的内容会被服务器端执行,插入的代码可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。
5.2、XML介绍
XML 指可扩展标记语言,被设计为传输和存储数据,xml文档包括xml声明、DTD文档类型定义(可选)、文档元素、其焦点是数据的内容,其把数据从HMTL分离,是独立于软件和硬件的信息传输工具。
5.3、XML主要两个用途
- 配置文件:层次分明,结构清晰
- 在不同的系统之间交换数据
<?xml version="1.0" encoding="ISO-8859-1"?> //第一行为xml的声明,定义了xml的版本和使用的编码
<note> //文档的根元素,下面四行为根元素下的四个子元素
<to>大黄</to>
<from>大壮</from>
<heading>村头集合</heading>
<body>有妹子!</body>
</note>
"阳光,开朗,大男孩"
<person name="阳光" character="开朗" result="大男孩">
<person>
<name value="阳光" />
<character value="开朗">
<result value="大男孩">
</person>
json
{
“name”:"阳光",
"chatacter":"开朗",
"result": "大男孩"
}
6、DTD介绍
DTD全称The document type definition,即是文档类型定义,可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD可被成行地声明于XML文档中,也可作为一个外部引用。控制XML的格式规范。
6.1、DTD的作用
- 通过DTD,每一个XML文件均可以携带一个自身相关的描述
- 验证数据
- 交换数据
内部实体声明:
<!ENTITY 实体名称"实体的值">外部的实体声明:
<!ENTITY 实体名称SYSTEM "URI">7、抓取XML的特征
8、XXE危害
1.文件读取
2.内网端口扫描
3.命令执行
8.1、文件读取
修改内容
这时候读取到了
windows中system.in的文件
8.1.1、这时候进行一个带外的测试
就是看一下它能不能出网
通过dnslog.cn网站获取一个subdomain,然后写入xml中。看有没有访问成功
修改xml
发送后,在dnslog上有显示访问,说明成功了
为什么要做带外测试?
因为有时候,没有回显。
这时候我们不好判断
1、是不是payload的问题
2、是不是存在这个漏洞
3、是不是服务端做了防御,不给回显
4、是不是不存在这个文件
如果关闭了回显,但是带外测试成功了,我们怎么利用呢
可以远程窃取
流程是:
1、读本地服务器上的文件
2、远程加载了恶意DTD文件
3、攻击者的服务器开启接收内容并写出文件
这个DTD内容就是读取文件,发送到这个攻击者的服务器中
这个DTD文件也是在攻击者服务器上
这时候在burpsuite中修改,这时候就可以远程窃取到文件
web安全这一模块就过完了,里面涉及到一些漏洞没有详细写的,在后面其他的专栏中会补上。接下来就是要讲关于蓝队与红队之间的事了