728x90

포너블 14번 cmd1 문제를 풀어볼 것이다.

리눅스에서 PATH 환경이 무엇인지 물어보고 있다.
일단 아래 서버로 접속을 시도하였다.

ls 명령어를 통해 cmd1, cmd1.c, flag 파일을 확인하였다.
cmd1을 실행해보니 Segmentation fault로 실행이 되지 않았다.

cmd1의 소스코드를 살펴보았다.
filter 함수를 통해 flag, sh, tmp의 경우 필터링을 거쳐서 나타나지 않는 것을 볼 수 있다.
strstr()함수는 string1 에서 string2의 첫 번째 표시를 찾는다.
함수는 동일한 프로세스에서 string2로 끝나는 null 문자를 무시한다.
putenv() 함수는 기존 변수를 변경하거나 새 변수를 작성하여 환경 변수의 값을 설정한다.
이 문제는 환경변수를 사용해서 우회한다면 쉽게 풀 수 있다는 것을 알 수 있다.
main 함수 안에서 system(cat flag);가 이뤄져야하는데
PATH가 /thankyouverymuch로 설정되어 있기 때문에 argv[1]에 cat flag를 넣어도 flag 때문에
filter 함수에 걸린다.
그러면 catdms /bin/cat을 통해 절대 경로로 선언해주고,
*라는 필터링을 이용해야한다.
*은 와일드카드라는 뜻으로, fl*로 입력하면 fl로 시작하는 모든 파일에 접근해달라는 의미이다.
다음과 같은 방법으로 해결할 수 있었다.

728x90
'CTF 스터디' 카테고리의 다른 글
[pwnable.kr] 15번_cmd2 풀이 (0) | 2021.05.17 |
---|---|
[pwnable.kr] 13번_lotto 풀이 (0) | 2021.05.12 |
[pwnable.kr] 12번_blackjack 풀이 (0) | 2021.05.12 |
[pwnable.kr] 11번_coin1 풀이 (0) | 2021.05.03 |
[pwnable.kr] 10번_ shellshock 풀이 (0) | 2021.05.03 |