티스토리 뷰

Web_Hacking/LOS

[LOS] orc

MitNy 2017. 8. 12. 19:14


<?php 
  
include "./config.php"
  
login_chk(); 
  
dbconnect(); 
  if(
preg_match('/prob|_|\.|\(\)/i'$_GET[pw])) exit("No Hack ~_~"); 
  
$query "select id from prob_orc where id='admin' and pw='{$_GET[pw]}'"
  echo 
"<hr>query : <strong>{$query}</strong><hr><br>"
  
$result = @mysql_fetch_array(mysql_query($query)); 
  if(
$result['id']) echo "<h2>Hello admin</h2>"
  
$_GET[pw] = addslashes($_GET[pw]); 
  
$query "select pw from prob_orc where id='admin' and pw='{$_GET[pw]}'"
  
$result = @mysql_fetch_array(mysql_query($query)); 
  if((
$result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc"); 
  
highlight_file(__FILE__); 
?>


orc 문제는 저번 문제와 다르게 id='admin'으로 고정되어 있고, 입력받은 pw가 db에 있는 pw와 같아야한다.

blind sql injection 문제이고 admin의 pw를 알아야만 문제가 풀린다.


length 함수와 substr 함수로 문제를 풀 것이다.

python으로 코드를 짜서 하는 방법도 있지만 LOS의 첫번째 blind sql injection 문제이므로 수동으로 풀어보겠다.





pw=1%27or%20id=%27admin%27%20and%20length(pw)=%278


이런식으로 length(pw)='1 부터 Hello admin이 뜨는 숫자를 찾으면 된다.

이 문제에서 pw의 길이는 8



substr 함수는 문자열이나 변수에서 특정위치부터 정해진 길이만큼 자르는  함수이고 이를 이용해 문제를 해결할 수 있다.

substr(pw,1,1)=1 이라고 한다면 pw의 첫번째 글자가 1인지 확인할 수 있겠다.

pw의 길이는 8이므로 substr(pw,1,1) 부터 substr(pw,8,1) 을 해주면서

값으로는 숫자,알파벳,특수문자 등을 넣으면서 pw를 한글자씩 확인할 수 있다.

blind sql injection이기 때문에 숫자,알파벳,특수문자가 들어가는지 안들어가는지 모르고 직접 손으로 확인하기엔 경우의 수가 너무 많기 때문에 코드를 짜서 푸는 것이다.






다행히 숫자와 알파벳밖에 없었기 때문에 금방 풀렸으나 조금더 난이도 높은 pw 였다면 직접 손으로 하기엔 어려움이 있을 것이다.

Hello admin이 뜨는 경우만 봤을때 admin의 pw는  


295d5844 이다.



그래서 이 값을 admin의 pw에 넣어주면 문제는 풀린다.



'Web_Hacking > LOS' 카테고리의 다른 글

[LOS] orge  (0) 2017.08.13
[LOS] darkelf  (0) 2017.08.13
[LOS] wolfman  (0) 2017.08.12
[LOS] goblin  (0) 2017.08.10
[LOS] cobolt  (0) 2017.08.10
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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 29 30
글 보관함