목표 : php wrapper
ls -l 명령어를 쳤을 때 나올 결과물과 자유롭게 텍스트를 쓸 수 있는 칸이 있다.
d | r | w | x | r | - | x | r | - | x |
A: 파일유형 | B: 소유자 권한 | B: 소유자 권한 | B: 소유자 권한 | C: 그룹 소유자 권한 | C: 그룹 소유자 권한 | C: 그룹 소유자 권한 | D: 일반 사용자 권한 | D: 일반 사용자 권한 | D: 일반 사용자 권한 |
•
파일 권한
•
링크 카운터 : 연결된 파일 개수
•
파일의 소유자
•
파일그룹 소유자
•
파일 사이즈
•
최종 변경 일시
•
파일 이름
flag.php 라고 누가봐도 얻고 싶은 파일이 있다 들어가보자
음 읽기 권한이 다 주어져있어서 쉽게 들어왔지만 딱히 변화가 없다
hello가 기본값이었으니 확장자는 빼고 넣어보자
오 플래그가 있다는 코드를 발견했다.
파일에 직접 접속해보자
바로 flag.php가 홈에 붙어있는걸 알았고
? 앞에 index.php가 기본으로 들어가있었다.
아무래도 index.php가 index를 불러와 중복으로 부르는 걸 막기 위해 file=index는 변화가 없던 것 같다.
index.php의 소스코드를 볼 방법을 찾아야한다. (사실 이 방법을 알면 그대로 flag.php 파일을 보면 된다)
PHP Wrapper라는 개념이 있다.
원하는 예시를 찾았다
PHP 파일을 그대로 실행시키는 유형이므로 php:// 로 묶인 PHP도 실행이 된다.
찾고 싶은 값은 flag.php
php://filter/write=string.rot13/resource=flag
PHP
복사
흠 다시 hello 로 리다이렉트 되지 않은 걸 보면 정상적으로 인식이 된건 맞으나 그냥 그대로 flag.php로 인식된것 같다.
내용을 다른 형태로 변환해볼 필요가 있다.
•
String filters: string.rot13, string.toupper, string.tolower
•
conversion filters: convert.base64-encode and convert.base64-decode, convert.quoted-printable-encode and convert.quoted-printable-decode, convert.iconv.*
•
Compression filters: zlib.deflate and zlib.inflate, bzip2.compress and bzip2.decompress
•
Encryption filters: mcrypt.* and mdecrypt.*
php://filter/convert.base64-encode/resource=flag
PHP
복사
base64인코딩을 해보자
뭔가 다른 값이 나왔다! 디코딩해보자
FLAG를 획득했다