url을 보면 get방식으로 file=hello를 넘기고 있다.
리눅스 명령어 ls를 입력했을 때의 결과창처럼 생긴 화면과
아래 출력창에는 get방식으로 넘어온 file의 값으로 .php를 붙여서 hello.php를 출력하는것 같다.
file=flag라고 입력해보면
index는 아무것도 출력되지 않는다.. 흠..
상대경로를 이용해서 다른 디렉토리에 있는 값을 읽어보는 식으로도 접근해보고 (../../.../etc/passwd)
리눅스 명령어를 연속해서 실행시킬 수 있는 |, & 같은 거로도 접근해봤는데
둘다 아닌것 같다.
25번이 php 문제로 분류되어있어서 php 취약점에 대해 찾다보면 실마리가 있을까 해서
php 취약점에 대해서도 찾아보았는데... 흠.. 모르겠다ㅎ
결국 구글링 찬스를 썼는데 나처럼 문제가 안풀려서 관리자한테 문의해서 받은 힌트를 올려둔 분이 계셔서
우선 그 힌트를 살펴봤다.
그 블로그는 여기 -> https://ls-toast.tistory.com/52
근데 힌트가 별건 없고 php 공식 사이트에 올라와져 있는 설명이었다. 그것도 영어로..ㅎ
읽어봐도 뭔지 모르겠어서 작성자가 추가로 준 힌트를 봤는데 음..
풀이를 보고 공부해보기로 했다.
LFI (Local File Inclusion)
php에서 include 와 require 함수를 사용해 서버 내외의 파일(페이지)를 포함시킬 수 있다.
LFI는 이러한 함수를 사용할 때 포함시킬 파일(페이지)를 검증하지 않아서 발생하는 취약점이다.
공격 대상 서버에 있는 디렉토리에 접근하여 원하는 값을 열어보게 하는 행동
아래처럼 되어있으면 test로 전달된 값에 해당하는 파일이 있으면 별다른 필터링 없이 바로 include 되기 때문에 위험!
<?php
$file = $_GET['test'];
if(isset($file))
{
include("pages/$test");
}
else
{
include("index.php");
}
?>
../../../etc/passwd 혹은 널문자(%00)로도 접근이 가능하다.
wrapper
file:// http:// 등
php://filter를 사용하여 php 파일의 소스 코드의 인코딩된 값을 출력할 수 있다.
php://filter/convert.base64-encode/resource=경로
http://webhacking.kr:10001/?file=php://filter/convert.base64-encode/resource=flag
이런식으로 코드가 나온다.
base64로 인코딩된 값이니까 디코딩하면
webhaking.kr Auth 페이지에 입력해주면 끗
추가로
index에 대해서도 똑같이 해봤다.
디코딩하면
오 공부했던것 처럼 get으로 file 파라미터 값을 받아서 .php를 붙이고 include를 하고 있다!!
대박ㅋㅋㅋㅋ 짱신기 했다.
음.. 근데 사실
http://webhacking.kr:10001/?file=php://filter/convert.base64-encode/resource=flag
이 부분이 저 위에 php코드에서 어떻게 돌아가서 인코딩된 값이 출력되는 건지 잘 모르겠다.
나중에 다시 한번 봐야겠다
우선은 다음문제 풀어야지
[출처, 참고]
https://izeus12.tistory.com/30
'Webhacking.kr' 카테고리의 다른 글
Challenge(old)_27 (0) | 2020.07.02 |
---|---|
Challenge(old)_26 (0) | 2020.05.25 |
Challenge(old)_24 (0) | 2020.05.19 |
Challenge(old)_19 (0) | 2020.05.19 |
Challenge(old)_18 (0) | 2020.05.19 |
댓글