Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
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 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

D1N0's hacking blog

Lord of SQL injection - Gremlin 본문

Web/Lord of SQL injection

Lord of SQL injection - Gremlin

D1N0 2020. 11. 10. 20:38

들어가기 전에

이 글은 기본적인 SQL injection에 대해 다룬다

php나 SQL 같은 웹에 대한 지식이 아예 없다면 간단히라도 공부하고 읽는 것을 추천한다

SQL 인젝션이란?

SQL 삽입(영어: SQL Injection, SQL 인젝션, SQL 주입)은 응용 프로그램 보안 상의 허점을 의도적으로 이용해, 악의적인 SQL문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 방법이다. [위키백과]

 

간단히 말해 사이트 내에서 sql 쿼리를 사용하는 부분의 취약점을 이용해서 데이터베이스를 조작하는 웹 해킹 기법을 말한다

Lord of SQL injection(이하 los)는 Rubiya님이 운영하는 워게임 사이트로, 다양한 SQL 인젝션 공격을 실습해볼 수 있다

문제 풀이

Gremlin 문제에 들어가면 다음과 같은 모습을 볼 수 있다

코드를 보면 get방식으로 id와 pw를 받아서 prob_gremlin에 id, pw가 일치하는 열을 가져오고,

그 id를 result에 저장하는 것 같다

언뜻 보면 아무 이상 없어 보이지만, SQL injection 취약점이 존재한다

위 코드에서 id가 쌩으로 query에 들어가기 때문에 id가 '[임의의 문자열] 이라면 쿼리문은

select id from prob_gremlin where id=''[임의의 문자열]' and pw=''이 되어 sql 쿼리를 마음대로 조종할 수 있다

 

그러면 이제 이를 활용해 문제를 풀어보자

los는 solve() 함수가 실행되면 레벨이 클리어 되는데, 이번 문제에서는 id와 pw가 일치하는 열이 있을 때 solve()가 실행된다

그러나 우리는 id와 pw를 모두 모르기 때문에, 아까 보았던 SQL injection을 이용해야 한다

 

첫 번째 풀이

id=' or 1=1;%23

이렇게 쓰면 쿼리가 select id from prob_gremlin where id='' or 1=1;#' and pw=''가 된다

#은 SQL의 주석처리 기호이므로 pw검증은 실행되지 않고 id='' or 1=1만 남는데,

id=''인 행은 없겠지만 or로 묶인 1=1은 참이므로 테이블 맨 위의 행을 넘겨주고, 인증에 성공한다

참고로, url에서 #을 쓸 수 없기 때문에 url encoding으로 우회해서 %23으로 쓴다

두 번째 풀이

pw=' or '1' = '1'

이렇게 쓰면 쿼리가 select id from prob_gremlin where id='' and pw='' or '1' = '1'가 된다

SQL에서 or보다 and가 먼저 연산되기 때문에, 역시 참을 반환한다

 

'Web > Lord of SQL injection' 카테고리의 다른 글

Lord of SQL injection - Darkelf  (0) 2020.11.11
Lord of SQL injection - Wolfman  (0) 2020.11.11
Lord of SQL injection - Orc  (0) 2020.11.10
Lord of SQL injection - Goblin  (0) 2020.11.10
Lord of SQL injection - Cobolt  (0) 2020.11.10
Comments