black-hat-python-2nd icon indicating copy to clipboard operation
black-hat-python-2nd copied to clipboard

《Python黑帽子-黑客与渗透测试编程之道》(Black Hat Python, 2nd Edition)阅读笔记

《Python黑帽子-黑客与渗透测试编程之道》阅读笔记

  《Python黑帽子-黑客与渗透测试编程之道》先介绍了网络方面的基础知识和原始socket、著名的网络工具scapy;通过讲解python的网络库(urllib、requests、lxml和BeautifulSoup)的使用,扫描网络系统结构、破解目录和文件位置、破解HTML登录表单等场景;介绍Burp Suite并编写攻击插件,并基于GitHub服务的C&C通信的木马编写,讨论在Windows下的木马常用功能,以及Windows的系统提权;还介绍了数据渗漏和攻击取证相关的渗透。

项目结构

codes---------------------------------------本书代码
+---ch01------------------------------------第1章 设置你的Python环境
|   +---hello.py----------------------------P7 示例代码
+---ch02------------------------------------第2章 基础的网络编程工具
|   +---tcp_client.py-----------------------P10 TCP客户端
|   +---udp_client.py-----------------------P11 UDP客户端
|   +---tcp_server
|   |   +---tcp_server.py-------------------P12 TCP服务端
|   |   +---tcp_client_send.py--------------P13 TCP客户端给服务端发送测试数据包
|   +---netcat.py---------------------------P14 取代netcat
|   +---tcp_proxy.py------------------------P22 TCP代理
|   +---ssh_cmd.py--------------------------P30 基于Paramiko的SSH通信
|   +---ssh_rcmd.py-------------------------P33 让一台SSH服务器给SSH客户端发送命令
|   +---ssh_server.py-----------------------P34 SSH服务器
|   +---rforward.py-------------------------P38 SSH隧道
+---ch03------------------------------------第3章 编写流量嗅探器
|   +---sniffer.py--------------------------P45 简单的原始socket嗅探器
|   +---sniffer_ip_header_decode.py---------P53 IP解码器
|   +---sniffer_with_icmp.py----------------P57 ICMP解码器
|   +---scanner.py--------------------------P58 在整个子网进行主机扫描
+---ch04------------------------------------第4章 Scapy:网络的掌控者
|   +---mail_sniffer.py---------------------P64 嗅探邮箱协议
|   +---bpf_demo.py-------------------------P67 BPF示例
|   +---arper.py----------------------------P70 ARP投毒
|   +---recapper.py-------------------------P76 pcap文件处理
|   +---detector.py-------------------------P81 人脸检测
+---ch05------------------------------------第5章 Web攻击
|   +---urllib_demo.py----------------------P88 urllib库的使用
|   +---requests_demo.py--------------------P88 requests库的使用
|   +---lxml_demo.py------------------------P89 lxml库的使用
|   +---beautifulsoup_demo.py---------------P90 BeautifulSoup库的使用
|   +---mapper.py---------------------------P92 拓印WordPress系统结构
|   +---bruter.py---------------------------P99 暴力破解目录和文件位置
|   +---wordpress_killer.py-----------------P104 暴力破解HTML登录表单
+---ch06------------------------------------第6章 编写Burp插件
|   +---bhp_fuzzer.py-----------------------P115 Burp模糊测试插件
|   +---bhp_bing.py-------------------------P125 在Burp中调用Bing搜索
|   +---bhp_wordlist.py---------------------P132 利用网页内容生成暴破字典
+---ch07------------------------------------第7章 基于GitHub服务的C&C通信
|   +---bhptrojan---------------------------P140 木马仓库
|   +---git_trojan.py-----------------------P143 构建基于GitHub通信的木马
+---ch08------------------------------------第8章 Windows下的木马常用功能
|   +---keylogger.py------------------------P151 键盘记录
|   +---screenshotter.py--------------------P155 截取屏幕
|   +---shell_exec.py-----------------------P157 以Python风格执行shellcode
|   +---sandbox_detect.py-------------------P160 沙箱检测
+---ch09------------------------------------第9章 数据渗透
|   +---cryptor.py--------------------------P166 文件内容的加密和解密
|   +---email_exfil.py----------------------P169 基于电子邮件的数据渗透
|   +---transmit_exfil.py-------------------P171 基于文件传输的数据渗透
|   +---paste_exfil.py----------------------P172 基于Web服务器的数据渗透
|   +---exfil.py----------------------------P176 数据渗漏
+---ch10------------------------------------第10章 Windows系统提权
|   +---bhservice.py------------------------P182 模拟受害服务
|   +---process_monitor.py------------------P185 利用WMI监视进程
|   +---process_monitor_token.py------------P189 Windows系统的令牌权限
|   +---file_monitor.py---------------------P191 文件监控
|   +---file_monitor_code_injection.py------P194 代码注入
+---ch11------------------------------------第11章 攻击取证
|   +---aslrcheck.py------------------------P210 查找ASLR(地址空间布局随机)保护进程
docs----------------------------------------配套资料
requirements.txt----------------------------运行环境依赖包

运行环境

Python版本

Mini-Conda Python 3.8 Windows环境

批量导入环境依赖包

pip install -r requirements.txt

批量导出环境中所有依赖包

pip freeze > requirements.txt

阅读总结

  本书属于渗透测试入门实战级别,每一章节都配备了大量的代码,并采用Kali虚拟机进行渗透测试实战。

  1. 第1章,主要从搭建Python编程环境开始,搭建Kali Linux虚拟机环境,并搭建VS Code IDE集成开发环境,运行hello.py程序。
  2. 第2章,主要介绍了socket库的网络编程基本知识,包括基于socket的TCP客户端/服务端、UDP客户端的实现,自编程实现netcat,通过实现TCP代理连接FTP服务器,基于Paramiko实现SSH通信,并简要介绍了SSH隧道的基本知识。
  3. 第3章,主要介绍了流量嗅探器的实现,使用socket实现简单的嗅探器,并逐步实现IP、ICMP层的解码。
  4. 第4章,主要基于Scapy库实现邮箱身份凭证窃取(主要基于BPF语法对常用邮件协议端口进行监听)、ARP投毒、pcap文件处理(对数据包中的图片使用OpenCV库对人脸进行检测)。
  5. 第5章,主要介绍了常见的Web攻击,包括基本工具库使用(urllibrequestslxmlbeautifulsoup4)、基于requests实现拓印WordPress系统结构(检测资源的连接情况)、基于requests和字典文件实现目录和文件位置的暴力破解、基于lxmlrequest实行HTML登录表单(通过3个阶段:初始化阶段、循环阶段、请求阶段)。
  6. 第6章,主要基于Jython编写Burp Suite插件(只能使用Python2版本,不支持Python3.x),包括Burp模糊测试、调用Bing搜索、利用网页内容生成暴破字典(读取HTTP响应数据,从文本数据中剥离HTML标签,并利用正则表达式抽取内容生成密码字典)。
  7. 第7章,主要基于在GitHub上构建木马模块仓库,并利用github3库连接GitHub,并从其自动下载python代码,import到受害机器的Python Lib库中,执行木马脚本。
  8. 第8章,主要基于pyWinHookpywin32库对Windows进行木马攻击,实现键盘记录(通过抓取活跃窗口和相关的进程ID,并使用HookKeyboard方法进行键盘监控)、屏幕截取(基于win32gui获取屏幕大小进行截图)、执行shellcode(将shellcode写入内存缓冲区,并构建函数指针,执行函数)、沙箱检测(监控键盘输入和鼠标单击事件,根据设定的阈值判断是否处于沙箱中)
  9. 第9章,主要实现渗漏加密数据的攻击,包括加密解码(基于zlib库实现RSA的文件内容加密解码)、电子邮件渗漏、文件传输渗漏(基于ftplib库连接FTP服务器)、Web服务器渗漏,最后使用字典调度的方式将前面的几个工具合在一起,对pastebin.com网站进行渗漏
  10. 第10章,主要介绍Windows系统提权的方法,首先编写并在Windows中注册受害服务(主要是模拟文件的拷贝和删除操作),利用WMI监控进程(将进程的信息打印输出),并基于Windows令牌权限获取进程的权限,最后对文件目录进行监控,对受害服务的操作进行监控(还可以在其中进行代码注入,从而获得SYSTEM权限)
  11. 第11章,主要利用Volatility工具,通过对示例Window系统快照的分析:
  • 使用windows.info插件分析设备基本情况
  • 使用registry.printkey插件读取注册表键的所有键值
  • 使用windows.cmdline插件列出每个进程的命令行参数分析用户当时的行为与意图
  • 使用windows.pslist插件列出在运行的所有进程的详细信息
  • 使用windows.pstree插件获取进程的继承关系
  • 使用windows.hashdump插件查看用户密码
  • 使用windows.malfind插件查找同时具有读、写和执行三个权限的内存区域,从而分析病毒的进程
  • 使用windows.netscan插件列出持有的网络连接,分析可疑的连接

最后实现一个Volatility插件,用于找出ASLR(地址空间布局随机化)保护的进程。