30번 - .htaccess

2020. 12. 29. 17:23

 

 

 

개인 디렉토리와 index.php 파일 소스를 보여주는 링크가 보이네요.

가서 봅시다!

 

 

chall30.chall30_answer에 있는 flag를 가져와서 그 값이 존재하다면 /flag를 include 합니다.

 

처음에는 뭘 하라는건지 몰랐지만, 자세히 보니 평소와는 다르게 mysqli_connect()에 인자가 없습니다.

mysqli_connect()의 함수 원형을 볼까요?

 

 

인자가 없어도 되는것이 디폴트 값이 있었기 때문이었습니다.

ini_get 함수는 무엇일까요?

 

먼저, php.ini 파일을 알아야합니다.

php.ini란 php의 설정 파일로, 변경하게 되면 서버의 모든 php 스크립트에 설정 내용이 반영됩니다.

한마디로 수정파일의 개념입니다.

 

출처 : https://m.blog.naver.com/imm7745/221928097658

 

PHP를 처음 설치하고 나서 제대로 설치가 완료되었는지 확인할 때 띄우는 웹페이지 화면입니다.

위 사진의 정보들은 php.ini로 부터 읽혀진 값들입니다.

 

php.ini 파일의 값들은 어떻게 정의될까요?

 

출처 : https://www.habonyphp.com/2019/02/phpini_11.html

 

위와 같은 모드로 나뉘어 각 지시어를 통해 정의됩니다.

php.ini에는 웹 호스팅에 관한 다양한 정보를 포함하고 있지만 자세한 내용은 다루지 않겠습니다.

따로 공부하는 것이 더욱 도움될 듯 합니다.

 

우리가 주목해야할 모드는 PHP_INI_ALL 입니다.

 

출처 : https://www.php.net/manual/en/mysqli.configuration.php

 

어디서 많이 봤지 않나요?

맞습니다.

mysqli_connect 함수의 디폴트 값으로 지정된 것들인데요, PHP_INI_ALL 모드로 설정되어있어 .htaccess에서도 값을 가져올 수 있습니다.

페이지는 직계의 설정파일에만 영향을 받습니다.

즉, 상위 폴더의 php.ini 파일보다 동위 폴더에 .htaccess가 있을 경우 .htaccess 파일의 설정을 따른다는 것이죠.

다만 공통된 것이 있을 때만 .htaccess를 우선순위로 둔다는 점이 중요합니다.

둘의 내용이 서로 다를 경우 둘의 내용을 전부 반영하게 됩니다.

마치 오버라이드를 포함한 상속과도 같네요.

 

뭔가 답이 나온 것 같죠?

 

문제와 같은 mysql 환경을 만든 뒤 .htaccess에 값들을 적절하게 채워 프록시를 통해 업로드하고 mysql의 원격 접속을 허용과 함께 포트포워딩을 하게 되면 문제가 풀릴 것 같습니다.

 

.htaccess 파일에 값을 채울 때는 그냥 default.mysqli_~~~로 시작하면 안되고 앞에 어떠한 지시어를 적어줘야합니다 ㅎㅎ

'[▒] 보안 > webhacking.kr' 카테고리의 다른 글

32번 - brute force  (0) 2020.12.30
31번 - 포트포워딩  (0) 2020.12.29
29번 - File Upload Vulnerability  (0) 2020.11.09
28번 - File Upload Vulnerability(.htaccess)  (0) 2020.10.29
27번 - sql injection  (0) 2020.10.16

BELATED ARTICLES

more