Black Hat Python3#

kali 安装新版本python

kali中自带的pyhton是2.7版本,显然2019年了,python2.x的版本已经逐渐过时,好多第三方库都逐步宣布不再支持python2.x版本,学习python3是比较明智的选择。

步骤也简单,下载、解压缩、进入目录、配置、编译、安装。注意在进行配置./configure时按照给出的提示信息执行命令。我在make时遇到过错误可能就是没有执行高级configure选项造成的。

具体参考:Linux安装最新版本Python3

kali 安装配置pycharm

linux下好用的IDE并不多,免费的更少,幸亏广受好评的Pycharm可用,传说中的JetBrains大法好···。

pycharm好在哪里呢?就我个人体验而言,首先是极方便的环境管理,安装管理包可谓是傻瓜式;其次是堪称严苛的错误提示或者警告,甚至包含了对代码风格的检查,比如定义函数前一定要空两行,注释符后一定要有空格等,让新手也能写出风格良好的代码;最后则是堪称智能的拼写补齐,在候选列表中会自动把常用的提示提到前面。

安装过程属实简单,官网下载community版,解压后进入bin目录下运行pycharm.sh即可。

pycharm的配置和使用还是有点麻烦,毕竟每种IDE都有不低的学习成本,在学习Pycharm中付出的成本绝对让你觉得物有所值。打开pycharm后选择解释器环境,之前安装好的python3.7可以自动识别到。其次就是掌握运行和在python console中运行的技巧,关于这些网上有大量教程,这里就不再多说了。

kali 安装git并连接github

kali已经自带了git,只需建立和github的链接即可,步骤如下:

  1. 安装并启动ssh服务。
  2. **ssh-keygen -t rsa -C "woider@gmail.com" **生成对应邮箱的ssh-key。注意这一步很关键,简单点的话连按三次回车即可,也可自己输入文件目录文件名自行配置。生成的xxx.pub即为ssh公钥。
  3. 将公钥复制到Github中的ssh-key处。
  4. git clone 仓库到本地。(这个克隆到本地的仓库和github中的仓库是自动关联的)
  5. **git add filename **到缓冲区
  6. git commit -m "message"为上传文件添加说明信息。
  7. git push origin master将文件push到github仓库。

升级代码符合Python3规范

实际上python2.7和python3.x还是有不少区别的,但在本章的代码中主要只需注意两点就好:

  1. print格式
  2. bytes和str类型和互相转换

具体python2.7和pyhton3.x的区别详见:在Python 2.7即将停止支持时,我们为你准备了一份3.x迁移指南

关键代码分析

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

socket.socket()返回套接字对象,可以进行连接、收发、读写。第一个参数为地址簇,AF_INET为ipv4地址,AF_INET6为ipv6地址,AF_UNIX只能够用于单一的Unix系统进程间通信;第二个参数为连接类型,SOCK_STREAM,流式socket,用于TCP连接,SOCK_DGRAM,数据报式socket,用于UDP通信,SOCK_RAW,原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头,SOCK_RDM是一种可靠的UDP形式,即保证交付数据报但不保证顺序,SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。SOCK_SEQPACKET可靠的连续数据包服务。

部分运行结果

TCP客户端和服务端:

![](https://img2018.cnblogs.com/blog/1506386/201903/1506386-20190317105748753-238420417.png)
![](https://img2018.cnblogs.com/blog/1506386/201903/1506386-20190317105753719-1955038005.png)

替代netcat的工具:

![](https://img2018.cnblogs.com/blog/1506386/201903/1506386-20190317105816582-1163509099.png)
![](https://img2018.cnblogs.com/blog/1506386/201903/1506386-20190317105827136-1905503749.png)

连接接ssh服务器,这个在服务器端应该还需要一些配置,没有运行成功。

![](https://img2018.cnblogs.com/blog/1506386/201903/1506386-20190317105910608-387460848.png)

代码链接

Black Hat Python3

Chapter3、4##

mail sniffer

现在的邮箱应用我能找到的都是加密传输了,因此相像书中那样直接从抓到的包里获取到用户名和密码信息除非是自己专门搭建一个邮箱服务器,不然很难做到,为了便于理解代码的运行,多添加一个tcp端口观察代码的运行情况,修改后的python3代码如下:

from scapy.all import *
from scapy.layers.inet import TCP, IP # our packet callback
def packet_callback(packet):
if packet.haslayer(TCP):
if packet[TCP].payload:
mail_packet = str(packet[TCP].payload)
if "user" in mail_packet.lower() or "pass" in mail_packet.lower():
print("[*] Server: {}".format(packet[IP].dst))
print("[*] {}".format(packet[TCP].payload)) print("go!") # fire up our sniffer
sniff(filter="tcp port 110 or tcp port 25 or tcp port 143 or tcp port 80", prn=packet_callback, store=0)
#sniff(prn=packet_callback, count=0)

可以看到比书中多监测了80端口,运行情况如下:

![](https://img2018.cnblogs.com/blog/1506386/201903/1506386-20190330182000093-1712764395.png)

arper

本代码运行良好不需要做有技术含量的修改,修改后python3代码见文章最后github链接。

运行状况:

![](https://img2018.cnblogs.com/blog/1506386/201903/1506386-20190330182005176-1660721356.png)

目标主机arp缓存被更改:

![](https://img2018.cnblogs.com/blog/1506386/201903/1506386-20190330182009469-2131788676.png)

pic_carve

书上步骤很详细,也无需太多修改,对之前的代码稍作修改使其抓取本机的10000个数据包,然后······

我的kali跑死机了。

干脆重写一个抓取本机数据包的程序。代码如下:

from scapy.all import *
import sys host = "192.168.2.222"
packet_count = 5000
interface = "eth0" bpf_filter = "ip host {}".format(host) try:
print("[*] Starting sniffer for {} packets".format(packet_count)) packets = sniff(count=packet_count, filter=bpf_filter, iface=interface) except KeyboardInterrupt:
pass finally:
# write out the captured packets
print("[*] Writing packets to arper.pcap")
wrpcap("arper.pcap", packets)
sys.exit(0)

然后修改并运行代码,说实话不能算成功,无非是对图片格式的编码解码有问题。自我放弃之下用python2.7去运行原版代码······

也是图片编码存在问题:

![](https://img2018.cnblogs.com/blog/1506386/201903/1506386-20190330182018199-803682880.png)

代码链接

Black Hat Python3 Chapter4

Black Hat Python3 Chapter5

web app mapper

目标地址:http://www.blackfire.mobi (感谢网站作者的分享)

joomla应用下载地址:https://github.com/joomla/joomla-cms (需要用到joomla的目录结构)

代码改为python3代码不需要太多修改,把urllib2的相应函数改为urllib中的相应函数即可。

运行结果:

![](https://img2018.cnblogs.com/blog/1506386/201904/1506386-20190404182426491-209661325.png)

content_bruter

目标地址:https://www.jianshu.com

使用字典来源:https://github.com/nathanmyee/SVNDigger

或者:https://github.com/digination/dirbuster-ng

本代码中使用dirbuster-ng/wordlists/small.txt

修改代码需要注意是否使用代码中的extension扩展,这和选用的字典中带不带后缀有关系,其次原代码中对网址的拼接有问题,重写如下:

for brute in attempt_list:
brute_list = brute.split('\'')
if len(brute_list) == 3:
url = "{}/{}{}".format(target_url, brute_list[1], brute_list[2])
elif len(brute_list) == 2:
url = "{}/{}".format(target_url, brute_list[1])

运行结果:

![](https://img2018.cnblogs.com/blog/1506386/201904/1506386-20190404182435237-1601250909.png)
![](https://img2018.cnblogs.com/blog/1506386/201904/1506386-20190404182446750-694341363.png)

joomla_killer

测试网址:https://passport.csdn.net/login

字典来源:https://github.com/rootphantomer/Blasting_dictionary

本代码使用:Blasting_dictionary/常用密码.txt

代码修改就不多说了。比较简单,运行结果如下:

![](https://img2018.cnblogs.com/blog/1506386/201904/1506386-20190404182454385-1385519299.png)

代码链接

Black Hat Python3 Chapter5

Black Hat Python3 chapter 6、9

第六章代码用到的Jyphon包不支持python3版本,因此本次代码均使用书中原版代码(小幅修改)。

模糊测试

首先配置好jyphon包的路径,之后将bhp_fuzz.py文件加入到工具:

![](https://img2018.cnblogs.com/blog/1506386/201904/1506386-20190413095759435-2045795641.png)

模拟运行结果如下:

![](https://img2018.cnblogs.com/blog/1506386/201904/1506386-20190413095804965-793729677.png)

BING API 反查域名

成功添加该工具:

![](https://img2018.cnblogs.com/blog/1506386/201904/1506386-20190413095810412-817231479.png)

运行结果:

![](https://img2018.cnblogs.com/blog/1506386/201904/1506386-20190413095815703-213154666.png)

可以看到并没有查询得到结果。首先bing search API的网址已经变了,现在网址为:https://api.cognitive.microsoft.com/bing/v7.0/

其次,新版的API已经取消了该搜索功能(至少我是没找到,在bing搜索中按照IP:XXX.XXX.XXX.XXX的方式也得不到有效结果,结果为Ref A: 2EBF0909B997498C843D95CDC73B2946 Ref B: BJ1EDGE0307 Ref C: 2019-04-12T01:19:46Z),因此通过本扩展实现反查域名已经不可行了。需要另求它法。

生成字典

首先由host地址发现拓扑结构:

![](https://img2018.cnblogs.com/blog/1506386/201904/1506386-20190413095825088-1743490864.png)

生成字典:

![](https://img2018.cnblogs.com/blog/1506386/201904/1506386-20190413095830788-104864649.png)

结果如下:

![](https://img2018.cnblogs.com/blog/1506386/201904/1506386-20190413095836004-714903883.png)

好兄弟IE

IE浏览器是目前市场占有率最高的浏览器,为了在ie浏览器完成此实验,不得不重装一个win7虚拟机进行此实验。此部分代码使用python3重写。

书中让我观察浏览器是否有难以理解的动作,确实有,当我进入程序中target_site中的登录界面后,或者我本身就在登录状态,浏览器会不停的刷新回输入账户的界面···

![](https://img2018.cnblogs.com/blog/1506386/201904/1506386-20190413095844171-105889906.png)

实际上是try部分转为python3后出错了,没有错误提示,改正后运行结果如下:

![](https://img2018.cnblogs.com/blog/1506386/201904/1506386-20190413095849733-1792225964.png)

html标签中没有id怎么办

本代码要求比较复杂,首先需要使用keygen.py生成RSA公私钥对,然后使用ie_exfil.py将明文文件名加密后在目标网站以标题的形式发出,之后还可以用decryptor.py解密。

在修改过程中其他的不谈,原程序使用win32com这个包来进行浏览器操作,对于目标网站来说存在以下几个问题:

  • win32com使用id来寻找网页中的标签,但是目标网站中我们需要插入数据的地方没有id
![](https://img2018.cnblogs.com/blog/1506386/201904/1506386-20190413095859634-434321648.png)

- win32com在插入数据时使用setAttribute来进行修改,问题在于从网页返回的实例中难以获得有哪些attribute,多次使用dir()命令也没有得到什么有效信息

![](https://img2018.cnblogs.com/blog/1506386/201904/1506386-20190413095904421-1579844324.png)

因此在我的视角中使用书中的win32com包来完成这项工作几乎是不可能的。

因此我用selenium包重写了这个程序,在程序链接中命名为ie_exfil_new.py。更换工具包后一切都变得简单了起来,运行结果如下:

![](https://img2018.cnblogs.com/blog/1506386/201904/1506386-20190413101656336-1069390324.png)

仍需要注意的是,selenium操作浏览器需要下载对应浏览器的驱动文件,在64位的iedriver中存在bug,在想IE11浏览器中输入英文字母和数字时会非常缓慢,大约5s才能输入一个字符。

据悉对IE浏览器进行降级或者换用32位的驱动可以解决这个问题,但是我将IE11降级为IE10后依然存在这个问题,也有可能是iedriver和selenium版本不匹配的问题?我只是单纯的下载了最新版没有注意版本是否对应。不过具体怎样其实也不重要了,因为selenium只要有对应浏览器的驱动,可以操作任何浏览器,谁还会去用集万千缺点于一身的IE呢?

代码链接

Black Hat Python3

Black Hat Python3 Chapter7、8

这周第八章第一个代码堪称经典,然而再python3下尝试过各种姿势后不得不放弃,原因如下:

1.pyhook安装繁琐,需要的swig工具试过各种版本后才装好,安装可参照:https://blog.csdn.net/u013560932/article/details/78732250/。也可以下载包到本地进行本地安装。

2.pyhook即便装好后,python3运行依然会有问题,具体体现在进程名称中出现中文时,详见Python的KeyboardSwitch() missing 8解决方法

3.安装2中链接的包时,出现了各种新的问题,尤其是visual c++ 14.0微软官网已经不提供下载了。

部分运行结果:

![](https://img2018.cnblogs.com/blog/1506386/201904/1506386-20190419225329380-1172261060.png)
![](https://img2018.cnblogs.com/blog/1506386/201904/1506386-20190419225353457-817113194.png)

因此本周重点放在了第七章的代码。我做的工作主要有两点:
1.转成python3会在某个文件调用中出现charmap格式无法解码的问题,有人在stack overflow提问过这个问题,但没有有效的解答,我在该问题下做出了回答,详见[Traceback Error: Lookup Error: unknown encoding charmap](https://stackoverflow.com/questions/47605277/traceback-error-lookup-error-unknown-encoding-charmap),简单来说就是将出错文件中的代码修改一下,不会影响我们自己代码的运行。

2.源代码登录时写的是明文的用户名和密码,这个很不利于我们的账户安全,我在自己的代码中使用了token连接github,更加安全,更方便管理。

代码运行结果如下:

![](https://img2018.cnblogs.com/blog/1506386/201904/1506386-20190419225359632-1290994878.png)

代码链接

第七章代码新建了单独的仓库:https://github.com/ChosenOne95/chapter7/tree/master

第八章:https://github.com/ChosenOne95/black-hat-python3/tree/master/Chapter 8

《BLACK HAT PYTHON3》的更多相关文章

  1. 《dive into python3》 笔记摘录

    1.list can hold  arbitrary  objects and can expand dynamically as new items are added. A list is an  ...

  2. 2017-2018-2 20179207 《网络攻防技术》第十三周作业 python3实现SM234算法

    国密算法SM234 的python3实现 国家标准 GM/T 0002-2012 <SM4分组密码算法> GM/T 0003.1-2012 <SM2椭圆曲线公钥密码算法 第1部分:总 ...

  3. 《笨办法学Python3 》入坑必备,并不是真笨学!!!

    <笨办法学Python3 >免费下载地址 内容简介 · · · · · · 本书是一本Python入门书籍,适合对计算机了解不多,没有学过编程,但对编程感兴趣的读者学习使用.这本书以习题的 ...

  4. HanLP《自然语言处理入门》笔记--5.感知机模型与序列标注

    笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP 5. 感知机分类与序列标注 第4章我们利用隐马尔可夫模型实现了第一个基于序列标注的 ...

  5. 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:本人目前在杭州某家互联网公司工作, ...

  6. 20145218&20145240 《信息安全系统设计基础》实验一 开发环境的熟悉

    20145218&20145240 <信息安全系统设计基础>实验一 开发环境的熟悉 课程:信息安全系统设计基础 班级:1452 姓名:(按贡献大小排名)刘士嘉 张晓涵 学号:(按贡 ...

  7. 《Python自然语言处理》中文版-纠错【更新中。。。】

    最近在看<Python自然语言处理>中文版这本书,可能由于是从py2.x到py3.x,加上nltk的更新的原因,或者作者的一些笔误,在书中很多代码都运行不能通过,下面我就整理一下一点有问题 ...

  8. 《码农周刊》干货精选(Python 篇)

    <码农周刊>已经累计发送了 38 期,我们将干货内容进行了精选.此为 Python 篇. <码农周刊>往期回顾:http://weekly.manong.io/issues/ ...

  9. 《Python网络编程》学习笔记--使用谷歌地理编码API获取一个JSON文档

    Foundations of Python Network Programing,Third Edition <python网络编程>,本书中的代码可在Github上搜索fopnp下载 本 ...

随机推荐

  1. 前端学习:CSS的学习总结(图解)

    前端学习:CSS的学习总结(图解) CSS代码笔记 CSS简介 css的引入方式和书写规范 CSS选择器 CSS属性 CSS盒子模型 CSS的定位

  2. 深入V8引擎-编译启动

    记录一下步骤,方便以后换了电脑重新编译. 1.搞定depot_tools,git地址:git clone https://chromium.googlesource.com/chromium/tool ...

  3. Asp.NetCoreWebApi入门 - 从零开始新建api项目

    开发环境 打开VS,建立项目 项目结构 修改 StartUp 类代码 ConfigureServices方法 Configure方法 为开发环境和生产环境配置不同的 Startup 新建一个Contr ...

  4. 2-Consul简介

    Consul 是什么 Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License ...

  5. 理解AMD ,CMD,CommonJS规范

    https://blog.csdn.net/xcymorningsun/article/details/52709608 理解AMD ,CMD,CommonJS规范 2016年09月30日 10:33 ...

  6. 06. redis cluster

    目录 Redis Cluster redis cluster 特点 搭建redis cluster 访问redis cluster redis-cli 访问redis cluster 重新分片数据 新 ...

  7. linux终端下常用快捷键

    linu下我常用的快捷键 alt+b 跳转到上一个单词使用 alt+f 跳转到下一个单词使用 Ctrl+c 结束正在运行的程序 Ctrl+d 结束输入或退出shell Ctrl+s 暂停屏幕输出[锁住 ...

  8. LOJ 3158: 「NOI2019」序列

    题目传送门:LOJ #3158. 题意简述: 给定两个长度为 \(n\) 的正整数序列 \(a,b\),要求在每个序列中都选中 \(K\) 个下标,并且要保证同时在两个序列中都被选中的下标至少有 \( ...

  9. 【Js】创建对象的6种方式总结、(底部包含属性名为动态的形式)

    一.new 操作符 + Object 创建对象 1 var person = new Object(); 2 person.name = "lisi"; 3 person.age ...

  10. 前端html页面,手机查看

    在写前端页面中,经常会在浏览器运行HTML页面,从本地文件夹中直接打开的一般都是file协议,当代码中存在http或https的链接时,HTML页面就无法正常打开,为了解决这种情况,需要在在本地开启一 ...