본문 바로가기

wargame/los.eagle-jump.org

cobolt

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

문제 이름 : cobolt

 

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
  include "./config.php"
  login_chk();
  dbconnect();
  if(preg_match('/prob|_|\.|\(\)/i'$_GET[id])) exit("No Hack ~_~"); 
  if(preg_match('/prob|_|\.|\(\)/i'$_GET[pw])) exit("No Hack ~_~"); 
  $query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')"
  echo "<hr>query : <strong>{$query}</strong><hr><br>"
  $result = @mysql_fetch_array(mysql_query($query)); 
  if($result['id'== 'admin') solve("cobolt");
  elseif($result['id']) echo "<h2>Hello {$result['id']}<br>You are not admin :(</h2>"
  highlight_file(__FILE__); 
?>
cs

 

이전 문제처럼 자세한설명과 정답은 공개하지 않을예정이다.

 

답은 다른블로그를 들어가면 나올것이지만  

 

직접공부하면서 생각해보고 스스로 풀어보는게 좋다고 생각하기때문이다.

 

$_GET 방식을 통해 서버에게 id값과 pw값을 보내준다 .

 

주의할점은 id,pw값에  prob , . , _ , ( , ) 등 값이 들어가있으면 필터링되게된다.

 

쿼리를 살펴보면

 

 $query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')"

 

아이디값은 그대로 들어가지만 pw값은 db에 저장될때 md5() 함수를 이용해 md5로 암호화되서 값이 저장된다.

 

또  10번줄을 보게되면 id는 무조건 admin 이여지만 문제는 풀리는거같다.

 

그렇다면 pw값을 변조해야한다는것이다.

 

이전문제에서 작은 따움표를 닫았던것처럼 이번문제도 작은따움표와 괄호를 맞춰서 닫아줘보자 그다음 그사이에 참조건을 넣어보면된다
(참고로 이전문제처럼 참조건을 or 1=1 로하게되면 문제는 풀리지않는다.)

 

하지만 마지막에 ')값으로 인해 쿼리가 에러가날탠대 # 을 이용해서 주석처리하자

 

쿼리에 #을 넣게되면 #이후로 온값은 모두 주석처리가된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

'wargame > los.eagle-jump.org' 카테고리의 다른 글

wolfman  (0) 2017.07.03
orc  (0) 2017.06.18
goblin  (0) 2017.06.15
gremlin  (0) 2017.06.15
los 사이트 소개  (0) 2017.06.15