[1]Reconnaissance
Analysis Page
-User Id 칸에 User를 검색하여 id, level, Rank point, rate를 출력하는 페이지입니다.
-GET 요청으로 search 파라미터에 값을 삽입하여 전송합니다.
Check vulnerability
-만약 이 검색 기능에서 SQL Injeciton이 가능하다면, normaltic' and '1'='1 을 삽입해도 normaltic에 대한 결과가 출력할 것 입니다.
-결과가 나오지 않습니다.
-이번에는 주석을 끝에 달아서 뒤 조건문을 제거해보았습니다.
-결과가 나오는 것을 보면 and를 막아놓거나 '1'='1' True 문을 막아놓은 것 같지는 않습니다.
-또한 or 의 경우, 뒤에 주석을 달지 않아도 결과를 출력합니다.
-따라서 normaltic 만 입력하거나 normaltic' or '1='1 이 통과되는 구조를 생각해보면 됩니다.
-제가 너무 정직하게 모든 문자열을 넣어서 검색했었는데, 중간 값만 입력해도 결과가 나오는 것을 보면 like 문을 사용하는 것을 알 수 있습니다.
-like문에서 %은 와일드카드로 앞에 넣으면(%c) c로 끝나는 모든 문자, 뒤에 넣으면 (c%) c로 시작하는 모든 문자, 양쪽에 넣으면(%c%)c가 들어가는 모든 문자를 검색합니다
-따라서 아래와 같은 구조로 추측할 수 있습니다.
select id, level, rank_point, rate from score where id like '%{input%}%'
[2]Vulnerability
Union SQL Injeciton
-union이란 두 개의 select 구문을 연결하여 두 개의 결과를 다 출력하는 구문입니다.
-union 문의 조건은 양 쪽 select 문에서 출력하는 column의 수가 같아야 한다는 것입니다.
#사용 가능
select first, second, third from number union select a, b, c from character
#사용 불가능
select first, second, third from number unon select a, b from character
-union의 특수한 조건 덕분에 검색에 사용되는 table의 column 수를 알 수 있습니다.
[3]Exploit
Union SQL Injection
SQL Injection
x4uiry.tistory.com
-제가 위쪽에 포스팅한 게시글에서 볼 수 있듯, mysql은 information_schema.tables 테이블에서 TABLE_NAME 컬럼으로 모든 테이블을 볼 수 있습니다.
' union select 1, 2, 3, table_name from information_schema.tables where table_name#
-flag_table이 비밀 데이터가 들어있을 것 같습니다.
-column 역시 information_schema.columns에서 확인할 수 있으나, 이 과정이 조금 귀찮아서 그냥 column을 flag로 추측했습니다.
'write-up > web' 카테고리의 다른 글
SQL Injection (Error Based SQLi Basic) (0) | 2024.05.31 |
---|---|
SQL Injection 2 (0) | 2024.05.24 |
login bypass5&Secret Login (0) | 2024.05.22 |
login bypass (0) | 2024.05.19 |
Pin Code Crack (0) | 2024.05.17 |