일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 자바스크립트 element api
- 보안뉴스요약
- 보안뉴스
- 자바스크립트 기본 문법
- oracle
- ES6
- 파이썬
- numpy
- 카카오프로젝트 100
- Oracle SQL
- 오라클
- 보안뉴스 한줄요약
- 보안뉴스한줄요약
- 보안뉴스 요약
- python
- 자바스크립트 node
- GIT
- 카카오프로젝트100
- 다크웹
- oracle db
- 자바스크립트 jQuery
- 깃허브
- 랜섬웨어
- php
- javascript
- 카카오프로젝트
- 자바스크립트 prototype
- 자바스크립트 객체
- 자바스크립트
- 자바스크립트 API
- Today
- Total
FU11M00N
7-1. bee-box 를 사용하여 SQL injection 알아보기! 본문
먼저 SQL 인젝션은 사용자가 입력한 값을 서버에서 제대로 검증을 하지 않아
서버에서 DB의 쿼리문으로 인식하여 DB안의 정보가 노출되거나 인증이 우회되는 취약점이다.
SQL 인젝션은 사용자가 데이터를 입력할 수 있는 곳 어디에서든 발생할 수 있고 이것을 이용해
SQL 쿼리를 변수에 입력을 하여 DB안의 정보를 탈취당 할 수가 있다.
SQL injection은 인젝션 부분에서도 가장 중요한 부분이고 잘 알아야 할 부분이다!
사진 1-1은 SQL 인젝션의 동작원리입니다!
1. 레벨 low
그럼 가장 먼저 sqli_1.php 페이지로 SQL Injection을 시도해보겠습니다.
먼저'를 입력해 SQL 인젝션 공격이 가능한지 확인해봅니다!
Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%'' at line 1
SQL문이 에러가 났다고 합니다. 이 의미는 SQL 인젝션이 가능하다는 뜻입니다.
서버에서 쿼리문을 인식하였고 ' 만 입력했기 때문에 문장이 에러가 났다고 표시해주는 것입니다!
또한 MYSQL인 것을 확인할 수 있습니다! 참고로 mysql은 주석이 #이고 mssql은 --입니다!
그럼 제대로 쿼리문을 작성하여 내부 파일을 봐보도록 하겠습니다!
우선 UNION을 사용하여 sql 쿼리문을 작성할 것인데 UNION은 데이터베이스 쿼리문에서
select 문이 둘 이상일 때 두 개를 결합하여 하나의 결과로 반환해줍니다.
우선 select문을 하기 위해 해당 데이터베이스 칼럼 수를 알아야 합니다.
' union select 1,2,3,4,5,6,7# 이런 형태로 칼럼수가 몇 개인지 알아야 하는데 7개인 것으로 판별되었습니다!
그리고 2 , 3 ,5, 4 숫자는 두 번째 세 번째 네 번째 다섯 번째가 취약한 칼럼 이기 때문에 공격할 시스템 변수는
저곳에 넣어야 합니다!
그럼 해당 MySQL 버전을 확인하는 명령어인
' union select 1,@@version,3,4,5,6,7# 를 입력해 5.0.96 우분투 인 것을 확인했습니다!
' union select 1,2,3, table_name,5,6,7 from information_schema.tables# 쿼리문을 날려
인포메이션 스키마 테이블의 테이블명을 확인할 수 있습니다.
테이블을 살펴보던 중 users라는 중요해 보이는 테이블 이름이 보입니다!
그럼 where 절로 users 테이블 정보 안에 칼럼들을 알아내기 위한 쿼리문을 작성해보면,
' union select 1, column_name,3,4,5,6,7 from information_schema.columns where table_name='uesrs'#
을 입력하였더니 중요해 보이는 칼럼이 몇 개보입니다.
login와 password의 칼럼이 보입니다 뭔가 유저의 아이디와 비밀번호가 담겨있을 거 같은 칼럼들입니다.
그럼 칼럼을 확인하는 쿼리문을 작성해보자면,
' union select 1, login, password,4,5,6,7 from users#으로
회원들의 아이디와 비밀번호를 알아냈습니다!
하지만 비밀번호가 다소 이상한 숫자로 이루어져 있는데요,
이는 원래의 비밀번호가해쉬 함수를 거쳐 알 수 없는 숫자가 된 것입니다.
2. 레벨 High(대응방안)
'를 정삭적인 것으로 해석하여 해당하는 영화가 없다고 뜨네요..
항상 그랬듯 페이지 소스코드를 확인해보겠습니다!
난이도 상은 sqli_check_2 함수로 우회되고 있습니다.
sqli_check_2 함수는 mysql_real_escape_string 함수를 사용하여 입력되는 데이터를 우회하고 있습니다.
여기서 mysql_real_escape_string는 SQL 문법에서 사용하는 특수 문자가 있을 경우 백 슬래시를 붙여
입력 데이터를 SQL 문법으로 인식하지 않게 방어합니다.
여기서 우회되고 있는 문자들은 NULL,\n,\r,\,', " 그러므로 '를 입력하면 \(백슬래사)가 붙어
SQL 쿼리문으로 인식하지 않는 것입니다!
mysql_rela_escape_string 함수는 PHP에서 기본으로 제공해주는 함수이며 SQL Injection을 대응하기 위해선 mysql_rela_escape_string 함수를 사용해야 합니다.
Reference by 비박스 환경을 활용한 웹 모의해킹 완벽실습
'Web Hacking > bee-box' 카테고리의 다른 글
7-3. bee-box 를 사용하여 SQL injection 알아보기! (0) | 2020.03.22 |
---|---|
7-2. bee-box 를 사용하여 SQL Injection 알아보기! (0) | 2020.03.19 |
6-1. bee-box 를 사용하여 SSI Code injection 알아보기! (0) | 2020.03.19 |
5-1. bee-box 를 사용하여 PHP Code injection 알아보기! (0) | 2020.03.19 |
4-1. bee-box 를 사용하여 OS Command Injection 알아보기 (0) | 2020.03.18 |