首发于 星辰与大海
《Python 黑帽子:黑客与渗透测试编程之道》笔记一

《Python 黑帽子:黑客与渗透测试编程之道》笔记一

专栏开了很久,也一直想写点东西,可实在是太懒,于是托啊托到了现在。最近微有时间,所以想琢磨着写点简单明了的小文章。刚好准备整理一下以前读过的书籍,于是决定写点读书笔记。随手拿起了这本,希望能一起讨论。

关于此书的简介和章节目录直接略过,直接开始讨论正文。


第一章 设置 Python 环境

简要交代一下,作者是在 VMWare Player 中安装了 32 位的 Kali-linux-1.0.9 的系统且自带 Python 2.7.3,IDE 选择的是 WingIDE5。我安装的操作系统是 Kali GNU/Linux Rolling (Kali 2017.2)。关于 IDE,因为习惯了 PyCharm 所以依旧采用它。最后有关 Python 版本的问题,在代码讲解环节尽量用 Python3 去重写书中代码,具体是 Python 3.5.4。


第二章 网络基础

正如书中所讲,如果你已经进入了目标企业的内部网络,那么就有可能会陷入某种困境:比如你找不到任何用以发动工具的工具,没有 netcat、Wireshark、Nmap等等,甚至连编译器都没有。不过在大多情况下,你会发现目标环境中安装了 Python,是不是很惊喜很意外!这也将是你后续工作的起点。

本章介绍的,也是一些使用 Socket 模块进行网络编程的基本方法,学会编写基本的客户端、服务端、TCP 代理并完善为我们自己的 netcat,最后完成一个 shell 工具的编写。本章也是后续章节的基础,后续章节中我们会学习编写主机发现工具,实现跨平台嗅探,创建一个远程木马框架以及其他的一些小技巧。


1、Python 网络编程简介

开发人员可以使用大量的第三方 Python 工具创建网络客户端和服务器,这些第三方工具的核心模块是 socket 模块。这个模块展示了快速创建 TCP 和 UDP 服务器及客户端、使用原始套接字等必需的代码。为了攻击进入或者保持控制目标主机,socket 模块是我们必须使用的模块。让我们从创建一个简单的客户端和服务器开始,这会是你将来最常编写的两个网络脚本。


2、TCP 客户端

在渗透测试过程中,我们会经常性的创建一个 TCP 客户端来连接服务、发送垃圾数据、进行模糊测试等等。如果你工作在一个独立的大型企业网络环境中,那么你基本不会有大量的工具以及编译器,也不可能访问互联网。这时候就有必要手动撸一个 TCP 客户端出来了,下面是书中的代码:

这段代码简单的模拟了浏览器的行为,给 Google 发送了一段请求报文,并且打印收到的响应信息。下面用 Python3 重写一遍,这次向百度发送请求报文,并做一些修改:

打开浏览器,地址栏输入“www.baidu.com”回车进入百度首页,然后 F12 进入调试页面,在 Network 选项中可以查看对应的 Request Headers 和 Response Headers 详细信息。其中 Request Headers 的详情如下:

上图中箭头所示就是我们构造的内容,行与行之间借助“\r\n”实现换行。报文最后用“\r\n\r\n”是因为请求报文与信息之间是以空行隔开的。在此程序中我们构造了一条最简单的报文然后用 send() 函数发送出去。有两种发送方式:

或者:

运行程序,可得如下结果:

同样的,在浏览器中,我们看到的 Response Headers 信息如下:

各条目的意义不在做详细的解释。


倘若我们只想发送几句简单的问候语给对方,该怎样编写客户端并测试呢?此时可借助 NetAssist 工具作服务端辅助完成测试。

NetAssist 所在环境为 Windows,IP 是 192.168.1.102。Kali 的 IP 为 192.168.1.104。客户端代码如下:

NetAssist 接收到数据之后给客户端一个回馈,结果如下:

NetAssist 将 "I'm fine, and you?" 发送至客户端,客户端顺利接收:


上述代码中,有关 socket 模块的细节不做介绍了,Google 一下资料很多的。就这两个小例子来说,我们为了方便假设所有的连接都是成功的,并未考虑出错或者异常的情况。


3、UDP 客户端

Python 编写 UDP 客户端的套路和 TCP 客户端相差不是很大,只需简单的修改即可。书中的代码如下:

需注意的地方是,创建 UDP 套接字的时候要把套接字类型改为 SOCK_DGRAM,发送数据的函数不再是 send() 而是 sendto(),接受数据的函数不再是 recv() 而是 recvfrom()。我们不在改写这个 UDP 客户端程序,单独写一个接收数据的 UDP 服务端,其代码如下:

依旧借助 NetAssist 工具来调试,发送四句话,具体情况如下:

UDP 服务端接收数据情况如下:


4、TCP 服务器

用 Python 创建 TCP 服务端和创建客户端一样简单。我们可能需要将自己的 TCP 服务端绑定到 shell 或者创建一个代理(后续章节再做讲解)。首先,我们先创建一个标准的多线程 TCP 服务器,书中代码如下:

当有客户端试图连接服务端的时候,程序进入 while 循环。在 while 中会将客户端的套接字保存到 client 变量,客户端的 IP 和 端口保存到 addr 变量中,所以下面 print 打印出来的信息就是客户端的 IP 和 端口。

随后以 handle_client() 为回调函数创建一个新的线程对象 client_handler,并将客户端的套接字 client 作为句柄传递给了新创建的这个线程对象,然后启动线程进入 handle_client() 函数执行,同时 handle_client() 接受一个参数,其实就是当作句柄传入线程的 client。

下面我们自己实现一个相对比较健壮的 TCP 服务端,代码如下:

运行结果如下:


多进程 TCP 服务端的一种实现方式:

多进程 TCP 服务端不再放测试截图。

书中下一个知识点是“取代 netcat”,下篇笔记中详细讨论。



PS: 不出意外的话这个专栏只写读书笔记,努力保持一个礼拜一篇,如果条件允许,会记录一些比较有意义的渗透经历。

文中如有错误,还请斧正!

装修网郎酒简装装饰湖北天津市丽豪装饰工程简装房子得多少钱ktv装修一般装修报价软件有哪些长沙别墅装修成都装修资质注册的费用汽车美容装饰专业超现代风格装修扬州筑铭装饰简装出租房装修攻略精装童书小敏家 装修房屋装修注意什么爱玛电动车装修效果图弱电箱装饰图50平米店面装修费用装修全包了风左风右汽车装饰公装工程装修报价清单德阳商铺装修中式设计风格装修釉色装饰重庆公装装修公司前十台州装修报价四川装修装饰深圳大江装饰设计牛栏山二锅头简装价格表的装修风格香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声汪小菲曝离婚始末卫健委通报少年有偿捐血浆16次猝死单亲妈妈陷入热恋 14岁儿子报警雅江山火三名扑火人员牺牲系谣言手机成瘾是影响睡眠质量重要因素男子被猫抓伤后确诊“猫抓病”中国拥有亿元资产的家庭达13.3万户高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了男孩8年未见母亲被告知被遗忘张家界的山上“长”满了韩国人?倪萍分享减重40斤方法许家印被限制高消费网友洛杉矶偶遇贾玲何赛飞追着代拍打小米汽车超级工厂正式揭幕男子被流浪猫绊倒 投喂者赔24万沉迷短剧的人就像掉进了杀猪盘特朗普无法缴纳4.54亿美元罚金周杰伦一审败诉网易杨倩无缘巴黎奥运专访95后高颜值猪保姆德国打算提及普京时仅用姓名西双版纳热带植物园回应蜉蝣大爆发七年后宇文玥被薅头发捞上岸房客欠租失踪 房东直发愁“重生之我在北大当嫡校长”校方回应护栏损坏小学生课间坠楼当地回应沈阳致3死车祸车主疑毒驾事业单位女子向同事水杯投不明物质路边卖淀粉肠阿姨主动出示声明书黑马情侣提车了奥巴马现身唐宁街 黑色着装引猜测老人退休金被冒领16年 金额超20万张立群任西安交通大学校长王树国卸任西安交大校长 师生送别西藏招商引资投资者子女可当地高考胖东来员工每周单休无小长假兔狲“狲大娘”因病死亡外国人感慨凌晨的中国很安全恒大被罚41.75亿到底怎么缴考生莫言也上北大硕士复试名单了专家建议不必谈骨泥色变“开封王婆”爆火:促成四五十对测试车高速逃费 小米:已补缴天水麻辣烫把捣辣椒大爷累坏了

装修网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化