일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SuNiNaTaS #mandu-mandu #AjouUniv #forensics
- 코딩도장
- Whois #정보보안교육 #webhacking.kr
- Whois #정보보안교육 #AjouUniv #Pwnable
- systemhacking
- HackCTF
- Whois #AjouUniv #정보보안교육 #Pwnable
- AjouUniv #Whois #정보보안교육 #Pwnable
- 스케줄링
- Dreamhack
- AjouUniv #Whois #Reversing
- N0NamedWargame #mandu-mandu #forensics #길에서주어온만두
- python
- 운영체제
- N0Named
- Whois #정보보안교육 #Ajou
- Pwnable
- 아주대학교
- webhacking
- Memory Virtualization
- Allocation Starategy
- AjouUniv #SuniNatas #Web
- AjouUniv #Whois #정보보안교육
- 아주대학교 #Whois #정보보안교육 #4주차
- ftz
- 사이버보안학과
- N0NamedWargame #mandu-mandu #forensics #left_side_B
- N0NamedWargame #AjouUniv #mandu-mandu #forensics
- hackerschool
- Variable Partition
- Today
- Total
chipkkang9's story
[FTZ HackerSchool] Level 3 write-up 본문
level3 접속
level3 문제에 접속해보도록 하자.
level3 / can you fly? 이다.
level3 문제해결
마찬가지로 접속해보니 hint 파일이 있었다. 한 번 열어보자.
이번엔 힌트가 웬 코드로 주어진다.
코드를 분석해보자.
우선 첫 세 줄을 보니, C언어 파일임을 짐작해볼 수 있다.
int main(int argc, char **argv){
char cmd[100];
첫 줄은, main 함수로 argc와 argv 인자를 받는다. 그 다음, cmd 인자에 100짜리 길이인 문자열을 선언한다.
argc, argv란?
main 함수의 매개변수를 의미한다. 다른 함수의 경우, 함수를 실행시킬 때 소괄호() 안에 매개변수를 넘겨준다.
main 함수 또한 마찬가지인데, argc, argv 두 가지로 이루어져 있다.
1) int argc
이것은 main 함수에 전달되는 정보(인자)의 개수를 의미한다.
2) char** argv
이것은 메인함수에 전달되는 실질적인 정보로, 문자의 배열을 의미한다. 첫 번째 문자열은 프로그램의 실행경로로 항상 고정되어있다.
if( argc != 2 ){
printf( "Auto Digger Version 0.9\n" );
printf( "Usage : %s host\n", argv[0] );
exit(0);
}
if문은 argc 즉, main함수로 전달된 인자의 개수가 2가 아닐 경우에 if문 안에 있는 내용을 실행한다.
그런데, 이를 실행하는 동시에 level4의 bash를 얻을 수 있는 길은 없는 것 같아서 argc 값은 항상 2로 고정되어야 하는 것을 알 수 있었다.
(if문을 우회하기 위해)
그러면 어떤 값을 넣어주어야 할까? 뒤의 코드를 따라가보면 알 수 있을 것 같다.
strcpy( cmd, "dig @" );
strcat( cmd, argv[1] );
strcat( cmd, " version.bind chaos txt" );
system( cmd );
어떤 코드인지 파악은 되지만, 어떤 의도로 이 코드를 넣어놓은지는 파악되지 않는다.
우선 코드의 역할은, cmd 변수에 dig @를 넣은 후, argv[1] 값을 이어붙인 후에 version.bind chaos txt를 이어붙인다.
그 후 cmd 문자열을 system 명령어로 실행시킨다.
뒤를 더 읽어보자. 추가힌트가 있다.
more hints.
- 동시에 여러 명령어를 사용하려면?
- 문자열 형태로 명령어를 전달하려면?
힌트로 두 가지가 주어졌다. 그리 어려운 고민들은 아니라, 하나씩 답을 해보자.
1) 동시에 여러 명령어를 사용하려면?
Command Injection이 생각나는데, ";, &&, ||"와 같은 특수문자를 사용해주면 동시에 여러 명령어를 사용할 수 있다.
2) 문자열 형태로 명령어를 전달하려면?
간단하게 double quotes(")를 사용하면 문자열 형태로 전달할 수 있다. (물론, single quote, backtik 또한 가능하다.)
이를 종합해보면, argv[1]에 전달되는 값을 문자열의 형태로, 여러 명령어(my-pass)를 실행할 수 있는 값으로 넣어주면 될 듯하다.
결국 넣어줄 값은, ";my-pass" 면 될 것 같다.
그 전에, level4의 권한을 가진 파일을 열어보도록 하겠다.
이전에 썼던 명령어로 같이 level4 특수 권한을 가진 파일을 찾아보자.
그러면 bin 폴더에 autobig을 실행해서 위에서 생각해 둔 명령어를 실행해보자.
level4 Password 획득
level4의 password는 "suck my brain"이다.
'Wargame > FTZ HackerSchool' 카테고리의 다른 글
[FTZ HackerSchool] Level 2 write-up (0) | 2022.08.13 |
---|---|
[FTZ HackerSchool] Level 1 write-up (0) | 2022.08.13 |
[FTZ Hackerschool] 로컬 환경 구축하기 (0) | 2022.08.13 |