write-ups/Lord of SQL Injection

[Lord of SQL Injection] Goblin 풀이

2016. 11. 7. 23:03

Lord of SQL Injection (LoS) - Goblin 


MySQL의 문자열 함수

 - MySQL에서 SQL Injection을 시행할 때 많이 쓰이는 문자열 함수들이 있습니다. 
 
일단 URL 로 설명을 대체하겠습니다. (URL : http://bizadmin.tistory.com/entry/문자열-함수 )

이번 문제에서는 ord() 함수를 사용하겠습니다. 

Analyze



문제를 분석해 봅시다. 일단 preg_match()에서 쿼터들을 거릅니다. 어랏... 그럼 id='admin' 이라고 못하니까 해킹을 못하잖습니까?!!!




Exploit!


그렇게 생각하실 수 있으시겠으나, 우리에게는 방금 배운 MySQL의 문자열 함수들이 있습니다. 


ord() 함수는 문자열의 가장 왼쪽의 문자를 아스키코드의 10진수로 변환합니다. 


그럼 ord(id)를 하면 id에 있는 문자열들의 왼쪽 값이 되겠죠. 이 때 'admin'의 시작인 a 의 10진수 아스키코드인 97을 사용합니다. 


select id from prob_goblin where id='guest' and no=0 or ord(id)=97

select id from prob_goblin where id='guest' and no=0 or id='admin'

(참고로, guest의 no 값은 1이므로 절대 no=1을 집어넣으면 뒷문장의 효력을 잃습니다. 



결과적으로 두 쿼리는 똑같습니다. id에서 맨 왼쪽 값이 a(97)인 값을 찾아라. 


그래서 이걸 쿼리에 넣어보면....


http://los.eagle-jump.org/goblin_5559aacf2617d21ebb6efe907b7dded8.php?no=0%20or%20ord(id)=97


짜잔.

성공입니다.