[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
짜잔.
성공입니다.
'write-ups > Lord of SQL Injection' 카테고리의 다른 글
[Lord of SQL Injection] Darkelf 풀이 (0) | 2016.11.08 |
---|---|
[Lord of SQL Injection] Wolfman 풀이 (0) | 2016.11.08 |
[Lord of SQL Injection] Orc 풀이 (0) | 2016.11.08 |
[Lord of SQL Injection] cobolt 풀이 (0) | 2016.11.07 |
[Lord of SQL Injection] Gremlin 풀이 (0) | 2016.11.07 |