일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Spring MVC
- webhacking.kr
- 해킹
- hacking
- OS
- Operating System
- LOB
- stack overflow
- 워게임
- Spring
- Shell code
- 정보보안기사
- BOF
- 웹해킹
- Pwnable.kr
- 정보처리기사 실기
- PWN
- webhacking
- 정보보안기사 실기
- system hacking
- 운영체제
- 네트워크
- Lord of BOF
- Payload
- pwnable
- Spring Framework
- wargame
- Buffer Overflow
- SQL
- System
- Today
- Total
DongDD's IT
[pwnable.kr] cmd1 문제 풀이 본문
[pwnable.kr] cmd1 문제 풀이
문제를 보니 환경변수가 무엇인지 물어보는 걸로 보아 환경변수를 이용하는 문제 같았다.
다른 문제와 같이 flag 파일, cmd1 실행 파일, cmd1.c 소스코드 세가지 파일이 있었다.
소스 코드를 보고 파악하기로 했다.
/fuckyouverymuch라는 폴더를 환경변수에 넣어주고 filter라는 함수에 argv[1]을 넘겨주고 system 함수의 인자로 argv[1] 를 넣어주는 구조로 되어있었다.
처음에 코드를 봤을 때 strstr() 함수에 대해서 알지 못해서 따로 찾아보았다.
strstr(char *a, char *b) 함수는 a라는 string에 b의 string이 포함되어 있으면 해당 패턴이 나타나는 위치값을 return 해주고 없다면 0을 return 해주는 구조로 되어있었다.
즉, 저 세 line은 flag, sh, tmp 라는 문자가 포함되어 있지 않으면 결론적으로 r이 값이 0이 되어 return 해준다.
문제해결하기 위해서는 argv[1]에 저 3 단어가 포함되지 않고 system함수를 통해 flag를 얻어내야했다.
여러 가지 생각을 해보았지만 잘 떠올르지 않아 많은 시도를 해보았다.
환경 변수를 이용하기 위해 저 위치에 디렉토리가 있는지 찾아 보았다.
존재하지 않았고 혹시 system 함수라면 생성할 수 있지 않을 까 해서 시도해보았지만 실패했다.
생각을 해보았지만 방법이 떠오르지 않았다.
그래서 그냥 단순히 filtering이라 생각하고 이것을 우회할 수 없을까 해서 시도를 해보았다.
NULL문자를 넣어 우회해볼까 했지만 실패했다.
그러다가 우연히 filtering을 우회하여 통과하긴 했는데 문제와 별개로 환경변수를 사용하지 않아
통과하긴 했지만, 이것이 정석 풀이인지는 잘 모르겠다.
************** Answer & Flag **************
'Wargame > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] flag (0) | 2018.03.09 |
---|---|
[pwnable.kr] bof (0) | 2018.03.07 |
[pwnable.kr] collision (0) | 2018.03.02 |
[pwnable.kr] fd (0) | 2018.03.01 |
[pwnable.kr] lotto 문제 풀이 (0) | 2017.08.27 |