목표 : DB Hijacking (.htaccess)
파일을 업로드할 수 있고 코드를 보여준다.
<?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";
}
?>
PHP
복사
시행착오
풀이
28번과 같은 .htaccess를 활용하는 문제다.
시행착오 과정에서 Apache 및 php를 사용하는 점을 확인했다. 다음 공식 php 문서에 내용이 있다.
이 중에서도 php.ini 파일 설정 값에 상세한 정보들이 있는데
MySQL에 관련된 부분이 있고 실제로 mysqli_connect(); 는 다음 default 값을 구성된다.
.htaccess를 통해 php.ini 설정 값으로 다음 값들을 덮어쓸 수 있다.
# $db = mysqli_connect();
$servername = "localhost";
$username = "username";
$password = "password";
$conn = new mysqli($servername, $username, $password);
PHP
복사
이를 위해서는 직접 DB를 구축해야한다. 오라클 클라우드의 우분투에 mysql을 설치했다.
#Make DB
create database chall30;
#Go to DB
use chall30;
#Make table
create table chall30_answer(flag int);
#Insert Data
insert into chall30_answer values(123);
#Check DB
select flag from chall30_answer;
#+------+
#| flag |
#+------+
#| 123 |
#+------+
#Make user and set Privileges
create user 'test'@'%' identified by 'test1234';
grant all privileges on *.* to 'test'@'%';
SQL
복사
오라클 서버 방화벽 설정까지 3306포트에 대해 접근 가능하도록 설정했다
mysql -h {sql_server_ip} -u test -p
#pw test1234
SQL
복사
테스트 결과 접근에도 성공했다.
오류가 발생해 test 계정에 대한 비밀번호 설정을 mysql_native_password으로 바꾸고서야 플래그를 얻을 수 있었다.