论文进度比较紧,最近刷题太少了。
1.Bugku刷题
多种方法解决
给的exe程序用exeinfope扫一下。
base64编码的,打开notepad++发现是个图片用base64编码。
还原之后是个二维码,在线扫一下就出flag。
闪的好快
gif中包含多个二维码,需要一个一个扫过去。
分解gif可以用StegSolve自带的Frame Browser模块。
FileStoragedat
找个DAT解密工具即可。
where is flag 番外篇
key.rar中有解压密码,具体做法是用13个原txt文件大小,减去压缩后文件大小,再当做ascll码进行转码,得到key,然后从出师表.rar中解压出一个图片。
用notepad++打开图片,可以搜索到含有flag的字符串,但这并不是flag。
flag in here {LjFWBuxFNTzEWv6t2NfxjNFSH1sQEwBt5wTTLD1fJ}
相比 Base_64,Base_58 不使用数字 “0“,字母大写“O“,字母大写 “I“,和字母小写 “l“,以及 “+“ 和 “/“ 符号,比Base64共减少6个字符,故称着Base58。
对括号内的字符使用base58解码即可。
come_game
打开游戏随便玩一下,然后esc推出。会生成两个文件,使用notapad++进入save文件修改关卡数位即可。
白哥的鸽子
使用winhex打开,发现最后有一串疑似flag的字符,但是顺序是乱的。
fg2ivyo}l{2s3_o@aw__rcl@
可以看出,明文字符没有改变,只是顺序被打乱了,那就应该是ctf中经常会出现的栅栏密码。
使用bugku在线工具里的栅栏密码进行枚举解密。
解密结果中第二个最像flag,尝试了一下,去掉最后的两个@就是正确的falg。
linux
既然题目叫linux,那就放到kali系统里做吧。
解压压缩包,然后在命令行中cat flag,就能看到了。
直接打开文件查看是不行的,因为里面充斥着大量的不可见字符。
简单套娃
使用winhex查看,文件头中有photoshop修改过的标识,所以此题应该是在图片中做文章。使用binwalk可以知道图片中还另外包含一个图片,但是不能直接分离出来。所以可以想到此图片可能包含多个图层。
使用winhex打开,搜索文件头,可以搜到两个,从第二个文件头到末尾复制一下,保存为另一个jpg文件,使用Stegsolve的img combine功能即可。
有点费眼睛。
split_all
文件头残缺,010会提示到第35个字节是错误的,看到后边的"89a"基本可以确定是gif文件,所以将头补全为"GIF89a"。
然后再往下看,可以看到许多块图片,所以要将gif分离。百度搜一个在线分离器即可。
不过很费眼睛。。。
放松一下吧
先过第一关,然后改存档到最后一关,得到解压密码。
happy_i_wanna
base的老大不就是base100么,直接解码。
接下来就是这个图片的问题。需要使用到F5隐写工具F5-steganography。
在安装好F5-steganography的kali中使用命令
java Extract -p 66666666 /root/桌面/你需要刷新.jpg
即可在output文件中得到flag。
隐写3
明显图片高度有问题,使用tweakpng打开,修改高度即可。
这里推荐一下T佬的脚本
//python3-还原图片真实高度
import binascii
import struct
import sys
file = input("图片地址:")
fr = open(file,'rb').read()
data: bytearray = bytearray(fr[0x0c:0x1d])
crc32key = eval('0x'+str(binascii.b2a_hex(fr[0x1d:0x21]))[2:-1])
#原来的代码: crc32key = eval(str(fr[29:33]).replace('\\x','').replace("1b'",'0x').replace("'",''))
n = 4095
for w in range(n):
width = bytearray(struct.pack('>i', w))
for h in range(n):
height = bytearray(struct.pack('>i', h))
for x in range(4):
data[x+4] = width[x]
data[x+8] = height[x]
crc32result = binascii.crc32(data) & 0xffffffff
if crc32result == crc32key:
print(width,height)
newpic = bytearray(fr)
for x in range(4):
newpic[x+16] = width[x]
newpic[x+20] = height[x]
fw = open(file+'.png','wb')
fw.write(newpic)
fw.close
file.close()
T佬的ctf导航
zip伪加密
对压缩包的头部作出修改即可。
No one knows regex better than me
正则表达式这块我确实功底比较弱啊。
<?php
error_reporting(0);
$zero=$_REQUEST['zero'];
$first=$_REQUEST['first'];
$second=$zero.$first;
if(preg_match_all("/Yeedo|wants|a|girl|friend|or|a|flag/i",$second)){
//$second中要匹配到"Yeedo|wants|a|girl|friend|or|a|flag"中的字符
$key=$second;
if(preg_match("/\.\.|flag/",$key)){
//$key中不能匹配到..或flag
die("Noooood hacker!");
}else{
$third=$first;
if(preg_match("/\\|\056\160\150\x70/i",$third)){
//$third中要匹配到/\|\056\160\150\x70/i
$end=substr($third,5);
highlight_file(base64_decode($zero).$end);//maybe flag in flag.php
}
}
}
else{
highlight_file(__FILE__);
}
构造payload为
?zero=ZmxhZw==&first=oror|.php