직접 구현하진 않았다. 해당문제는 공인 IP로 접속이 가능한 mysql 서버가 구축되어있어야해서..귀찮아...ㅠㅠ
<?php
if($_GET['view_source']) highlight_file(__FILE__);
$db = mysqli_connect() or die();
mysqli_select_db($db,"chall30") or die();
$result = mysqli_fetch_array(mysqli_query($db,"select flag from chall30_answer")) or die();
if($result[0]){
include "/flag";
}
?>
소스보기를 한 소스다.
mysqli_connet에 인자가 없는데, 이런 경우 디폴트 값이 들어간다.
이때 ini_get 함수를 통해 php.ini 파일 안에 정의되어 있는 디폴트 host, username, port, passwd 값들을 가져오게 되는데,
디폴트로 각각 NULL, NULL, 3306, NULL 로 정의되어 있다.
www.php.net/manual/en/ini.list.php
mysqli_default_host = NULL
mysqli_default_user = NULL
mysqli_default_port = 3306 (mysql의 포트는 3306)
mysqli_default_pw = NULL
( ini_get 함수는 php.ini 파일로부터 해당 값들을 읽어들인다. )
+ 기본값으로 제공되는 php.ini 파일은 실서비스를 위한 환경설정 내용을 담고 있다.
그리고 이 파일의 설정값을 .htaccess 파일의 설정값으로 덮어 씌울 수 있다.
( 특정한 사이트에만 설정내용을 반영하고 싶을 경우는 해당 사이트의 루트에 .htaccess 파일을 생성하여 설정 )
즉 mysqli_connect에 인자가 없을 경우엔 php.ini 파일에 설정되어있는 디폴트값들을 읽어들이는데, .htaccess 파일의 설정값으로 이 값들을 지정해 줄 수 있다.
따라서 개인 서버를 만들고, 그 안에 위의 소스에 맞게 chall30 데이터베이스를 만들어 준 뒤 chall30_answer라는 테이블도 만들고
flag 컬럼을 만들어준 뒤 데이터를 하나 넣어준다. 그리고 해당 테이블에 접근 가능한 공개 계정을 하나 만들어준 뒤
그 접속 정보를 담고 있는 .htaccess 파일을 업로드하면 된다. webhacking.kr 에서 내 개인 mysql 서버에 접속하게 하는 것.
.htaccess 파일을 아래와 같이 만들어 준 뒤 업로드하면 된다.
php_value mysqli.default_host "주소:3306"
php_value mysqli.default_user "유저"
php_value mysqli.default_pw "비밀번호"
'[웹해킹] > [Webhacking.kr]' 카테고리의 다른 글
[Webhacking.kr] 32번 (0) | 2020.10.17 |
---|---|
[Webhacking.kr] 31번 (0) | 2020.10.17 |
[Webhacking.kr] 29번 (0) | 2020.10.13 |
[Webhacking.kr] 28번 (0) | 2020.10.07 |
[Webhacking.kr] 27번 (0) | 2020.10.07 |