[pwnable.kr] Toddler's Bottle - cmd2 문제
Posted by bonggang | 2019. 11. 28. 16:19
문제
https://pwnable.kr/play.php
pwnable.kr
문제 풀이
접속
ssh cmd2@pwnable.kr -p2222
코드 확인
#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, export, /, ', flag)
- delete_env()로 인해 환경변수를 설정해주는 것도 불가능하다.
- / 문자열 필터링만 우회한다면 앞 문제에서 사용한 와일드카드를 활용한 풀이가 가능할 것 같다.
1. read()
- read 변수: 표준 입력에서 한 줄을 읽어서 변수에 저장한다.
- read 변수1 변수2: 표준 입력에서 한 줄을 읽어 첫 단어는 변수1에 나머지는 변수2에 저장한다.
즉, argv[1]에 값은 'read x; $x'지만 표준 입력을 받아 실행시킨다는 것이다.
자세한 풀이는 아래 블로그를 참고!
https://nroses-taek.tistory.com/148
2. echo()
두 번째 풀이는 echo를 이용하여 특수문자를 출력하는 것이다.
쉽게 말하면 $(echo"\057")로 \을 표현하는 것이다.
실행 화면
1. read 사용
2. echo 사용
'Security > System' 카테고리의 다른 글
[pwnable.kr] Toddler's Bottle - shellshock 문제 (0) | 2020.06.01 |
---|---|
Shell Shock (0) | 2020.05.29 |
버퍼 오버플로우(Buffer OverFlow) (0) | 2020.03.13 |
[pwnable.kr] Toddler's Bottle - cmd1 문제 (1) | 2019.11.28 |
[pwnable.kr] Toddler's Bottle - random 문제 (0) | 2019.10.02 |
[pwnable.kr] Toddler's Bottle - flag 문제 (0) | 2019.09.11 |
[pwnable.kr] Toddler's Bottle - bof 문제 (0) | 2019.09.10 |
[pwnable.kr] Toddler's Bottle - collision 문제 (0) | 2019.09.10 |