write-up(web)/webhacking.kr

[Webhacking.kr] old-30 (X)

chanchand 2023. 11. 2. 22:03
반응형

문제


 

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

 

 

 

 

문제풀이


데이터베이스 반환 결과가 존재할 때, flag 출력한다.

페이지에 접근하면 flag 출력되지 않는데, 데이터베이스 연결이 되지 않았거나 데이터가 존재하지 않아서이다.

 

mysqli.connect() 함수에 아무것도 설정되지 않았다.

설정하지 않으면 php.ini에 설정된 디폴트 값을 전달한다.

public mysqli::__construct(
    ?string $hostname = null,
    ?string $username = null,
    ?string $password = null,
    ?string $database = null,
    ?int $port = null,
    ?string $socket = null
)

 

.htaccess 파일을 이용해 php.ini 파일 설정 값을 변경할 수 있다.

php_value mysqli.default_host "ipaddr"
php_value mysqli.default_user "user"
php_value mysqli.default_pw "pw"

 

개인 서버를 이용해서 chall30 DB를 생성하고, chall30_answer 테이블을 생성해서 값을 반환해주면 flag를 출력할 수 있다.

- database

create database chall30;
use chall30;
create table chall30_answer (flag int);
insert into chall30_answer (flag) values(1);

 

create user 'test'@'%' identified by 'test';
grant all privileges on *.* to 'test'@'%';

 

 

- bind-address

/etc/mysql/mariadb.cnf

외부에서 접근할 수 있도록 변경한다.

bind-address = 0.0.0.0

 

- .htaccess

php_value mysqli.default_host "IP"
php_value mysqli.default_user "test"
php_value mysqli.default_pw "test"
php_value mysqli.default_port "3306"

 

외부에서 접근할 수 있도록 한 후에, 데이터베이스 접근이 가능한지 테스트도 했다.

php 코드를 작성해서 DB 읽어오는 것까지 테스트 했는데, htaccess 파일을 올리고 난 후에 하얀 화면만 나오고 flag가 출력이 안된다.

/upload/.../에 접속하면 로딩이 꽤 오래 지속되다가 하얀 화면을 출력한다.

 

왜 안되는지 아는 분은 알려주세요

반응형

'write-up(web) > webhacking.kr' 카테고리의 다른 글

[Webhacking.kr] baby toctou🍼  (0) 2023.11.03
[Webhacking.kr] CHILD  (0) 2023.11.03
[Webhacking.kr] old-29  (0) 2023.11.02
[Webhacking.kr] old-28  (0) 2023.11.02
[Webhacking.kr] old-27  (0) 2023.11.02