티스토리 뷰

워게임/webhacking.kr

webhacking.kr 61번

순듕 2019. 5. 14. 11:44
<?

echo("<a href=index_lolll.phps>source</a>");

// id에 대한 입력 값이 없을경우 guest로 지정
if(!$_GET[id]) $_GET[id]="guest";

echo("<html><head><title>Challenge 61</title></head><body>");

// 입력값에 대한 필터링(18글자 초과일 경우 & 아래의 키워드)
if(eregi("\(|\)|union|select|challenge|from|,|by|\.",$_GET[id])) exit("Access Denied");
if(strlen($_GET[id])>18) exit("Access Denied");

// 우리가 입력한 칼럼에 대하여 조회를 함
$q=@mysql_fetch_array(mysql_query("select $_GET[id] from c_61 order by id desc limit 1"));

echo("<b>$q[id]</b><br>");

// 쿼리의 결과가 admin이면 클리어
if($q[id]=="admin") @clear();

echo("</body></html>");

?>

61번의 소스이다.

(), union, select, challenge, from, , , by가 필터링되고 있다.

 

쿼리 부분을 보면 우리가 입력한 값에 대한 칼럼을 조회하고 있는 것을 볼 수 있다.

아마 이 문제는 mysql을 이제 막 배워가는 사람이 제일 잘 풀지 않을까 .... 하는 생각이 들었다

 

제일 처음 배울때 문자열 출력을 위해 select "admin" 이런식으로 해본 경험이 있을것이다.

그 결과는 admin이고, 컬럼명 또한 admin으로 나온다.

그러므로 우리는 alias라는 별칭 지정 기능을 활용하여 칼럼명을 id로 지정을 해주어야 한다.

select "admin" id

위 쿼리의 결과는 admin이며 컬럼명 또한 id로 나오는 것을 볼 수 있을것이다.

 

그렇다면 문제 쿼리의 입력값 부분에 "admin" id 를 입력하고 테스팅 해보자.

select "admin" id from c_61 order by id desc limit 1

컬럼명도 id가 될 것이며 쿼리의 결과도 admin이 될 것이다.

 

그러나 php의 매직쿼터의 영향으로 문자열을 보낼 수 없기 때문에 헥스코드로 보내주면 된다.

?id=0x61646d696e%20id

 

클리어 ~! 

'워게임 > webhacking.kr' 카테고리의 다른 글

webhacking.kr 60번  (0) 2019.05.07
webhacking.kr 54번  (0) 2019.05.04
webhacking.kr 52번  (0) 2019.05.04
webhacking.kr 8번  (0) 2019.05.03
webhacking.kr 49번  (0) 2019.05.03
댓글