일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 조건문
- IF문
- python
- property
- blind sql injection
- 객체
- 자바스크립트
- 백준 알고리즘
- 포인터
- htmlspecialchars
- sql injection
- Pwndbg
- suninatas 풀이
- document
- 백준 파이썬
- 함수
- 김성엽 대표님
- github
- jQuery
- xss game 풀이
- 메소드
- 파이썬
- 배열
- lord of sql injection
- xss game
- object
- element 조회
- 사칙연산
- burp suite
- window
Archives
- Today
- Total
power-girl0-0
[pwnable] bof 풀이 본문
728x90
안녕하세요. 간결한 풀이입니다. (๑•̀ㅂ•́)و✧
1. 문제
문제에 접속하면, 아래와 같이 코드와 바이너리를 다운로드 할 수 있는 링크가 주어진다.
코드는 아래와 같다.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(int key){
char overflowme[32];
printf("overflow me : ");
gets(overflowme); // smash me!
if(key == 0xcafebabe){
system("/bin/sh");
}
else{
printf("Nah..\n");
}
}
int main(int argc, char* argv[]){
func(0xdeadbeef);
return 0;
}
2. 풀이
func함수 코드를 살펴보면, key값이 0xcafebabe일 경우 shell 획득이 가능한 것을 알 수 있다.
gdb를 통해, stack크기 + dummy값을 찾아야 한다.
아래 두개의 코드만 확인하면 실제로 할당된 stack의 크기를 알 수 있다.
① lea eax, [ebp-0x2c] => gets로 사용자에게 입력받아온 값을 ebp-0x2c에 저장함. ② cmp DWORD PTR [ebp+0x8], 0xcafebabe => main에서 받아온 인자값(ebp+0x8)과 0xcafebabe를 비교해주는 코드 |
즉, ebp+0x8위치를 0xcafebabe값으로 변경하면 된다.
따라서, 할당된 크기는 0x2c+0x8한 값으로 52byte가 할당되었음을 알 수 있다.
찾은 stack의 크기만큼 임의의 쓰레기 값으로 채우고, 존재하는 key값(ebp+0x8)을
0xcafebabe로 덮어버리면 shell을 획득할 수 있다.
3. flag 획득
728x90
'War game > pwnable.kr' 카테고리의 다른 글
[pwnable] flag 풀이 (0) | 2022.02.12 |
---|---|
[pwnable] collision 풀이 (0) | 2022.02.09 |
[pwnable] input 풀이 (0) | 2022.02.07 |
[pwnable] asm 풀이 (0) | 2022.01.21 |
[pwnable] fd 풀이 (0) | 2021.12.27 |
Comments