Web/Lord of Sql injection

cobolt 문제 풀이

Namchun 2023. 9. 5. 23:42

코드 분석

지난 문제와 마찬가지로 별다른 필터링은 존재하지 않으나 pw로 입력받은 값을 md5함수에 넣어서 쿼리를 실행한다.

또한 result['id']가 존재하는지만 검사하지 않고 id가 admin인지 검사하고, id가 admin이 아니면 'You are not admin :('이라는 문자열을 출력하는 것으로 보아 prob_cobolt 테이블에는 여러 id가 존재하는 것으로 보인다.

 

공격 기법

우선 지난 문제와 똑같은 값을 id에 주입해보면

?id=' or 1=1 -- '

 

where문의 결과가 참이 되었지만 admin이 아닌 rubiya라는 id가 가장 먼저 조회되어 문제가 풀리지 않는다

 

이것을 해결하기 위해선 mysql의 LIMIT 을 사용할 수 있다.

LIMIT 은 mysql의 select에서 조회되는 결과의 행을 제어하는 구문이다.

 

SELECT 
    select_list
FROM
    table_name
LIMIT [offset,] row_count;

LIMIT 5 : 조회된 결과 중 5개의 행만 보여줌

LIMIT 1,4 : 조회된 결과 중 첫번째 부터 4개의 행만 보여줌

 

(LIMIT의 offset 옵션은 1이 아닌 0부터 시작한다)

 

다시 공격 쿼리로 돌아와서 LIMIT을 적용해보면

?id=admin' or 1=1 limit 0,1 -- '

0부터 1개의 행을 조회하였을 때는 rubiya라는 id가 조회되는 것을 볼 수 있고

 

?id=admin' or 1=1 limit 1,1 -- '

1부터 1개의 행을 조회하였을 때는 admin이라는 id가 조회되어 문제가 풀린다.

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

darkelf 문제 풀이  (0) 2023.09.09
wolfman 문제 풀이  (0) 2023.09.07
orc 문제 풀이  (0) 2023.09.06
goblin 문제 풀이  (0) 2023.09.06
gremlin 문제 풀이  (0) 2023.09.05