SCTF 2014 初赛Writeup
今年来和小伙伴们参加了BCTF,ALICTF,HCTF和SCTF,前几次基本上都是准备不充分,很多东西看到题目才去找资源,而且好些题过后看了Writeup才发现和真正解法擦肩而过。这次SCTF终于有所贡献,撸出了两题,其中有一题差一点就是FirstBlood。
以下是题解:
Misc300
用wireshark打开提供的pcap文件,大概可以看出这是一个smb认证过程,先设置过滤器,过滤出smb流量。从Negotiate Protocol Response报文可以看到smb版本和challenge:
从Session Setup AndX Request报文可以看到syclover用户所属的域以及ANSI Password和Unicode Password:
ANSI Password的生成过程是在syclover用户长度为16字节的LM Hash后补充5字节的0x00,得到21字节的Hash,再分成3组,每组7字节。将每组的7字节经过str_to_key函数处理成8字节的DES Key,对服务器返回的challenge进行标准DES加密,得到3组8字节的密文,最后将加密后的密文拼接在一起。Unicode Password生成过程类似,只不过DES密钥是经过NTLM Hash处理后得到的。
而根据LM Hash的生成过程,LM Hash的前8字节是将用户明文密码的前7位转为大写,再经过str_to_ket和标准DES加密处理得到的。
综上,ANSI Password的前8字节与用户明文密码的前7位的大写形式以及服务器响应的challenge有关。本例中,challenge为0x1122334455667788,因此可以通过challenge为0x1122334455667788的HALFLM彩虹表来查出syclover用户明文密码的前7位大写形式。
跑出明文密码前7位为NETLMIS后,再用msf tools目录下的脚本halflm_second.rb来穷举第二部分密码。
得到明文密码的大写形式后,用netntlm.pl脚本来根据NTLM Hash调整大小写。旧版本的BackTrack linux自带netntlm.pl脚本,新版本的kali linux需自行下载该脚本。
至此,得到syclover用户的明文密码,故flag为 SCTF{NetLMis666}
Misc400a
用winshark打开提供的pcap文件,大致看了一下,发现一个config.php文件的POST动作,故设置过滤器,过滤出https流量。
点开一个POST包,发现eval、base64等关键字,初步判断config.php为一句话客户端
分别对各个POST包的数据进行base64解码,得到关键部分操作:
1 | cd /d “c:\inetpub\wwwroot\” |
并从17729号报文中发现请求wwwroot.rar的http响应:
直接保存二进制流到rar文件,winhex删掉https头部和php一句话客户端附加在头部的->|3字节,即可用密码JJBoom解压。
用winhex打开解压得到的1.gif,文件头部有MDMP文件头,判断为minidump文件,用windbg打开,使用 | 命令得到该minidump的进程名:
得知为lsass.exe进程的dump,接下来直接用mimikatz读取密码:
mimikatz.exe log “sekurlsa::minidump funnydata.mdmp” sekurlsa::logonPasswords exit
打开日志文件得到密码,注意密码后面有5个空格(真是坑,看到
故本题flag为 SCTF{<TAB><SPACE> }
这PS:这题有个小插曲,我的mimikatz不知道干嘛大小变成0k了,还以为环境问题,找了台win7x64的机子来弄,还是不行。就这折腾一下,别人做出来了,哭晕在厕所。