1.cyberchef中有个Extract Files功能,有时可以提取出binwalk找不到的东西。
例:base64多行解码:
例题
eHR3c2lra2N0Y2p3dGV2Y2dlYXRpeWN3dGV2Y2tlanM=
powershelltshark -r blindsql.pcapng -Y 'http.request.method==GET' tshark -r blindsql.pcapng -Y "http.request.line" tshark -r a.pcapng -Y "http.request || http.response" -T fields -e text # 读取pcap文件并提取所有DNS查询 tshark -r capture.pcap -Y "dns" -T fields -e dns.qry.name # 统计每个域名的查询次数 tshark -r capture.pcap -Y "dns" -T fields -e dns.qry.name | sort | uniq -c | sort -nr # 提取特定类型的DNS记录(例如A记录) tshark -r capture.pcap -Y "dns.qry.type == 1" -T fields -e dns.qry.name # 提取DNS响应中的IP地址 tshark -r capture.pcap -Y "dns" -T fields -e dns.a # 统计每个源IP的DNS查询次数 tshark -r capture.pcap -Y "dns" -T fields -e ip.src | sort | uniq -c | sort -nr # 提取DNS查询和响应的时间戳 tshark -r capture.pcap -Y "dns" -T fields -e frame.time -e dns.qry.name -e dns.a #显示 DNS 响应时间 tshark -r dns_traffic.pcap -Y "dns.qr == 1" -T fields -e dns.time # 过滤特定域名的DNS查询 tshark -r capture.pcap -Y "dns.qry.name == 'example.com'" -T fields -e dns.qry.name -e dns.a # 统计每个基础域名的唯一子域名数量 tshark -r filename.pcap -T fields -e dns.qry.name | sort | uniq | rev | cut -d '.' -f 1-2 | rev | sort | uniq -c | sort -nr | head #提取DNS响应中的答案 tshark -r filename.pcap -Y "dns.flags.response == 1" -T fields -e dns.qry.name -e dns.a #提取特定的 DNS 字段,比如查询名称和响应地址 tshark -r demo.pcapng -Y "dns" -T fields -e dns.qry.name -e dns.resp.addr #显示 DNS 流量的时间戳 tshark -r dns_traffic.pcap -Y "dns" -T fields -e frame.time -e dns.qry.name #提取所有 DNS 查询名称并去重 tshark -r filename.pcap -T fields -e dns.qry.name -Y "dns.flags.response eq 0" | sed '/^$/d' | sort | uniq tshark -r 异常的流量.pcap -T fields -e dns.qry.name -Y "dns.flags.response eq 0" | sed '/^$/d' | sort | uniq # 统计特定 DNS 查询的出现次数 tshark -r filename.pcap -T fields -e dns.qry.name -Y "dns.flags.response eq 0" | sort | uniq -c | sort -nr # 提取 DNS 响应中的 IP 地址 tshark -r filename.pcap -Y "dns.flags.response == 1" -T fields -e dns.a #提取 DNS 事务 ID tshark -r <filename.pcap> -Y "dns.flags.response == 0" -T fields -e dns.id #过滤特定 IP 的 DNS 流量 tshark -r dns_traffic.pcap -Y "ip.addr == <target_ip> && dns"
phphttp.request.method == "GET"
http.request.method == "POST"
http.request.uri == "/img/logo-edu.gif"
http contains "GET"
http contains "HTTP/1"
// GET包
http.request.method == "GET" && http contains "Host:"
http.request.method == "GET" && http contains "User-Agent:"
// POST包
http.request.method == "POST" && http contains "Host:"
http.request.method == "POST" && http contains "User-Agent:"
// 响应包
http contains "HTTP/1.1 200 OK" && http contains "Content-Type: "
http contains "HTTP/1.1 200 OK" && http contains "Content-Type: "
运算符: == 等于 != 不等于 > 大于 < 小于 >= 大于等于 <= 小于等于 与 and , && 或 or , || 非 ! , not 语法使用: 1.过滤IP ip.src eq 192.168.1.10 or ip.dst eq 192.168.1.10 ip.addr eq 192.168.1.10 # 都显示:来源和目标 2.过滤端口 tcp.port eq 80 or udp.port eq 80 # 来源+目标 tcp.dstport == 80 # 只显示tcp协议的目标端口 tcp.srcport == 80 # 只显示tcp协议的来源端口 tcp.port >= 1 and tcp.port <= 80 # 端口范围 3.过滤协议 tcp udp icmp http smtp ftp dns msnms ip ssloicq bootp 等 !udp 或者 not udp 4.过滤指定字符 http.request.uri matches ".mp3$" # http请求的uri中以.mp3结尾 http.request.uri contains ".mp3$" # 包含.mp3$这5个字节的uri请求,$是字符不是正则表达式的结尾 5.http模式过滤 http.request.method == "GET" http.request.uri == "/img/logo.gif" http contains "GET" http contains "HTTP/1.1 200 OK" http.request.method == "POST" && http contains "User-Agent:" 6.过滤MAC eth.dst == A0:00:00:04:C5:84 # 过滤目标mac eth.addr eq A0:00:00:04:C5:84 # src+dst 7.包长度过滤 udp.length == 26 # udp本身固定长度8加上udp下面那块数据包之和 tcp.len >= 7 # 指的是ip数据包(tcp下面那块数据),不包括tcp本身 ip.len == 94 # 除了以太网头固定长度14,其它都算是ip.len,即从ip本身到最后 frame.len == 119 # 整个数据包长度,从eth开始到最后 eth —> ip or arp —> tcp or udp —> data 8.tcp参数过滤 tcp.flags 显示包含TCP标志的封包。 tcp.flags.syn == 0x02 显示包含TCP SYN标志的封包。 tcp.window_size == 0 && tcp.flags.reset != 1 9.包过滤内容 tcp[20]表示从20开始,取1个字符 tcp[20:]表示从20开始,取1个字符以上 tcp[20:8]表示从20开始,取8个字符 10.dhcp bootp.type==0x02 and not ip.src==192.168.1.1 注意:DHCP协议的检索规则不是dhcp/DHCP, 而是bootp 11.msn msnms && tcp[23:1] == 20 // 第四个是0x20的msn数据包 msnms && tcp[20:3]== "USR" // 找到命令编码是USR的数据包 msnms && tcp[20:3]== "MSG" // 找到命令编码是MSG的数据包 一些类似正则表达式的规则: 小于 le 等于 eq 大于 gt 大于等于 ge 不等 ne \d 0-9的数字 \D \d的补集(以所以字符为全集,下同),即所有非数字的字符 \w 单词字符,指大小写字母、0-9的数字、下划线 \W \w的补集 \s 空白字符,包括换行符\n、回车符\r、制表符\t、垂直制表符\v、换页符\f \S \s的补集 . 除换行符\n外的任意字符。 在Perl中,“.”可以匹配新行符的模式被称作“单行模式” .* 匹配任意文本,不包括回车(\n)? 。 而,[0x00-0xff]* 匹配任意文本,包括\n […] 匹配[]内所列出的所有字符 [^…] 匹配非[]内所列出的字符 ^ 表示其后的字符必须位于字符串的开始处 $ 表示其前面的字符必须位于字符串的结束处 \b 匹配一个单词的边界 \B 匹配一个非单词的边界 {n} 匹配前面的字符n次 {n,} 匹配前面的字符n次或多于n次 {n,m} 匹配前面的字符n到m次 ? 匹配前面的字符0或1次 + 匹配前面的字符1次或多于1次 * 匹配前面的字符0次或式于0次
这是我正在编辑的隐写工具列表。它包括一个可以获得该工具的链接,一个简短的描述,以及一个指示它工作的操作系统,它工作的文件类型以及它使用的数据嵌入方法的表格。如果你想使用像Aletheia这样的工具执行隐写分析,后者尤为重要。
有些数据仍然不可用,通常是因为我还没有找到这些信息,还没有时间调查该工具。
如果你知道一些没有提供的数据,或者有一个工具,你认为将是有趣的添加到列表中,你可以在这里与我联系。
CryptoStego是一种在浏览器中运行的图像隐写工具。
操作系统 | 跨平台(Web浏览器) |
---|---|
图像插入方法 | LSB替换 |
JPG的图像插入方法 | 自定义 |
许可证 | MIT |
由于此工具在浏览器中运行,因此只需访问页面并按照说明操作即可。
ChatGPT是由OpenAI开发的人工智能模型,用于通过文本模拟人类对话。
它本身不是一个隐写工具,尽管它生成高质量文本的能力允许它被用作隐写工具。一个例子可以在文章文本隐写术与ChatGPT中找到。
DeepSound是一个隐写工具,允许在音频文件中隐藏信息。
操作系统 | Windows |
---|---|
支持的音频格式 | FLAC,MP3,WAV,APE |
音频插入方法 | ? |
许可证 | 免费软件 |
图形界面:
DeepSound有一个图形界面,便于隐藏和提取信息。
F5是JPEG图像的隐写工具。
操作系统 | 跨平台(Java) |
---|---|
JPG图像插入方法 | 自定义 |
许可证 | MIT |
使用命令嵌入消息:
要在封面图像中隐藏“secret.txt”文件,我们可以使用以下命令:
java -jar f5.jar e -p p4ssw0rd -e secret.txt cover.jpg stego.jpg
使用以下命令提取消息:
要从隐写图像中提取隐藏信息,我们可以使用以下命令:
java -jar f5.jar x -p p4ssw0rd -xf output.txt stego.jpg
HiddenWave是一款用于WAV文件中音频的隐写工具。
操作系统 | 跨平台(Python) |
---|---|
WAV音频插入方法 | LSB替换 |
许可证 | 公共领域/未授权 |
使用命令嵌入消息:
要在封面音频中隐藏消息,我们可以使用以下命令:
python3 HiddenWave.py -f cover.wav -m "Secret message" -o stego.wav
使用以下命令提取消息:
要从隐写音频中提取隐藏信息,我们可以使用以下命令:
python3 ExWave.py -f stego.wav
HStego是一个隐写工具,允许在PNG和JPG图像中隐藏信息。 该工具的主要目标是不被现代隐写分析工具检测到。
操作系统 | Windows、Linux |
---|---|
支持的格式 | PNG、JPG |
图像插入方法 | STC + S-UNIWARD |
JPG图像插入方法 | STC + J-UNIWARD |
许可证 | MIT |
使用命令嵌入消息:
要在封面图像中隐藏“secret.txt”文件,我们可以使用以下命令:
hstego.py embed secret.txt cover.png stego.png p4ssw0rd
使用以下命令提取消息:
要从隐写图像中提取隐藏信息,我们可以使用以下命令:
hstego.py extract stego.png content.txt p4ssw0rd
图形界面:
HStego工具有一个图形界面,允许隐藏和提取信息,以及嵌入和验证水印。
JP Hide Seek是一款用于JPEG图像的隐写工具。
操作系统 | Linux |
---|---|
JPG图像插入方法 | DCT LSB替换 |
许可证 | GPL v2 |
使用命令嵌入消息:
要在封面图像中隐藏“secret.txt”文件,我们可以使用以下命令:
jphide cover.jpg stego.jpg secret.txt
使用以下命令提取消息:
要从隐写图像中提取隐藏信息,我们可以使用以下命令:
jpseek stego.jpg output.txt
JSteg是JPEG图像的隐写工具。
操作系统 | Linux |
---|---|
JPG图像插入方法 | DCT LSB替换(忽略值0和1) |
许可证 | 类似于BSD的自定义许可证 |
使用命令嵌入消息:
要在封面图像中隐藏“secret.txt”文件,我们可以使用以下命令:
cjpeg -steg secret.txt cover.pgm > stego.jpg
使用命令提取消息:
要提取隐藏图像中的隐藏信息,我们可以使用以下命令:
djpeg -steg output.txt stego.jpg > out.jpg
MP3Stego是一个隐写工具,在将WAV文件压缩为MP3的过程中隐藏信息。
操作系统 | Windows |
---|---|
MP3音频的插入方法 | 自定义 |
许可证 | ? |
使用命令嵌入消息:
要在封面音频文件中隐藏“secret.txt”文件,我们可以使用以下命令:
encode -E secret.txt -P p4ssw0rd cover.wav stego.mp3
使用命令提取消息:
要从隐写音频中提取隐藏信息,我们可以使用以下命令:
decode -X -P p4ssw0rd svega_stego.mp3
OpenPuff是一个隐写工具,允许以多种格式隐藏信息。
操作系统 | Windows、Linux |
---|---|
支持的图像格式 | BMP,JPG,PCX,PNG,TGA,其它 |
支持的音频格式 | AIFF,MP3,NEXT/SUN,WAV |
支持的视频播放器 | 3GP,MP4,MPG,VOB格式 |
其他支持的服务 | FLV,PDF,PDF |
图像插入方法 | LSB替换 |
JPEG图像插入方法 | 斯特吉德? |
视频插入方法 | ? |
其他插入方法 | ? |
许可证 | LGPL v3 +部分封闭代码 |
图形界面:
OpenPuff工具有一个图形界面,允许隐藏和提取信息,以及嵌入和验证水印。
OpenStego是一个图像隐写工具,它允许隐藏信息以传输秘密消息和水印。
操作系统 | 跨平台(Java) |
---|---|
支持的格式 | PNG |
插入方法 | LSB替换 |
许可证 | GPL v2 |
使用命令嵌入消息:
要在封面图像中隐藏文件“secret.txt”,我们可以使用以下命令:
java -jar openstego.jar embed -a randomlsb -mf secret.txt -cf cover.png -sf stego.png
使用以下命令提取消息:
要从隐写图像中提取隐藏信息,我们可以使用以下命令:
java -jar openstego.jar extract -a randomlsb -sf stego.png -xd output-dir
图形界面:
OpenStego工具有一个图形界面,允许隐藏和提取信息,以及嵌入和验证水印。
Outguess是一个JPEG图像的隐写工具。
操作系统 | Linux |
---|---|
JPEG图像插入方法 | 自定义 |
许可证 | MIT |
使用命令嵌入消息:
要在封面图像中隐藏文件“secret.txt”,我们可以使用以下命令:
outguess -k p4ssw0rd -d secret.txt cover.jpg stego.jpg
使用以下命令提取消息:
要从隐写图像中提取隐藏信息,我们可以使用以下命令:
outguess -k p4ssw0rd -r stego.jpg output.txt
QuickStego是一个隐写工具,允许在图像中隐藏信息。
操作系统 | Windows |
---|---|
支持的格式 | BMP,GIF,JPG |
图像插入方法 | ? |
JPEG图像插入方法 | ? |
许可证 | 免费软件 |
图形界面:
QuickStego工具有一个图形界面,允许隐藏和提取信息。
SilentEye是一个隐写工具,允许在图像和音频中隐藏信息。
操作系统 | Windows,MacOS X,Linux |
---|---|
支持的格式 | BMP、WAV |
图像插入方法 | LSB替换 |
JPEG图像插入方法 | ? |
音频插入方法 | ? |
许可证 | GPL v3 |
图形界面:
SilentEye工具有一个图形界面,允许隐藏和提取信息。
SSuite Picsel是一个隐写工具,允许在图像中隐藏信息。
操作系统 | Windows,MacOS X,Linux |
---|---|
支持的格式 | BMP、PNG、JPG |
图像插入方法 | ? |
JPEG图像插入方法 | ? |
许可证 | 免费软件 |
图形界面:
SSuite Picsel工具有一个图形界面,允许隐藏和提取信息。
Steg是一种隐写工具,允许使用不同的空白编码在ASCII文本中隐藏信息。
操作系统 | 跨平台(D) |
---|---|
文本的插入方法 | 具有不同编码的空格 |
许可证 | GPL v3 |
使用命令嵌入消息:
要在封面图像中隐藏消息,我们可以使用以下命令:
steg -c cover.txt -o stego.txt "This is a message"
使用以下命令提取消息:
要从隐写文本中提取隐藏信息,我们可以使用以下命令:
steg -d -s stego.txt
Steghide是一个隐写工具,允许在图像和音频中隐藏信息。
操作系统 | Windows、Linux |
---|---|
支持的映像文件 | BMP、JPG |
支持的音频转换器 | WAV,Au |
图像的插入方法 | 自定义 |
JPG图像的插入方法 | 自定义 |
音频插入方法 | 自定义 |
许可证 | GPL v2 |
使用命令嵌入消息:
要在封面图像中隐藏文件“secret.txt”,我们可以使用以下命令:
steghide embed -cf cover.jpg -ef secret.txt -sf stego.jpg -p p4ssw0rd
使用以下命令提取消息:
要从隐写图像中提取隐藏信息,我们可以使用以下命令:
steghide extract -sf stego.jpg -xf output.txt -p p4ssw0rd -f
(PNG)
根据png的文件格式,一张png图片由PNG文件头+IHDR+IDAT+IEND组成。其中IDAT又由IDAT_DATA的长度 + IDAT + IDAT_DATA + CRC32
(CRC32 = IDAT + IDAT_DATA)组成。那么只要给出全部的IDAT_DATA块和一些信息(png的宽和高,颜色模式,如RGB),就能自行还原png。文件头+IHDR结构:89 50 4E 47 0D 0A 1A 0A + 00 00 00 0D + IHDR + IM_WIDTH + IM_HEIGHT + Bits + color_type + compr_method + filter_method + interlace_method + CRC32
(CRC32 = IHDR + IM_WIDTH + IM_HEIGHT + Bits + color_type + compr_method + filter_method + interlace_method);IEND结构:00 00 00 00 49 45 4E 44 AE 42 60 82
多个IDAT层之间是有顺序的,辨别方法是:如果拼对了一层,png就会显示出来一层。
pythonimport os
import sys
import binascii
import zlib
OUTPUT = ''
def bin2hex(data):
return binascii.b2a_hex(data)
def hex2bin(data):
return binascii.a2b_hex(data)
def dec2bin(data, l=1):
l = l / 2
if l == 4:
return hex2bin("%08x" % int(data))
else:
return hex2bin("%02x" % int(data))
def bin2dec(data):
return int(bin2hex(data), 16)
def crc32(chunkType, chunkData):
return dec2bin(binascii.crc32(chunkType + chunkData), 8)
def genIHDR(w, h):
width = dec2bin(w, 8)
height = dec2bin(h, 8)
bits = dec2bin(8)
color_type = dec2bin(2)
compr_method = filter_method = interlace_method = dec2bin(0)
chunkData = width+height+bits+color_type + \
compr_method+filter_method+interlace_method
res = dec2bin(len(chunkData), 8)+b'IHDR' + \
chunkData+crc32(b'IHDR', chunkData)
return res
def genIDAT(data):
_c = zlib.crc32(b'IDAT'+data)
if _c < 0:
_c = ~_c ^ 0xffffffff
_crc = dec2bin(_c, 8)
return dec2bin(len(data), 8) + b'IDAT' + data + _crc
def merge_png(width, height, names, output="tmp.png"):
header = hex2bin("89504E470D0A1A0A")
ihdr = genIHDR(width, height)
idat = []
for name in names:
f=open("%s/%s" % (OUTPUT, name),'rb')
data = f.read()
idat.append(genIDAT(data))
f.close()
idat = b''.join(idat)
iend = hex2bin("00000000" + "49454E44" + "AE426082")
with open(output, 'wb') as f:
f.write(header+ihdr+idat+iend)
width=
height=
if __name__ == '__main__':
merge_png(width, height, [], "flag.png")
(参考链接)
phpsudo apt-get install python2.7-dev
sudo apt install python2
sudo apt install wget python-is-python2 # 安装wget和python2
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
python get-pip.py
curl https://bootstrap.pypa.io/get-pip.py --output get-pip.py
sudo python2 get-pip.py
或者
sudo apt install python-pip
php git clone https://github.com/gdabah/distorm.git
cd distorm3
python2 setup.py build
sudo python2 setup.py build installsudo apt-get install yara -y
wget https://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.1.tar.gz
tar -xvzf pycrypto-2.6.1.tar.gz
cd pycrypto-2.6.1
python2 setup.py build
sudo python2 setup.py build install
php$ sudo apt-get install git
$ git clone https://github.com/volatilityfoundation/volatility.git
$ cd volatility/
$ sudo python setup.py install
$ sudo apt-get install yara
$ sudo apt-get install python-pip
$ sudo -H pip install --upgrade pip
$ sudo -H pip install distorm3 pycrypto openpyxl Pillow
sudo pip install construct
phpcurl https://github.com/RealityNet/hotoloti/blob/master/volatility/mimikatz.py >> mimikatz.py
一般来说常用的参数格式为:
python2 vol.py -f file.raw plugins [args]
例如获取内存镜像的环境信息:
python2 vol.py -f file.raw imageinfo
或者是转储文件:
python2 vol.py -f file.raw dumpfiles --dump-dir .
Volatility2的使用方法
(1) 获取系统基本信息
javascript>>>python2 vol.py -f ../Target.vmem imageinfo
(2) 列出进程信息
javascript>>> python2 vol.py -f ../Target.vmem --profile=Win7SP1x64 pslist
(3) 提取某进程文件内容
javascript>>> python2 vol.py -f ../Target.vmem --profile=Win7SP1x64 memdump -p 516 -D /
(4) 查看文件目录
javascript>>> python2 vol.py -f ../Target.vmem --profile=Win7SP1x64 filescan
(5) 提取某文件内容
javascript>>>python2 vol.py -f ../Target.vmem --profile=Win7SP1x64 dumpfiles -Q 0x000000007fe72430 --dump-dir=./
(6) 调用mimikatz抓取系统口令
javascript python2 vol.py -f ../Target.vmem --profile=Win7SP1x64 mimikatz
浏览器
phpsudo vol.py --plugins=/home/chi11i/volatility/volatility-plugins -f data.raw --profile=Win7SP1x64 firefoxhistory
python3 vol.py [plugin] -f [image]
Volatility3的使用方法
获取系统基本信息
javascriptsudo python3 vol.py -f ../Target.vmem windows.info
提取某进程文件内容
javascriptsudo python3 vol.py -f /opt/forensic-analysis/Target.vmem windows.pslist --pid 516 --dump
使用以下命令从内存中转储文件
phpvol -f study.raw windows.filescan.FileScan | grep "flag"
vol -f Carmine-Falcone.raw windows.dumpfiles.DumpFiles --virtaddr 0xab0b10cde210
php/usr/local/lib/python2.7/dist-packages/volatility/plugins
插件名 | 作用 |
---|---|
amcache | 打印 AmCache 信息 |
apihooks | 检测进程和内核内存中的 API 钩子 (hooks) |
atoms | 打印会话和窗口站原子表 |
atomscan | 原子表池扫描器 |
auditpol | 从 HKLM\SECURITY\Policy\PolAdtEv 打印审计策略 |
bigpools | 使用 BigPagePoolScanner 转储大页面池 |
bioskbd | 从 Real Mode 内存中读取键盘缓冲区 |
cachedump | 从内存中转储缓存的域哈希值 |
callbacks | 打印整个系统的回调和通知进程 |
clipboard | 提取 Windows 剪贴板的内容 |
cmdline | 显示进程的命令行参数 |
cmdscan | 通过扫描 _COMMAND_HISTORY 提取命令历史记录 |
connections | 打印开放的连接列表 [仅适用于Windows XP和2003] |
connscan | 连接池中扫描 tcp 连接 |
consoles | 通过扫描 _CONSOLE_INFORMATION 来提取命令历史记录 |
crashinfo | 转储崩溃转储信息 |
deskscan | 标签 DESKTOP(台式机)的池扫描器 |
devicetree | 以树状图形式显示驱动 |
dlldump | 从进程地址空间转储 DLL |
dlllist | 打印每个进程的加载的 DLL 列表 |
driverirp | 驱动程序 IRP 挂钩检测 |
drivermodule | 将驱动程序对象关联到内核模块 |
driverscan | 驱动程序对象的池扫描程序 |
dumpcerts | 转储 RSA 的私有和公共 SSL 密钥 |
dumpfiles | 提取内存映射和缓存文件 |
dumpregistry | 将注册表文件转储到磁盘 |
editbox | 显示有关编辑控件的信息 |
envars | 显示进程环境变量 |
eventhooks | 打印 Windows 事件挂钩的详细信息 |
evtlogs | 提取 Windows 事件日志(仅限 XP/2003) |
filescan | 输出所有文件对象 |
gahti | 转储 USER 句柄类型信息 |
gditimers | 打印已安装的 GDI 计时器和回调 |
gdt | 显示全局描述符表 |
getservicesids | 获取注册表中的服务名称并返回计算的SID |
getsids | 打印属于每个进程的 SID |
handles | 打印每个进程的打开的句柄列表 |
hashdump | 从内存中转储密码哈希 (LM/NTLM) |
hibinfo | 转储休眠文件信息 |
hivedump | 转出注册表单元 |
hivelist | 打印注册表配置单元列表。 |
hivescan | 注册表配置单元的池扫描器 |
hpakextract | 从 HPAK 文件中提取物理内存 |
hpakinfo | 关于 HPAK 文件的信息 |
idt | 显示中断描述符表 |
iehistory | 重建 Internet Explorer 缓存/历史 |
imagecopy | 将物理地址空间复制为原始 DD 映像 |
imageinfo | 识别映像的信息 |
impscan | 扫描对导入函数的调用 |
joblinks | 打印进程作业链接信息 |
kdbgscan | 搜索并转储潜在的 KDBG 值 |
kpcrscan | 搜索并转储潜在的 KPCR 值 |
ldrmodules | 检测未链接的 DLL |
limeinfo | 转储 Lime 文件格式信息 |
linux_apihooks | 检查用户区 apihooks 情况 |
linux_arp | 打印 ARP 表 |
linux_aslr_shift | 自动检测 Linux ASLR shift |
linux_banner | 打印 Linux 横幅信息 |
linux_bash | 从 bash 进程内存中恢复 bash 历史记录 |
linux_bash_env | 恢复进程的动态环境变量 |
linux_bash_hash | 从 bash 进程内存中恢复 bash 哈希表 |
linux_check_afinfo | 验证网络协议的操作函数指针 |
linux_check_creds | 检查是否有任何进程共享凭证结构 |
linux_check_evt_arm | 检查异常向量表以查找系统调用表挂钩 |
linux_check_fop | 检查文件操作结构以查找 rootkit 修改 |
linux_check_idt | 检查 IDT 是否已被更改 |
linux_check_inline_kernel | 检查内联内核挂钩 |
linux_check_modules | 将模块列表与 sysfs 信息进行比较(如果可用) |
linux_check_syscall | 检查系统调用表是否已更改 |
linux_check_syscall_arm | 检查系统调用表是否已更改 |
linux_check_tty | 检查 tty 设备的挂钩 |
linux_cpuinfo | 打印有关每个活动处理器的信息 |
linux_dentry_cache | 从 dentry 缓存中收集文件 |
linux_dmesg | 收集 dmesg 缓冲区 |
linux_dump_map | 将选定的内存映射写入磁盘 |
linux_dynamic_env | 恢复进程的动态环境变量 |
linux_elfs | 在进程映射中查找 ELF 二进制文件 |
linux_enumerate_files | 列出文件系统缓存引用的文件 |
linux_find_file | 列出并从内存中恢复文件 |
linux_getcwd | 列出每个进程的当前工作目录 |
linux_hidden_modules | 雕刻内存以查找隐藏的内核模块 |
linux_ifconfig | 收集活动接口 |
linux_info_regs | 就像 GDB 中的“信息寄存器”(它将打印出所有寄存器) |
linux_iomem | 提供类似于 /proc/iomem 的输出 |
linux_kernel_opened_files | 列出从内核中打开的文件 |
linux_keyboard_notifiers | 解析键盘通知程序调用链 |
linux_ldrmodules | 将 proc maps 的输出与 libdl 中的库列表进行比较 |
linux_library_list | 列出加载到进程中的库 |
linux_librarydump | 将进程内存中的共享库转储到磁盘 |
linux_list_raw | 列出具有混杂套接字的应用程序 |
linux_lsmod | 收集加载的内核模块 |
linux_lsof | 列出文件描述符及其路径 |
linux_malfind | 查找可疑进程映射 |
linux_memmap | 转储 linux 任务的内存映射 |
linux_moddump | 提取加载的内核模块 |
linux_mount | 收集已安装的 fs/设备 |
linux_mount_cache | 从 kmem_cache 收集已安装的 fs/驱动 |
linux_netfilter | 列出 Netfilter 钩子 |
linux_netscan | 列出网络连接结构 |
linux_netstat | 列出打开的套接字 |
linux_pidhashtable | 通过 PID 哈希表枚举进程 |
linux_pkt_queues | 将每个进程的数据包队列写入磁盘 |
linux_plthook | 扫描 ELF 二进制文件的 PLT 以查找非需要图像的挂钩 |
linux_proc_maps | 收集进程内存映射 |
linux_proc_maps_rb | 通过映射红黑树为 linux 收集 proc maps |
linux_procdump | 将进程的可执行映像转储到磁盘 |
linux_process_hollow | 检查进程空心的迹象 |
linux_psaux | 收集进程以及完整的命令行和开始时间 |
linux_psenv | 收集进程及其静态环境变量 |
linux_pslist | 通过遍历 task_struct-> 任务列表来收集活动任务 |
linux_pslist_cache | 从 kmem_cache 收集任务 |
linux_psscan | 扫描进程的物理内存 |
linux_pstree | 显示进程之间的父/子关系 |
linux_psxview | 使用各种进程列表查找隐藏进程 |
linux_recover_filesystem | 从内存中恢复整个缓存文件系统 |
linux_route_cache | 从内存中恢复路由缓存 |
linux_sk_buff_cache | 从 sk_buff kmem_cache 恢复数据包 |
linux_slabinfo | 在运行的机器上模拟 /proc/slabinfo |
linux_strings | 将物理偏移量与虚拟地址匹配(可能需要一段时间,非常冗长) |
linux_threads | 打印进程的线程 |
linux_tmpfs | 从内存中恢复 tmpfs 文件系统 |
linux_truecrypt_passphrase | 恢复缓存的 Truecrypt 密码短语 |
linux_vma_cache | 从 vm_area_struct 缓存中收集 VMA |
linux_volshell | 内存镜像中的外壳 shell |
linux_yarascan | Linux 内存映像中的 shell |
lsadump | 从注册表中转储(解密)LSA 机密 |
mac_adium | 列出 Adium 消息 |
mac_apihooks | 检查进程中的 API 挂钩 |
mac_apihooks_kernel | 检查系统调用和内核函数是否被挂钩 |
mac_arp | 打印 arp 表 |
mac_bash | 从 bash 进程内存中恢复 bash 历史记录 |
mac_bash_env | 恢复 bash 的环境变量 |
mac_bash_hash | 恢复来自 bash 进程内存的 bash 哈希表 |
mac_calendar | 从 Calendar.app 获取日历事件 |
mac_check_fop | 验证文件操作指针 |
mac_check_mig_table | 列出内核 MIG 表中的全部内容 |
mac_check_syscall_shadow | 查找影子系统调用表 |
mac_check_syscalls | 检查系统调用表条目是否已挂钩 |
mac_check_sysctl | 检查未知的 sysctl 处理程序 |
mac_check_trap_table | 检查马赫陷阱表条目是否已挂钩 |
mac_compressed_swap | 打印 Mac OS X VM 压缩器统计信息和转储所有压缩页面 |
mac_contacts | 从 Contacts.app 获取联系人名称 |
mac_dead_procs | 打印终止/取消分配的进程 |
mac_dead_sockets | 打印终止/取消分配的网络套接字 |
mac_dead_vnodes | 列出释放的 vnode 结构 |
mac_devfs | 列出文件缓存中的文件 |
mac_dmesg | 打印内核调试缓冲区 |
mac_dump_file | 转储指定文件 |
mac_dump_maps | 转储进程的内存范围,可选地包括压缩交换中的页面 |
mac_dyld_maps | 从 dyld 数据结构获取进程的内存映射 |
mac_find_aslr_shift | 查找 10.8 的 ASLR 移位值+ 图像 |
mac_get_profile | 自动检测 Mac 配置文件 |
mac_ifconfig | 列出所有设备的网络接口信息 |
mac_interest_handlers | 列出 IOKit 兴趣处理程序 |
mac_ip_filters | 报告任何挂钩的 IP 过滤器 |
mac_kernel_classes | 列出内核中加载的 c++ 类 |
mac_kevents | 显示进程的父/子关系 |
mac_keychaindump | 恢复可能的钥匙串密钥。使用 chainbreaker 打开相关的钥匙串文件 |
mac_ldrmodules | 将 proc 映射的输出与 libdl 中的库列表进行比较 |
mac_librarydump | 转储进程的可执行文件 |
mac_list_files | 列出文件缓存中的文件 |
mac_list_kauth_listeners | 列出 Kauth 范围侦听器 |
mac_list_kauth_scopes | 列出 Kauth 范围和他们的状态 |
mac_list_raw | 列出具有混杂套接字的应用程序 |
mac_list_sessions | 枚举会话 |
mac_list_zones | 打印活动区域 |
mac_lsmod | 列出加载的内核模块 |
mac_lsmod_iokit | 列出通过 IOkit 加载的内核模块 |
mac_lsmod_kext_map | 列出加载的内核模块 |
mac_lsof | 列出每个进程打开的文件 |
mac_machine_info | 打印有关示例的机器信息 |
mac_malfind | 查找可疑进程映射 |
mac_memdump | 将可寻址内存页转储到文件 |
mac_moddump | 将指定的内核扩展写入磁盘 |
mac_mount | 打印已安装的设备信息 |
mac_netstat | 列出每个进程的活动网络连接 |
mac_network_conns | 列出来自内核网络结构的网络连接 |
mac_notesapp | 查找 Notes 消息的内容 |
mac_notifiers | 检测向 I/O Kit(例如 LogKext)添加挂钩的 rootkit |
mac_orphan_threads | 列出不映射回已知模块/进程的线程 |
mac_pgrp_hash_table | 步行进程组哈希表 |
mac_pid_hash_table | 遍历 pid 哈希表 |
mac_print_boot_cmdline | 打印内核启动参数 |
mac_proc_maps | 获取进程的内存映射 |
mac_procdump | 转储进程的可执行文件 |
mac_psaux | 打印带有用户空间参数的进程 (argv ) |
mac_psenv | 打印用户区环境中的进程 (envp ) |
mac_pslist | 列出正在运行的进程 |
mac_pstree | 显示进程的父/子关系 |
mac_psxview | 使用各种进程列表查找隐藏进程 |
mac_recover_filesystem | 恢复缓存的文件系统 |
mac_route | 打印路由表 |
mac_socket_filters | 报告套接字过滤器 |
mac_strings | 将物理偏移量与虚拟地址匹配(可能需要一段时间,非常冗长) |
mac_tasks | 列出活动任务 |
mac_threads | 列出进程线程 |
mac_threads_simple | 列出线程及其开始时间和优先级 |
mac_timers | 报告内核驱动程序设置的计时器 |
mac_trustedbsd | 列出恶意的 trustedbsd 策略 |
mac_version | 打印Mac版本 |
mac_vfsevents | 列出过滤文件系统事件的进程 |
mac_volshell | 内存映像中的 shell |
mac_yarascan | 扫描内存对于 yara 签名 |
machoinfo | 转储 Mach-O 文件格式信息 |
malfind | 查找隐藏和注入的代码 |
mbrparser | 扫描并解析潜在的主引导记录 (MBR) |
memdump | 转储进程的可寻址内存 |
memmap | 打印内存映射 |
messagehooks | 列出桌面和线程窗口消息挂钩 |
mftparser | 扫描并解析潜在的 MFT 条目 |
moddump | 将内核驱动程序转储到可执行文件示例 |
modscan | 内核池扫描程序modules |
modules | 打印加载模块的列表 |
multiscan | 一次性扫描各种对象 |
mutantscan | 互斥对象的池扫描器 |
netscan | 扫描 Vista(或更高版本)图像的连接和套接字 |
notepad | 列出当前显示的记事本文本 |
objtypescan | 扫描 Windows 对象类型对象 |
patcher | 根据页面扫描修补内存 |
poolpeek | 可配置池扫描器插件 |
pooltracker | 显示池标记使用摘要 |
printkey | 打印注册表项及其子项和值 |
privs | 显示进程权限 |
procdump | 将进程转储到可执行文件示例 |
pslist | 按照 EPROCESS 列表打印所有正在运行的进程 |
psscan | 进程对象的池扫描程序 |
pstree | 将进程列表打印为树 |
psxview | 使用各种进程列表查找隐藏进程 |
qemuinfo | 转储 Qemu 信息 |
raw2dmp | 将物理内存样本转换为 windbg 崩溃转储 |
screenshot | 基于 GDI windows 保存伪屏幕截图 |
servicediff | 列出 Windows 服务(类似于 Plugx) |
sessions | 列出关于 _MM_SESSION_SPACE (用户登录会话)的详细信息 |
shellbags | 打印 ShellBags 信息 |
shimcache | 解析应用程序兼容性 Shim 缓存注册表项 |
shutdowntime | 从注册表中打印机器的 ShutdownTime |
sockets | 打印打开的套接字列表 |
sockscan | 用于 tcp 套接字对象的池扫描器 |
ssdt | 显示 SSDT 条目 |
strings | 将物理偏移量与虚拟地址匹配(可能需要一段时间,非常冗长) |
svcscan | 扫描 Windows 服务 |
symlinkscan | 用于符号链接对象的池扫描器 |
thrdscan | 线程对象的池扫描器 |
threads | 调查 _ETHREAD 和 _KTHREAD |
timeliner | 从内存计时器中的各种工件创建时间线 |
timers | 打印内核计时器和相关的模块 DPC |
truecryptmaster | 恢复 TrueCrypt 7.1a 主密钥 |
truecryptpassphrase | TrueCrypt 缓存密码查找器 |
truecryptsummary | TrueCrypt 摘要 |
unloadedmodules | 打印未加载模块的列表 |
userassist | 打印 USER 注册表键值和信息 |
userhandles | 转出 USER 句柄表 |
vaddump | 转储 VAD 信息到一个文件中 |
vadinfo | 转储 VAD 信息 |
vadtree | 遍历 VAD 树并以树格式显示 |
vadwalk | 遍历 VAD 树 |
vboxinfo | 转储 virtualbox 信息 |
verinfo | 从 PE 映像中打印版本信息 |
vmwareinfo | 转储 VMware VMSS/VMSN 信息 |
volshell | 内存映像中的 Shell |
win10cookie | 查找 Windows 10 窗口的 ObHeaderCookie 值 |
windows | 打印桌面 Windows(详细详细信息) |
wintree | 打印 Z-Order 桌面Windows 树 |
wndscan | 用于窗口站的池扫描程序 |
yarascan | 使用 Yara 签名扫描进程或内核内存 |
实际上所有 volatility2 的功能都是由插件实现的,我们可以自主安装他人所写的插件或者是自己写插件脚本。
无论是哪种,只需要将插件脚本拖入 plugins/
文件下即可(另一个可能的路径为 volatility/plugins/
),且支持文件夹分类(实际上只要在该目录下的所有文件都会遍历加载)。
mimikatz 是一个可以从内存中提取明文密码、哈希、PIN 码和 kerberos 票证的软件,在 volatility2 中有专门的插件替代了繁琐的操作。
如果不使用插件,我们需要首先从内存镜像中转储 lsass.exe
的内存文件为 lsass.dmp
后,用 mimikatz 加载并读取数据。
我们可以在 https://github.com/RealityNet/hotoloti/tree/master/volatility 中获取 mimikatz.py
,将其添加到 plugins/
文件夹下即可使用。
使用方式:
python2 vol.py -f file.raw mimikatz
一键提取出目标内存镜像中的用户名和密码。
zsteg xxx.png(仅图片) 如果zsteg输出类似这样的东西:
extradata:0 .. file: Zip archive data, at least v2.0 to extract, compression method=AES Encrypted
说明这里有文件可以提取。记住开始的字符串,使用以下命令提取:
steghide有时需要密码,可以用stegseek破解。
LSB隐写工具,音频图片都可以。
Twitter Secret Messages。这个工具的密文很好辨认,例如I hate this flying bⅰrd app... Peοple say one thіngbutyou always gοtta read between thelines tο interpret them right ://
。推特/蓝鸟是出题人的提示关键词。
mp3stego.mp3带密码的隐写工具。
base100。将文字与emoji互相转换的编码工具。
videostego
视频文件的LSB隐写工具。若没有后续改动的话,被隐写后的视频的exif的Writer栏为JavDomGom
OpenStego
discord events
Professor's Inheritance
Aqua Gaze
bkcrack -L archive.zip
其中-C表示密文(cipher),-p为明文(plaintext),明文和密文中明文的部分对应。
phpbkcrack -C res.zip -c flag.txt -P ohh.zip -p flag.txt
假设ZIP文档名为encrypted.zip,条目cipher为密文,plain.zip中包含条目plain为已知明文,即可运行下列命令:
bkcrack -C encrypted.zip -c cipher -P plain.zip -p plain
从文件加载数据
假设文件cipherfile中包含密文,plainfile包含已知明文,即可运行下列命令:
bkcrack -c cipherfile -p plainfile
偏移量
如果明文对应于密文开头以外的部分,则可以指定偏移量。如果明文包含加密Header的一部分,则该值可能为负值:
bkcrack -c cipherfile -p plainfile -o offset
稀疏明文
如果你知道很少的连续明文(在8到11个字节之间),但知道一些其他已知偏移量的字节,则可以提供这些信息以达到总共12个已知字节的要求。为此,请使用-x参数,后跟偏移量和十六进制字节:
bkcrack -c cipherfile -p plainfile -x 25 4b4f -x 30 21
线程数量
如果bkcrack是在启用并行模式的情况下构建的,则可以通过环境变量OMP_NUM_threads设置使用的线程数。
解密器
如果攻击成功,可以使用下列命令保存解密数据以及相关的密文:
bkcrack -c cipherfile -p plainfile -d decipheredfile
如果从之前的攻击获取到了密钥,则可以使用下列命令继续解密数据:
bkcrack -c cipherfile -k 12345678 23456789 34567890 -d decipheredfile
解压缩
python3 tools/inflate.py < decipheredfile > decompressedfile
解锁加密文档
bkcrack -C encrypted.zip -k 12345678 23456789 34567890 -U unlocked.zip password
恢复密码
根据给定的内部密钥,bkcrack还可以尝试找出原始密码:
bkcrack -k 1ded830c 24454157 7213b8c5 -r 10 ?p
我们还可以指定最小的密码长度:
bkcrack -k 18f285c6 881f2169 b35d661d -r 11..13 ?p
例如
phpbkcrack常用参数:
-c 提取的密文部分
-p 提取的明文部分
-x 压缩包内目标文件的偏移地址 部分已知明文值
-C 加密压缩包
-o offset -p参数指定的明文在压缩包内目标文件的偏移量
采用8+4的方式提取部分已知明文来进行攻击测试,
flag{16e371fa-0555-47fc-b343-74f6754f6c01}
我们利用以下这部分明文,来进行攻击破解:
*lag{16e374f6
> \#准备已知明文
> echo -n "lag{16e3" > plain1.txt //连续的8明文
> echo -n "74f6" | xxd //额外明文的十六进制格式,37346636
>
> \#攻击
> bkcrack -C flag_360.zip -c flag.txt -p plain1.txt -o 1 -x 29 37346636
>
> \#由于时间较长,为防止终端终端导致破解中断,可以加点小技巧
> bkcrack -C flag_360.zip -c flag.txt -p plain1.txt -o 1 -x 29 37346636 > 1.log& //后台运行,结果存入1.log
>
> //加上time参数方便计算爆破时间
> time bkcrack -C flag_360.zip -c flag.txt -p plain1.txt -o 1 -x 29 37346636 > 1.log&
>
> //查看爆破进度
> tail -f 1.log
php这里是jpg图片,利用jpg的文件头:FFD8FFE000104A4649460001
使用命令:
echo -n "FFD8FFE000104A4649460001" | xxd -r -ps >key
参数解释:
n: 不换行输出
xxd: 用于用二进制或十六进制显示文件的内容
r: 把xxd的十六进制输出内容转换回原文件的二进制内容。
p: 以 postscript的连续十六进制转储输出,这也叫做纯十六进制转储。
s: 从infile的绝对或者相对偏移量开始. + 表示相对于标 输入当前的位置 (如果不标准输入就没有意义了). – 表示从档桉末尾 (如果和 + 连用: 从标准输入当前位置) 向前数一些字符, 从那个地方开始. 如果没有 -s 选项, xxd 从当前位置开始.
添加新的Java环境(需要绝对路径)
jenv add <name> <path>
示例:jenv add jdk15 D:\Programme\Java\jdk-15.0.1
更改当前会话的Java版本
jenv使用<name>
示例:jenv use jdk15
用于脚本的环境变量:
-PowerShell:$ENV:JENVUSE="jdk17"
-CMD/批次:set "JENVUSE=jdk17"
清除当前会话的java版本
jenv使用删除
示例:jenv use remove
用于脚本的环境变量:
-PowerShell:$ENV:JENVUSE=$null
-CMD/批次:set "JENVUSE="
全局更改Java版本
jenv更改<name>
示例:jenv change jdk15
始终使用此文件夹中的此java版本
jenv本地<name>
示例:jenv local jdk15
清除此文件夹的java版本
jenv本地删除
示例:jenv local remove
列出所有Java环境
Jenv列表
示例:jenv list
从JEnv列表中删除现有JDK
jenv删除<name>
示例:jenv remove jdk15
允许使用java目录中的javac、javaw或其他可执行文件
jenv链接<Executable name>
示例:jenv link javac
恢复jenv并自动恢复您选择的Java版本
jenv卸载<name>
示例:jenv uninstall jdk17
自动搜索要添加的Java版本
jenv autoscan [--yes|-y] ?<path>?
示例:jenv autoscan "C:\Program Files\Java"
示例:jenv autoscan
//将搜索整个系统示例:jenv autoscan -y "C:\Program Files\Java"
//将接受默认值
ubuntu
phpsudo update-alternatives --config java
powershellGet-Content .\requirements.txt | ForEach-Object { if ($_ -notmatch "#") { python3 -m pip install $_ } }
php while read requirement; do
python3 -m pip install "$requirement" || true
done < requirements.txt
pyside
php$ python3.10 -m pip uninstall pyside6 pyside6-addons pyside6-essentials shiboken6
$ python3.10 -m pip cache purge
$ python3.10 -m pip install pyside6
使用 update-alternatives 工具来管理不同版本的 Python:
php sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 2
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 3
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 4
sudo update-alternatives --config python3
conda activate sage-env
.
- 除换行符以外的所有字符。
^
- 字符串开头。
$
- 字符串结尾。
\d
,\w
,\s
- 匹配数字、字符、空格。
\D
,\W
,\S
- 匹配非数字、非字符、非空格。
[abc]
- 匹配 a、b 或 c 中的一个字母。
[a-z]
- 匹配 a 到 z 中的一个字母。
[^abc]
- 匹配除了 a、b 或 c 中的其他字母。
aa|bb
- 匹配 aa 或 bb。
?
- 0 次或 1 次匹配。
*
- 匹配 0 次或多次。
+
- 匹配 1 次或多次。
{\*n\*}
- 匹配 n次。
{\*n\*,}
- 匹配 n次以上。
{\*m\*,\*n\*}
- 最少 m 次,最多 n 次匹配。
(
*expr*)
- 捕获 expr 子模式,以 \1
使用它。
(?:
*expr*)
- 忽略捕获的子模式。
(?=
*expr*)
- 正向预查模式 expr。
(?!
*expr*)
- 负向预查模式 expr。
1 2 3 4 5 6 7 8 9 0
Q W E R T Y U I O P
A S D F G H J K L
Z X C V B N M
根据上表可以得出,Q是第1 下面的第一个,A是第2下面的第一个……以此类推,每一个字母都会有其对应的数字。
例如:
A 21
B 35
第一个数字代表横向(X坐标)的位置,第二个数字代表纵向(Y坐标)的位置。
但是也有这种表示 (坐标对换)
例如:
A 12
B 53
C 33
A:坐标(1,1) B:坐标(2,1) C:坐标(3,1) D:坐标(4,1) E:坐标(5,1) F:坐标(6,1) G:坐标(7,1) H:坐标(8,1) I:坐标(9,1) J:坐标(10,1) K:坐标(11,1) L:坐标(12,1) M:坐标(13,1) N:坐标(14,1) O:坐标(15,1) P:坐标(16,1) Q:坐标(17,1) R:坐标(18,1) S:坐标(19,1) T:坐标(20,1) U:坐标(21,1) V:坐标(22,1) W:坐标(23,1) X:坐标(24,1) Y:坐标(25,1) Z:坐标(26,1)
本文作者:chi11i
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!