渗透测试基础-反射型XSS原理及实操
只为对所学知识做一个简单的梳理,如果有表达存在问题的地方,麻烦帮忙指认出来。我们一起为了遇见更好的自己而努力💪!
XSS是什么
因为人们经常将跨站脚本攻击(Cross Site Scripting
)缩写为CSS
,但这会与层叠样式表(Cascading Style Sheets,CSS
)的缩写混淆。因此,将跨站脚本攻击缩写为XSS
。这就是XSS
名字的由来。XSS
攻击是一种经常出现在web
应用中的计算机安全漏洞,它允许恶意web
用户将代码植入到提供给其他用户的使用界面中,通过代码所执行的不同行为,将Cookie
或者其他信息发送给攻击者,攻击者可通过这些信息实施破坏或窃取有效信息为己用。
然后说什么为叫反射性XSS
攻击?除了反射型,还有其他别的不同的攻击方式嘛?
-
反射型XSS:
通过给别人发送带有恶意脚本代码参数的url
,当url
地址被打开时,特有的恶意代码参数别html
解析,执行。特点是非持久化,也不存入网站服务器中。
缺点:
1.1 必须用户点击带有特定恶意脚本代码参数的链接才能执行
1.2 恶意代码存放在url
中,只有用户在点击恶意链接的时候才会执行恶意代码,所有它的隐蔽性很差,可以直观的看到访问了怎样的站点,当然不了解的,也不容易看出来。 -
储存型XSS:
恶意语句会进入到目标服务器中,包括但不限于数据库里面,存写进去的方式,比如网站的留言板,个人信息,文章发布等地方,如果这些地方未对传入的数据细致的过滤,就会有储存型XSS的产生。
其特点在于,持久性较长,危害性较大。 -
DOM型XSS
这个在后面的文章中在详细介绍。
我们来看一看XSS
具体是怎样一种表现形式,和利用流程
XSS的表现形式和利用流程
这个网页,有这么些功能,用户可以在这里填写信息,网页会对其保存,你还可以在旁边的浏览中看到自己留言的信息,像这样的地方就容易存在漏洞。
我们一开始可以不用直接让其弹窗,可放入一些符号,看这些地方,是否有对其进行相应的过滤处理。
在上图可以看见,我们在括号里面填写了尖括号
,单引号
,双引号
,这里都显示了出来,在F12
中也能看到并没有做什么限制或者转换。这里很可能存在XSS注入
。
接下来尝试放入弹窗语句测试
测试语句:
<script>alert('m yxsstest')</script>
这个语句呢,为js语句
,前后的<script>
是标签,让浏览器知道这个地方是js
的,要用js
的出来方式来处理,中间的alert()
是提醒的意思,它会以弹窗的方式跳出来提醒你,括号中间是需要弹出的语句,字符串用引号框选,数字可直接填写。放入刚才留言板中。
点击提交留言后,刚刚写的提示语就弹了出来,证实这里存在xss漏洞
当点击查看留言时,也会跳出刚刚需要提醒的语句
反射型XSS的靶场演练
因为是反射型的靶场,所以只要让其弹窗就行了。
我们还是刚刚一样,先看一下这里会对什么符号进行处理。
执行之后,根据它显示给我们查看的内容,好像是什么都没有发生改变,其实并不然,我们F12
进入详细查看一下。
这里是看到了上面的内容,但还得转换为HTML
一下。
这里看到了实际内容,原来这里是做了处理的,将我们的两个尖括号做了实体编码。
这样我们这里尖括号是肯定用不了了,在看看其他信息。
在后续的测试中,看到了不一样的事情,这里输入单个双引号,双引号还显示在框框里,且在F12
中能看到,它处在两个双引号中,但是在测试输入一个单引号时,发生了变化,表单框里的单引号不见了,显然是这个单引号得到了执行,查看下面的F12
也查看到了异样。
既然这样,我们可以尝试另外类型的标签来测试,事件型标签。
事件型标签:当一个事件发生时,所执行什么动作,叫做事件型标签,事件型标签挺多的,可以参考下面的连接(https://www.w3school.com.cn/tags/html_ref_eventattributes.asp
),我们这里简单介绍两个。oninput
和onclick
,第一个:当输入时触发;第二个:当鼠标单击时触发。
我们接着看靶场,既然这里会用到单引号,我们先输入单引号开头,然后跟上事件标签,因为输入的语句是在双引号之内的,所以末尾得让其注释掉(//
)
测试语句:
'oninput=alert(1)//
提交之后,在随便输入一个字母,页面就弹窗了。看下面的代码发现,输入的语句拼接进了前段代码中,我们输入的单引号和前面的引号居然闭合了,这里就说明人家这里本来就是单引号,由于浏览器的渲染,显示成了双引号,后面的注释将末尾的引号注释掉,语句成功执行。
漏洞总结
XSS的防护方法和注入也一样,过滤为主,将尖括号和单双号引号都进行实体编码了,这里就不存在XSS了。
《最好的防御,是明白其怎么实施的攻击》