目录
前言:
断更的原因是期末考试压身。本来我是想学CSRF,但是看到他和XSS很像,我就想到我XSS好像没学太好,只是做了做题。那正好就两个一起学对比一下,关于这两种漏洞做题记录,就再等等吧哈哈哈
区别:
这两种漏洞是有区别的。依我来看,csrf可谓是假传圣旨,利用盗取的账号做一些事情。xss是骗皇上下圣旨,得到你的小饼干,然后得到登陆你账号的权限或者记录你键盘鼠标的操作,换句话说,csrf是借用小饼干干坏事(本质上并没有得到小饼干),而xss是盗取小饼干干坏事。
如果还不李姐的话,那就比喻成xss:城门已破,黑客带着各种武器在城内为所欲为,为所欲为。而csrf:城门未破,黑客仅能通过借用户的通行令牌进入城内做些小偷小摸。
XSS篇!!!!!
漏洞简介:
XSS漏洞叫做跨站脚本攻击,是指攻击者向Web页面插入Script代码后,用户浏览该页时,嵌入其中的Web里面的Script代码会被执行,从而达到攻击用户的目的。
XSS漏洞通常是通过php的输出函数将JavaScript代码输出到HTML页面中,通过用户本地浏览器执行的,所以XSS漏洞关键就是寻找参数未被过滤的输出函数
常见的输出函数有: echo printf print print_r sprintf die var-dump var_export
分类:
xss攻击分成三类:反射型,存储型和DOM型。
反射型:反射型是不持久的,攻击者需要先构造好攻击链接,然后欺骗用户自己去点击链接触发xss代码(xss代码并没有存在于服务器中),一般容易出现在搜索页面。(浏览器->后端->浏览器)
存储型:存储型顾名思义,是可以储存在服务器中的持久化攻击。一般出现在,个人信息,发表文章和留言板等地方,如果过滤不严将这些代码储存到服务器中,每当有用户访问该页面,该代码都会被触发执行,所以存储型很危险。(浏览器->后端->数据库->后端->浏览器)
DOM型:他为什么叫DOM型,因为它是基于文档对象模型(Document Objeet Model,DOM)的漏洞。DOM是一个与平台和编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为页面显示的一部分。DOM中有很多对象,其中一些使用户可以操纵的,如uRI,location,refelter等,客户端的脚本程序可以通过DOM动态的检查和修改页面内容,它不依赖于提交数据到服务器端,而是从客户端获取DOM中的数据在本地执行。如果DOM中的数据没有经过探戈的确认,就会产生DOM XSS漏洞。(URL->浏览器)
注入点:
注入点 | 示例 |
---|---|
HTML元素内容 | <div>内容用户</div> |
HTML元素属性 | <input value="用户内容"> |
URL请求参数 | http://server.com?search=用户内容 |
CSS值 | color:用户内容 |
JavaScript | var name="用户内容" |
案例:
某人搭建博客需要一个搜索功能,根据URL参数决定关键词的内容,他很快写好然后上线。代码如下:
<input type="text" value="<%= getParameter("keyword") %>">
<button>搜索</button>
<div>
您搜索的关键词是:<%= getParameter("keyword") %>
</div>
然后第二天,他就收到了一个神秘链接:http://xxx/search?keyword="><script>alert('XSS');</script>
;他打开了这个链接,网页弹出了“XSS”的对话框(请勿模仿,不明链接不要随意打开)。在这个攻击案例中,服务器端解析请求参数keyword并拼接到HTML中返回给浏览器,形成了这样的的HTML:
<input type="text" value=""><script>alert('XSS');</script>">
<button>搜索</button>
<div>
您搜索的关键词是:"><script>alert('XSS');</script>
</div>
这个弹窗并没有什么实际的意义,但通过它我们知道输入javascript代码是可以被执行的,当我们输入一些其他函数,比如document.cookie
就可以成功盗取用户的cookie信息,或者读取用户浏览器信息等,为我们进一步深入攻击做铺垫。聪明的程序员很快找到了解决方法,修复漏洞:
<input type="text" value="<%= escapeHTML(getParameter("keyword")) %>">
<button>搜索</button>
<div>
您搜索的关键词是:<%= escapeHTML(getParameter("keyword")) %>
</div>
escapeHTML()
按照如下规则进行转义:
字符 | 转义后的字符 |
---|---|
- | - |
& | & |
< | &1t; |
> | > |
" | " |
' | ' |
/ | / |
经过转移函数的处理后,最终浏览器接收到的响应为:
<input type="text" value=""><script>alert('XSS');</script>">
<button>搜索</button>
<div>
您搜索的关键词是:"><script>alert('XSS');</script>
</div>
这样就安全了?当然不!!No system is safe!不久后又有人发来了链接http://xxx/?redirect_to=javascript:alert('XSS')
。打开页面后没有弹出xss,这样就安全了嘛?程序员查看源代码,发现多了以下内容
<fuck href="<%= escapeHTML(getParameter("redirect_to")) %>">跳转...</a>
虽然代码不会立即执行,但是当用户点击fuck标签时,浏览器就会弹出“XSS”。有些人会说这还不好解决?
// 禁止 URL 以 "javascript:" 开头
xss = getParameter("redirect_to").startsWith('javascript:');
if (!xss) {
<fuck href="<%= escapeHTML(getParameter("redirect_to"))%>">
跳转...
</fuck>
} else {
<fuck href="/404">
跳转...
</fuck>
}
只要url的开头不是JavaScript就安全了吧!没想到神秘人又发来了http://xxx/?redirect_to=jAvascRipt:alert('XSS')
。好吧,我服了……
绕过:
1.大小写混合
<scRiPt>alert(1);</scrIPt>
2.复写
<scr<script>ipt>alert(1)</scr<script>ipt>
3.<a>标签测试
<a href="javascript:alert(1)">Clickme</a>
4.尝试使用错误的事件查看过滤
<a href="javascript:alert(1)" onclimbatree=alert(1)>ClickHere</a>
5.编码转换
8进制、10进制、16进制混合转换,组合越多,绕过方法越妙(sao)
6.加入混淆字符
比如Tab符、换行符、回车符,绕过关键字过滤,比如:
<a hREf="j
avas
c
r
i
p
t:alert(/xss/)">click</a>
7.代替空格
内联注释/**/可以代替空格
左斜线/可以代替空格
8.引号的使用
HTML 语言中对引号的使用不敏感,对于html可以使用双引号、单引号,或者不使用引号
左斜线可以代替引号比如"xss"可以用/xss/代替
CSRF篇!!!!!
漏洞简介:
CSRF(Cross-site request forgery),也被称为:one click attack/session riding,中文名称:跨站请求伪造,缩写为:CSRF/XSRF。
简单来讲就是你打开这恶意网站,然后再打开别的网页的时候你的小饼干会被盗取,举个栗子,你向别人转账十块钱如果是GET型传参是?money=10&name=hacker
(当然现实中不会是GET型……),恶意代码得到了你的小饼干,然后可以通过改这个参数给他自己转钱,比如改为?money=10000&name=jiangxiaohai
这样他就用你的账户给他转了一万块
分类:
CSRF攻击主要分为两种类型GET型和POST型
利用:
检测CSRF漏洞是一项比较繁琐的工作,最简单的方法就是抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。
burp里面有CSRF利用的工具