ABOUT ME

-

Today
-
Yesterday
-
Total
-
s0ye0ve
  • [LOS] 2. cobolt _write up - los.rubiya.kr
    Wargame/LOS (Lord of SQL Injection) 2021-02-05
    728x90

    문제를 들어가면 쿼리문과 함께 해당 문제의 소스코드가 보인다.

    cobolt

    먼저 코드를 보면 이전 문제인 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

    댓글

Copyright 2020. s0ye0ve all rights reserved.

Designed by Tistory.