일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 드림핵
- XSS Game
- PHP 웹페이지 만들기
- 기계학습
- 생활코딩
- C언어
- c++
- hackerrank
- HTML
- 숙명여자대학교 정보보안동아리
- siss
- 풀이
- 웹페이지 만들기
- 백준
- WarGame
- CSS
- 숙명여자대학교 정보보안 동아리
- lob
- hackctf
- SWEA
- BOJ
- Python
- 파이썬
- c
- 머신러닝
- 자료구조 복습
- The Loard of BOF
- BOJ Python
- Sookmyung Information Security Study
- Javascript
- Today
- Total
목록WarGame (8)
혜랑's STORY
문제를 풀기 위해 xshell로 로그인 해 주었다. ID : troll / PW : aspirin 가장 먼저 존재하는 파일들을 알아보기 위해 ls -l 명령어를 실행하였다. vampire.c 파일의 내용을 확인해 보았다. 이번엔 46번째 자리의 값이 "\xff"가 되면 안되는 것 같다. 즉, Return address에 그보다 작은 주소를 주려면 엄청 큰 값을 넣으면 될 것 같다. 일단 vampire 파일을 복사한 뒤 gdb를 사용하여 main 함수의 어셈블리 코드를 살펴보자. gdb를 통해 스택 상황을 아래와 같다고 생각해 볼 수 있다. buffer SFP RET(return) 40 4 4 argv[2]의 주소를 찾기 위해 strcpy 함수가 끝나는 지점에 bp를 걸고 실행 인자로 "A"*44 + "\..
문제를 풀기 위해 xshell로 로그인 해 주었다. ID : orge / PW : timewalker 가장 먼저 존재하는 파일들을 알아보기 위해 ls -l 명령어를 실행하였다. troll.c 파일의 내용을 확인해 보았다. Lv.7에서는 argc가 2 이상이 되어도 괜찮았지만, 이번 문제에서는 argc가 꼭 2개이어야 한다. 즉, argv[1]의 RET이 agrv[2]를 가리키도록 하는 방법을 사용하지 못한다는 것이다. 환경변수도 초기화하고.. 스택 공간도 초기화하고.. 이제 쉘코드가 들어갈 수 있는 공간은 초기화하지 않는 argv[0]만 남게 되었다. 파일명을 변경하는 방법을 찾아보았다. 파일명 변경 : rename 변경전파일명 변경후파일면 대상파일 다음과 같이 코드를 구성해보았다. 이때 주의해야 할 점..
문제를 풀기 위해 xshell로 로그인 해 주었다. ID : darkelf / PW : kernel crashed 가장 먼저 존재하는 파일들을 알아보기 위해 ls -l 명령어를 실행하였다. orge.c 파일의 내용을 확인해 보자. 이번 문제는 Lv.6에서 argv[0]의 길이를 검사하는 코드가 추가되었다. argv[0]의 길이를 77로 맞춰주기 위해 '/'를 많이 넣어 실행시켜 보았다. stack is still youur friend. 가 출력되는 것으로 보아 argv[0]의 길이 검사가 통과된 것 같다. 6단계 문제를 풀었던 것 처럼 argv[1]이 argv[2]를 가리키도록 하여 공격해보자. `python -c 'print "." + "/"*70 + "cporge"'` `python -c 'prin..
문제를 풀기 위해 xshell로 로그인 해 주었다. ID : wolfman / PW : love eyuna 가장 먼저 존재하는 파일들을 알아보기 위해 ls -l 명령어를 실행하였다. darkelf.c 파일의 내용을 확인해 보자. Lv.5에서 등장한 egghunter와 buffer hunter에 argv[1]의 길이를 검사하는 코드가 추가된 것을 볼 수 있다. 따라서 argv[2]에 쉘코드를 넣고 argv[1]에 RET이 argv[2]를 가리키도록 하여 공격을 해보려 한다. 일단 darkelf 파일을 복사한 뒤 gdb를 사용하여 main 함수의 어셈블리 코드를 살펴보자. gdb를 통해 스택 상황을 아래와 같다고 생각해 볼 수 있다. buffer SFP RET(return) 40 4 4 가장 먼저 argv[..
문제를 풀기 위해 xshell로 로그인 해 주었다. ID : goblin / PW : hackers proof 역시 가장 먼저 존재하는 파일들을 알아보기 위해 ls -l 명령어를 실행하였다. orc.c 파일의 내용을 확인해 보자. 앞의 문제에선 보지 못하였던 "egghunter"라는 주석과 함께 "memset()" 이라는 함수가 새롭게 등장한 것을 알 수 있다. 여기서 egghunter는 전역 선언된 environ을 memset()을 사용하여 초기화 한다. 즉, 환경 변수에 SHELLCODE를 넣고 취약한 함수의 return address를 환경 변수의 주소로 바꾸어도, egghunter에 의해 환경 변수가 초기화되기 때문에 환경 변수를 이용할 수 없게 된다. 또한 if문을 통해 argv[1][47]가 ..
문제를 풀기 위해 xshell에 로그인 해 주었다. ID : cobolt / PW : hacking exposed 가장 먼저 존재하는 파일을 알아보기 위해 ls -l 명령어를 실행하였다. goblin.c 파일의 내용을 확인해 보자. Lv.2와 같이 버퍼에 16 바이트를 할당하고 있어 쉘코드를 담기엔 충분하지 않다. 앞선 문제와 다른 점은 strcpy가 아닌 gets 함수를 사용한다는 점이다. 그러나 gets 함수 또한 문자열의 길이를 검사하지 않는 취약점이 존재한다. 앞에서 실행인자에 쉘코드를 전달하는 방법을 사용했기 때문에 이번엔 환경변수를 선언하여 문제를 해결하려 한다. 환경변수를 선언하는 방법은 다음과 같다. export SHELLCODE=`python -c 'print "\x90"*100 + "\..
문제를 풀기 위해 xshell에서 로그인 해 주었다. Id : grmlin / Pw : hello bof world 가장 먼저 존재하는 파일을 알아보기 위해 ls-l 명령어를 실행하였다. 그 결과 cobolt.c 파일과 cobolt라는 파일이 있는 것을 확인할 수 있다. cobolt 파일은 colbolt.c 파일을 컴파일하여 만들어진 파일인 것 같다. cobolt.c 파일을 열어 내용을 확인해 보았다. Lv.1 문제와 같이 strcpy 함수를 사용하여 문자열의 길이를 검사하지 않는다는 취약점이 있었다. 그러나 이번 문제에서는 buffer에 16바이트를 할당하였기 때문에 버퍼에 공격 코드를 담기엔 충분하지 못하다. 일단 권한 문제를 해결하기 위해 cp 명령어를 통해 복사를 해주었고, 그 결과 gremlin..
문제를 풀기 위해 xshell에서 gate로 로그인 해 주었다. ID : gate PW : gate 가장 먼저 존재하는 파일을 알아 보기 위해 ls -l 명령어를 실행하였다. 그 결과 gremlin.c 파일과 gremlin이라는 파일이 있는 것을 확인할 수 있다. gremlin 파일은 gremlin.c 파일을 컴파일하여 만들어진 파일 같다. gremlin.c 파일을 열어 내용을 확인해 보도록 하자. 위 코드를 살펴본 결과 256 바이트 버퍼 buffer를 스택에 할당한 후, strcpy 함수를 통해 argv[1]의 내용을 buffer에 복사하게 된다. strcpy 함수가 buffer를 복사할 때, buffer의 크기인 256 바이트가 넘는 문자열을 전달한다면 길이 제한 없이 문자열이 복사되어 스택 버퍼 ..