webhacking.kr 39번

목차

39번 문제 : php오류 찾기(?)


문제를 들어가면 index.phps 를 들어간다.

<html>
<head>
<title>Chellenge 39</title>
</head>
<body>

<?

$pw
="????";

if(
$_POST[id])
{
$_POST[id]=str_replace("\\","",$_POST[id]);
$_POST[id]=str_replace("'","''",$_POST[id]);
$_POST[id]=substr($_POST[id],0,15);
$q=mysql_fetch_array(mysql_query("select 'good' from zmail_member where id='$_POST[id]"));

if(
$q[0]=="good") @solve();

}

?>

<form method=post action=index.php>
<input type=text name=id maxlength=15 size=30>
<input type=submit>
</form>
</body>
</html>


위의 문장을 자세히 보면
$q=mysql_fetch_array(mysql_query("select 'good' from zmail_member where id='$_POST[id]"));
id='$_POST[id]")); 
이 부분에 싱글쿼터가 닫혀 있지 않다.
특정 아이디를 하여 싱글쿼터로 닫어주면 될거 같다!
admin' 이런식으로

$_POST[id]=str_replace("\\","",$_POST[id]);

역 슬래시를 없애 주는 구문 \ -> 

$_POST[id]=str_replace("'","''",$_POST[id]);

싱글쿼터를 더블쿼터로 바꿔 버린다. ' -> "


$_POST[id]=substr($_POST[id],0,15);

substr은 0번에서 15번까지 문자열을 가져오겠다는 뜻이다.


html 구문에서 <input type=text name=id maxlength=15 size=30>
입력 최대길이가 15이다. 

id 값을 뭘로 할까 고민하다가 admin 이 제일 적당한 것같아서 이것으로 하였다.

쿼리를 어떻게 보내면 될지 고민하다가

싱글쿼터 (') 1bit
더블쿼터 (") 2bit 이다.


15번째에 싱글쿼터를 넣으면 15,16번이 더블쿼터로 변하게 되는데
0번째 부터 15번째 까지만 값을 추출하므로 16번째는 무시되고 15번째 싱글쿼터만 받아오게 된다.

admin         '
으로 입력하면 된다!


  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유