渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)

2024-06-20 354 0

漏洞原理

xss(cross site script)跨站脚本攻击,指的是攻击者往web页面插入恶意脚本代码,当用户浏览时,嵌入web页面里的脚本代码就会执行,从而达到恶意攻击用户的特殊目的,它主要分为俩种类型

1. 存储型XSS(持久型):攻击者将恶意脚本存储在目标服务器上,每当用户访问受感染的页面时,恶意脚本就会执行。

2. 反射型XSS(非持久型):攻击者诱使用户点击一个链接,该链接将恶意脚本作为输入传递给服务器,然后服务器将这个脚本反射回用户的浏览器执行。

3. DOM型(非持久型):

漏洞危害

XSS攻击的常见目标是盗取用户的cookie和其他敏感信息,这些信息可以用来进行会话劫持、身份冒充等进一步攻击。如何防御?

1. 输入验证:网站开发者需要对用户输入进行严格的验证和过滤,避免将不受信任的数据直接输出到HTML中。

2. 输出编码:当将用户输入的数据输出到页面时,使用适当的编码方法(如HTML实体编码)来转义可能被浏览器解释为脚本的特殊字符。

3. 对输出内容进行编码:在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击。

漏洞复现

Upload-Labs靶场(1-20关)

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图

第一关(URL传参)

分析URL中的参数有个nanme

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图1

根据XSS原理,注入恶意脚本,尝试注入payload

?name=<script>alert()</script>

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图2

第二关(输入框注入)

尝试注入payload

<script>alert()</script>

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图3

分析源码,红色框上面部分被转义了,没有什么绕过方法,但是下面部分,仔细看,如果我们嵌套一个反标签符号呢?payload如下

"><script>alert()</script><"

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图4渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图5渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图6

第三关(事件注入)

尝试使用上一关的内容进行绕过,被转义,只能想想其他办法了

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图7

JavaScript中有一个函数onfocus,用于输入框input,select,a标签获得焦点的事件

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图8

这里我们给他一个函数即可,payload如下

' onfocus=javascript:alert() '

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图9

此时再点击这个input框,使其获得焦点,触发onfocus事件

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图10

第四关(引号类型)

使用上一关的结果进行注入,尝试失败

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图11

分析源码,发现外围是双引号,双包单了,不符合javascript 的onfocus事件绑定

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图12

切换payload为双引号即可

" onfocus=javascript:alert() "

提交payload后,需要点击input框,触发onfocus事件

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图13

第五关(a标签注入)

尝试输入脚本标签,被强行切换为scr_ipt

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图14

使用上一关的方法" onfocus=javascript:alert() ",事件名称也被强行转换了

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图15

这里就要用到a标签的 href属性了,尝试注入

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图16

分析源码,并无异常转换,只是少了个">和 <",构造payload"><a href="javascript:alert();">xx</a><"

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图17

发现页面多了个标签,此时既可以点击此标签

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图18

第五关,over!

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图19

第六关(大小写绕过)

使用上一关结果,尝试注入"><a href="javascript:alert();">xx</a><"

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图20

分析源码,href变成了hr_ef

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图21

尝试onfocus绕过,失败

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图22

尝试大小写,发现没有对大小写进行验证

//第一种,脚本注入
" ><SCRIPT>alert()</SCRIPT>< "
//第二种,焦点事件
" ONDOCUS=javascript:alert() "
//a标签href属性的
"> <a HREF=javascript:alert()>x</a> <"

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图23

over!

第七关(双拼写)

一样,使用上一关方法尝试,发现此时对大小写也进行了验证。

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图24

不难发现,这里面进行了小写转化,将检测出来的on,script,href给删掉了,但是没有关系,我们可以利用****双拼写****来绕过。

" ><sscriptcript>alert()</sscriptcript>< "

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图25

第八关(Unicode编码)

尝试使用大小写

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图26

失败,对字符进行了强行转换,而且使用了强制小写字母

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图27

尝试使用双写,也以失败告终

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图28

这里我们能利用href的隐藏属性自动Unicode解码,我们可以插入一段js伪协议

javascript:alert()

利用在线工具进行Unicode编码后得到,在线Unicode编码解码

&amp#106;&amp#97;&amp#118;&amp#97;&amp#115;&amp#99;&amp#114;&amp#105;&amp#112;&amp#116;&amp#58;&amp#97;&amp#108;&amp#101;&amp#114;&amp#116;&amp#40;&amp#41;

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图29渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图30

第九关(指定字符绕过)

先看看过滤了什么

" src data onfocus <script> <a href=javascript:alert()> 

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图31

什么嘛,看源码

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图32

当传入的参数不包含"http://"时,即其值为假(false),将触发if语句的执行。为了避免这种情况,我们需要在参数中添加"http://",并将其作为注释,以防止其被实际执行,这会影响到弹窗的显示。为了确保strpos函数能够返回一个数值,我们需要构造一个特定的输入(payload),使其满足函数的预期行为。比如:

&amp#106;&amp#97;&amp#118;&amp#97;&amp#115;&amp#99;&amp#114;&amp#105;&amp#112;&amp#116;&amp#58;&amp#97;&amp#108;&amp#101;&amp#114;&amp#116;&amp#40;&amp#41;/* <http://> */

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图33

本章小结:插入指定内容(本关是http://)绕过检测,再将指定内容用注释符注释掉即可

第十关(属性修改)

a标签注入失败,

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图34

看看网页源码,全部都在h2标签去了,看着下面还有这么多hidden的input,这谁顶得住啊。

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图35

看后端源码吧

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图36

它多了个get的参数,测试了好几遍,可以尝试这个参数,把后面的type="hidden"给干掉,或者给type="text"也行就可以让这个input显示出来,再让它获得焦点,触发onfocus事件。

level10.php?t_sort=" onfocus="javascript:alert()" type="
level10.php?t_sort=" onfocus="javascript:alert()" type="text

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图37

第十一关(Referer)

老样子,使用上一关的payload,发现我们的参数被转义了

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图38

检查源码使用,这个str11并没有使用htmlspecialchars()方式进行转换,那么这里就是注入点

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图39

知识补充:

**htmlspecialchars()**:一个PHP函数,用于将特殊字符转换为HTML实体。这个函数通常用于防止跨站脚本(XSS)攻击。

$_SERVER['HTTP_REFERER']:链接到当前页面的前一页面的 URL 地址。(referer,推荐人)

$userInput = "<script>alert('xss');</script>";
$safeOutput = htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
echo $safeOutput; // 输出: &amplt;script&ampgt;alert(&amp#039;xss&amp#039;);&amplt;/script&ampgt;

尝试注入RefererREFERER:<script>alert()</script>

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图40

注入成功,但是他把我们的<>这些尖括号给去掉了

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图41

那么可以尝试使用onfocus事件,并且把隐藏的input给显示出来,payload如下

REFERER:" onfocus="javascript:alert()" type="text" "

over!

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图42

第十二关(User-Agent)

上一关使用的referver,这一关我们猜测使用cookie,开始尝试

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图43

发送请求,果断打开源码,尝试个鬼,用的user-agent

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图44

尝试使用如下payload,添加到请求头后面

" onfocus="javascript:alert()" type="text" "

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图45渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图46

over!

第十三关(Cookie)

这关想都不要想,一定是Cookie!有人不服嘛,不服顺着网线来打死我 (´。✪ω✪。`)

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图47

先查看源码,然后抓包,或者说,直接抓包

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图48

俩个东西似曾相识哈,复制上一关的payload,开始注入

" onfocus="javascript:alert()" type="text" "

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图49

鼠标点击input输入框,使其获得焦点,成功!

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图50

第十四关

由于本关因iframe调用的文件地址失效,无法进行测试。

第十五关

来到了第十五关,直到看到如下图片,啊??????

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图51

再看看源码,没有一点头绪啊,之前用的方法全部没作用了

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图52

使用burp suite抓包试试。。。。。。

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图53

无奈,只能看php源码了,有一个SRC参数,关键他还使用了htmlspecialchars()

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图54

累了,煞了我吧

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图55

看网上是这样子说的

这里有个html实体化函数在,没有删掉东西,所以不影响我们接下来的操作,我们可以包涵第一关并让第一关弹窗(注意,这里不能包涵那些直接弹窗的东西如<script>,但是可以包涵那些标签的东西比如<a><input><img><p>标签等等,这些标签是能需要我们手动点击弹窗的),这里我们使用img标签,可参考XSS常见的触发标签,构造payload

?src='https://www.freebuf.com/level1.php?name=<img src=1 onmouseover=alert()>'

分析源码,他这里是对特殊符号进行了转义,比如 >使用&amplt;,它并没有删掉,还是存在在html标签中的,也可以进行内含属性,根据他说的尝试使用img标签,并添加onmouseover 事件

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图56渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图57

语法如下

?src='https://www.freebuf.com/level1.php?name=<img src=1 onmouseover=alert()>'

成功

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图58

第十六关(回车%0a)

通过以上关卡我总结了一些关键字,便于测试

?keyword=" ' sRc DaTa OnFocus OnmOuseOver OnMouseDoWn P <sCriPt> <a hReF=javascript:alert()> &amp#106; 

都以失败告终。

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图59

查看源码

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图60

这里将,/,script,-都替换成了&ampnbsp;,所以a标签也不行,但是可以使用一个标签的标签(单标签)比如,<img>,<details>,svg等。

这里使用<svg>onload事件,就是svg标签加载完成的事件,搭配上%0a即回车按钮,就比如

?keyword=<svg%0aonload=alert()>

渲染在网页上其实是这样的

<svg%0aonload=alert()>
||
<svg
onload=alert()>

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图61

第十七关(embed)

测试注入关键字

?arg01=" ' sRc DaTa OnFocus OnmOuseOver OnMouseDoWn P <sCriPt> <a hReF=javascript:alert()>; &arg02=" ' sRc DaTa OnFocus OnmOuseOver OnMouseDoWn P <sCriPt> <a hReF=javascript:alert()>;

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图62

发现事件名称和javascript脚本都没有被注释,尝试使用onload事件

%20onload=alert()%20""

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图63

非常简单,完成,这里原本是一个未知文件显示在这里的,小编我直接修改成了这张图片,实现思路是一样的

第十八关(双参空格)

尝试任意字符,它将俩个参数用 = 号连接起来了

/level18.php?arg01=abavvvv&arg02=fdffffdf

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图64

注入测试

" ' sRc DaTa OnFocus OnmOuseOver OnMouseDoWn P <sCriPt> <a hReF=javascript:alert()>; &arg02=" ' sRc DaTa OnFocus OnmOuseOver OnMouseDoWn P <sCriPt> <a hReF=javascript:alert()>;

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图65

属性正常,和上一关一样,不过需要注意是第二个参数进行传值arg02

/level18.php?arg02= onmousedown=alert() //注意空格,这里使用的是鼠标点击事件

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图66

第十九关

难搞,pass,不要问我为什么,可能环境不对,Flash xss了解一下就行,现在许多浏览器都用不上flash插件了

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图67

第二十关

payload在这儿(也不起效果),你自个儿试试吧

?arg01=id&arg02=xss\"))}catch(e){alert(1)}//%26width=123%26height=123

这是原文,可能因为我的服务器是linux

https://blog.csdn.net/u014029795/article/details/103217680

渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)插图68

总结

XSS全称跨站脚本攻击(Cross Site Scripting),完,谢谢观看

原文链接 :https://mp.weixin.qq.com/s/RJcOZuscU07BEPgK89LSrQ


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

webpack打包站点,js文件名批量获取思路
加密对抗靶场enctypt——labs通关
【论文速读】| 注意力是实现基于大语言模型的代码漏洞定位的关键
蓝队技术——Sysmon识别检测宏病毒
内网渗透学习|powershell上线cs
LLM attack中的API调用安全问题及靶场实践

发布评论