-
[해커스쿨] FTZ Level 3 풀이 <;, "">**Pwnable/FTZ 2020. 7. 17. 23:32
1.
level3의 비밀번호는 can you fly? 이다. level3에 로그인 한 뒤 hint 파일을 열어 보았다.
autodig의 소스를 보여주고 이를 이용하여 level4의 권한을 얻으라 한다
맨 밑줄을 보니 힌트를 더 주었다 !
* 동시에 여러 명령어를 사용하려면? → 다중명령어
- ; (세미콜론) : 하나의 명령어 라인에서 여러 개의 명령을 실행 (하나의 명령어 다음에 추가) :첫 번째 명령이 실패하여도 두 번째 명령은 반드시 실행이 됨.
- | (파이프) : 앞에서 나온 명령 결과를 두 번째 명령에서 사용 (연결)
- && (더블 엠퍼센드) : 첫 번째 명령이 에러 없이 정상적으로 종료했을 경우에만 두 번째 명령을 수행
- || (더블 버티칼바) : 첫 번째 명령의 결과에서 에러가 발생하더라도 각각의 모든 명령을 수행
* 문자열 형태로 명령어를 전달하려면? → ""로 묶어!
ex.
- script "인자2;인자3" - 따옴표로 인자2개를 묶어버려 1개로 인식하게끔 → 인자 2개로 인식
- script 인자2 인자3 - 인자 3개로 인식
2.
* main함수의 인자, argc, argv
argc (= arguments count)
- main 함수에 전달된 인자의 개수
- argument의 수, argument가 char형으로 저장이 되는 변수
- 인자를 하나도 입력하지 않으면 argc = 1 (항상 argc > 1)
- 인자의 정확한 개수는 argc-1 (파일명이 0번이기 때문에)
- argc는 기본 1이다. argument가 없어도 1부터 시작, 만약 argument가 2개이면 argc는 3이 된다.
argv (= arguments vector)
- 가변적인 개수의 문자열
- 프로그램을 실행할 때 지정해 준 인자의 문자열들이 실제로 저장되는 배열
- argv[0]은 실행 파일명이 저장됨 (프로그램의 실행경로)
- argv[1], argv[2], ... 순서대로 사용자가 입력한 argument가 저장 됨.
* 문자열 관련 함수 strcpy, strcat, strlen, strcmp
문자열 함수를 사용하기 위해서는 string.h 헤더 파일이 필요하다.
- strcpy : 문자열 복사
- strcat : 문자열 뒤에 붙이기 (두 문자열을 붙임)
- strlen : 문자열 길이
- strcmp : 두 문자열 비교
- 문자열이 같다 → 0 반환
- 문자열이 다르다 → -1 반환
해석에 필요한 정보를 얻었으니 이제 autodig의 소스를 해석 해보자.
cmd라는 배열이 있다
argc가 2가 아니면 Auto Digger Version 0.9\n
Usage : argv[0](숫자) host 라고 출력된다.
cmd배열에 dig @ argv[1](우리가 입력할 값) version.bind chaos txt 가 추가됐다.
cmd가 실행된다.
3.
level4의 setuid가 걸려있는 파일을 검색하고 그 파일을 실행해준다.
소스코드 해석을 참조해보면 autodig를 실행할 때 인자값을 전달하지 않았기 때문에 몇가지 출력문이 출력되고 코드가 종료되는걸 알 수 있다.
그러면 autodig에 어떤 인자값을 줘야할까?
level4의 권한으로 setuid가 걸려있는 autodig 파일을 실행하면서 bash쉘과 my-pass 명령어를 동시에 실행하고 문자열 형태로 전달하면 되겠다
/bin/autodig "bash;my-pass"
끝
'Pwnable > FTZ' 카테고리의 다른 글
[해커스쿨] FTZ level 4 풀이 <Backdoor> (0) 2020.07.18 [해커스쿨] FTZ Level 2 풀이 <:!sh> (0) 2020.06.26 [해커스쿨] FTZ Level 1 풀이 <SetUID> (0) 2020.06.26 FTZ_trainer 6 ~ 10 (0) 2019.12.31 FTZ_Trainer 1 ~ 5 (0) 2019.12.30