Wargame
-
[LOS] 2. cobolt _write up - los.rubiya.krWargame/LOS (Lord of SQL Injection) 2021-02-05
문제를 들어가면 쿼리문과 함께 해당 문제의 소스코드가 보인다. 먼저 코드를 보면 이전 문제인 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'인 셈. 쿼리가 위와 같이 인식해 문제가 풀리게 된다. 혹은 주석처리 대신 ..
-
[LOS] 1. gremlin _write up - los.rubiya.krWargame/LOS (Lord of SQL Injection) 2021-02-05
문제를 들어가면 굵은 글씨로 써진 쿼리문과 함께 문제 코드가 보인다. 간단히 살펴보면 preg_match 함수로 id와 pw에 들어갈 특정 문자열들을 필터링해주고 있고, (데이터베이스 공격을 방지하기 위함인 것 같다.) id와 pw에 입력을 받아 쿼리문을 참으로 만들면 solve("gremlin") 함수가 실행되어 문제가 해결된다. 따라서 SQL 인젝션을 이용해 쿼리문이 항상 참이되도록 인자를 넣어주면 된다. $query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'"; -> select id from prob_gremlin where id='1' or '1'#' and pw='' id에 1' or '1' %23이라는..