CSRF以及SSRF漏洞案例

CSRF漏洞原理

原理

(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性

这里拿案例通俗的解释一下

image

就是说A给B转钱 ,访问的url被黑客知道了, 黑客写一个网页跟xss一样,里面植入自动访问这个url,但是小小修改了一下,不是给B转钱,而是给黑客赚钱,这时候黑客诱骗A去访问他的网页,然后他在访问的瞬间,就自动带着他的cookie访问了刚才那个url,实现转账。

 

CSRF检测,案例,防御

案例演示

首先模拟受害者视角:

csrf0

我们登录了个人中心,进行个人信息修改,并且用bp抓包。

csrf1

我们现在得到这个url

http://localhost/pikachu-master/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=11&add=22&email=33&submit=submit

现在攻击者知道了这个url,对其修改:

http://localhost/pikachu-master/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=111&add=222&email=333&submit=submit

 

现在攻击者编写一个网页test.html,里面加入:

<script src="http://localhost/pikachu-master/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=111&add=222&email=333&submit=submit"></script>

csrf2

 

现在攻击者诱使受害者访问http://localhost/test.html, 我们访问一下 看会发生什么:

在访问的时候可以看到,请求那个提交修改url已经发送

csrf3我们再回来看,资料已经修改,攻击完成。

csrf4

 

如何检测SSRF

一般SSRF出现都是 添加 修改 更新 某些资料的地方,我们对于这些关键地方提交使用bp抓包。

csrf5

利用bp自带的CSRF的POC,然后点开把html代码复制后进行测试。

 

csrf6

点击就可以进行测试了

csrf7

 

SSRF防御

  • 当用户发送重要的请求时需要输入原始密码
  • 设置随机 Token
  • 检验 referer 来源,请求时判断请求链接是否为当前管理员正在使用的页面(管理员在编辑文章,黑客发来恶意的修改密码链接,因为修改密码页面管理员并没有在操作,所以攻击失败)
  • 设置验证码
  • 限制请求方式只能为 POST

token防护

GET /vul/csrf/csrftoken/token_get_edit.php?sex=gg&phonenum=1111&add=11111&email=11111&token=45096611500a646562638549385&submit=submit HTTP/1.1
Host: 10.1.1.7
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://10.1.1.7/vul/csrf/csrftoken/token_get_edit.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=p9f3jfbnbc7cucobc9djsukon3
Connection: close

从上面可以看到的是token随机字符串用来验证数据包的唯一性,由于数据包的唯一性也就导致csrf漏洞几乎不能被利用。

 

referer

GET /vul/csrf/csrfget/csrf_get_edit.php?sex=%40&phonenum=%40%40%40%401&add=%40%40%40%40%40%401&email=%40%40%40%40%401&submit=submit HTTP/1.1
Host: 10.1.1.7
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://10.1.1.6/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=p9f3jfbnbc7cucobc9djsukon3
Connection: close







GET /vul/csrf/csrftoken/token_get_edit.php?sex=gg&phonenum=18428312222&add=1111111111111&email=857920461%40qq.com&token=15916611501d79dd97514223645&submit=submit HTTP/1.1
Host: 10.1.1.7
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://10.1.1.7/vul/csrf/csrftoken/token_get_edit.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=p9f3jfbnbc7cucobc9djsukon3
Connection: close
可以看到的是上面两个数据包referer来源是不一样的也就是说可以通过这样的方式来防止csrf漏洞,但是这种方式是不安全的因为可以通过抓包的方式修改referer值

SSRF漏洞原理

关于具体原理不做具体的解释了,本站之前有一篇文章关于原理解释:

SSRF漏洞简介以及原理-Drton1博客 (yanyang.ink)

SSRF漏洞利用手段:

  1.可以对外网、内网、本地进行端口扫描,某些情况下端口的Banner会回显出来(比如3306的);

  2.攻击运行在内网或本地的有漏洞程序(比如溢出);

  3.可以对内网Web应用进行指纹识别,原理是通过请求默认的文件得到特定的指纹;

  4.攻击内网或外网有漏洞的Web应用;

  5.使用file:///协议读取本地文件(或其他协议)

  http://www.xingkonglangzi.com/ssrf.php?url=192.168.1.10:3306

  http://www.xingkonglangzi.com/ssrf.php?url=file:///c:/windows/win.ini

SSRF漏洞出现点:

  1.分享:通过URL地址分享网页内容                          

  2.转码服务(通过URL地址把原地址的网页内容调优,使其适合手机屏幕的浏览)

  3.在线翻译

  4.图片加载与下载:通过URL地址加载或下载图片

  5.图片、文章收藏功能

  6.未公开的api实现及调用URL的功能

  7.从URL关键字中寻找

SSRF靶场实例

ssrf0

 

 

可以看到他对本地资源进行了请求,我们可以更改url内容 实现内网信息的探测,比如访问http://127.0.0.1:3306 看看他数据库信息。

ssrf1

可以看到爆出了数据库版本 以及类型。

如果他可以包含文件那么我们还可以读取内网服务器的文件:

可以看到这里用了file协议

ssrf2

那么我们更改相应的目录就能读取我们想读到的东西:

ssrf3

成功读到服务器的文件。

插曲

在我写这篇文章时候突然发现

ssrf4

我的网站也有这个访问地址的东西,那么是不是也存在ssrf漏洞

于是进行验证:

ssrf7

看数据包:

ssrf8

 

返回200 表示80端口开着呢,确实存在ssrf漏洞。

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论