Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- L15
- off_by_one_001
- Pwnable
- basic_exploitation_000
- 포너블
- CodeEngn
- L17
- rev-basic-2
- rev-basic-4
- rev-basic-1
- Basic
- out_of_bound
- RCE
- L16
- L18
- sint
- 코드엔진 베이직 13
- rev-basic-5
- 드림핵
- 코드엔진 베이직
- off_by_one_000
- coin1
- basic_exploitation_001
- pwnable.kr
- rev-basic-3
- Dreamhack
- sd카드 리더기
- rev-basic-0
- rev-basic-7
- rev-basic-6
Archives
- Today
- Total
서브웨이
pwnable.kr cmd2 풀이 본문
이 문제또한 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;
}
자 이전문제와 별다를건 없어보입니다만 필터의 갯수가 늘어났네요....ㅎㅎ
일단 flag는 여전히 와일드카드로 우회가 가능하니 이제 /bin/cat을 입력할 방법을 찾아야겠네요.
이전에 배운적 있는 쉘 스크립트로 풀어보았습니다. 리눅스 쉘에는 read라는 명령어가 존재합니다. 간단히 read a라고 입력하면 값을 입력하도록 기다립니다. 그리고 입력한 값은 $a를 입력하면 출력이 가능합니다.
이번꺼는 포인트가 좀 크네요.
'Pwnable > pwnable.kr' 카테고리의 다른 글
pwnable.kr memcpy 풀이 (0) | 2020.09.22 |
---|---|
pwnable.kr uaf 풀이 (0) | 2020.08.26 |
pwnable.kr cmd1 풀이 (0) | 2020.08.24 |
pwnable.kr lotto 풀이 (0) | 2020.08.21 |
pwnable.kr blackjack 풀이 (0) | 2020.08.19 |
Comments