해당 문제를 풀기 위해서는 공인아이피로 접근이 가능한 개인 서버가 필요합니다.!


위와 같은 문제를 봤을 때는 파일 업로드 문제구나 싶습니다.

그런데, 소스를 보면 파일 업로드에 대한 필터가 전혀 되어 있지 않는 것을 볼 수 있습니다.

그래서 처음에는 문제 소스가 잘못 알려준 게 아닌가 싶어서 이리저리 취약점이 있는지 찾아보았는데...



<?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";
  }
?>


위와 같이 3번 라인에서 mysqli_connect() 함수에 아무런 정보가 없는 것이 취약하다는 것이었습니다.

보통의 경우에는 mysqli_connect() 함수에 다음과 같은 형태로 접속 정보를 입력하도록 되어있습니다.



만약 위와 같은 정보를 입력하게 되면 mysqli_connect()에 사용할 정보를 .htaccess에서 혹은 php.ini에서 default 정보를 가져와 사용하게 됩니다.

https://www.php.net/manual/en/ini.list.php


이전과 다른 점이 있다면 이전 old 문제에서는 mysql_connect() 함수였기 때문에 mysql.default_port, mysql.default_user, mysql.default_password 라는 값에 원하는 값을 넣고 조작을 할 수 있었다면, 이번 문제에서는 mysqli_connect() 함수라는 점이 다릅니다.


mysqli_connect()에서 사용하는 default 정보는 위와 같습니다.

mysql.default_password와 mysqli.default_pw라는 점이 조금 다르고 나머지는 i가 붙은 거 외에는 다른 점이 없습니다.


이제 개인 서버에 접속할 때 긁어오는 SELECT 구문에 맞춰 아무렇게 database, table, column을 생성해줍니다.



또한 접근을 위해 계정을 하나 만들어주도록 합니다.

만약 mysql 서버가 Ubuntu 18.04에서 구동중이라면 다음과 같은 설정을 주석처리해주어야 합니다.

경로는 /etc/mysql/mysql.conf.d/mysqld.conf 파일입니다.


.htaccess에는 다음과 같이 정보를 넣어주었습니다.


php_value mysqli.default_host "kkamikoon.com:3306"

php_value mysqli.default_user "kkamikoon"

php_value mysqli.default_pw "비밀번호"



'WARGAMES > webhacking.kr - old' 카테고리의 다른 글

Webhacking.kr_No34(400) - old  (0) 2019.12.31
Webhacking.kr_No33(200) - old  (0) 2019.12.31
Webhacking.kr_No32(150) - old  (0) 2019.12.31
Webhacking.kr_No31(150) - old  (0) 2019.12.31
Webhacking.kr_No.29(400) - old  (0) 2019.12.31
Webhacking.kr_No13(1000) - old  (0) 2019.12.15
Webhacking.kr_No.28(500) - old  (0) 2019.10.25
Webhacking.kr_No.27(150) - old  (0) 2019.10.25

+ Recent posts