WebHacking/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가 조회되어 문제가 풀린다.