일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 SQL
- 파이썬
- 보안뉴스한줄요약
- javascript
- 카카오프로젝트 100
- php
- 자바스크립트 API
- 랜섬웨어
- 자바스크립트 객체
- GIT
- 오라클
- 보안뉴스 요약
- numpy
- 자바스크립트 node
- 자바스크립트 기본 문법
- 자바스크립트 jQuery
- oracle
- 자바스크립트 prototype
- 깃허브
- 카카오프로젝트
- 보안뉴스요약
- oracle db
- 보안뉴스
- 카카오프로젝트100
- ES6
- 자바스크립트
- 보안뉴스 한줄요약
- python
- Today
- Total
FU11M00N
7-4. bee-box 를 사용하여 SQL injection 알아보기! 본문
안녕하세요! 이번 시간엔 sqli_6.php 페이지를 sql injection 해보겠습니다!
이번엔 메서드가 POST인 드롭다운 메뉴 홈페이지입니다!!
그럼 Burp suite를 사용해해 보겠습니다!!
먼저 SQL 인젝션은 사용자가 입력한 값을 서버에서 제대로 검증을 하지 않아
서버에서 DB의 쿼리문으로 인식하여 DB안의 정보가 노출되거나 인증이 우회되는 취약점이다.
SQL 인젝션은 사용자가 데이터를 입력할 수 있는 곳 어디에서든 발생할 수 있고 이것을 이용해
SQL 쿼리를 변수에 입력을 하여 DB안의 정보를 탈취당 할 수가 있다.
SQL injection은 인젝션 부분에서도 가장 중요한 부분이고 잘 알아야 할 부분이다!
1. 레벨 low
sqli_13.php 는 SQL Injection 메서드가 POST인 페이지입니다! 이곳에 SQL 인젝션을 하기 위해
프락시 툴인 Burp suite를 사용하여 분석해보겠습니다!
사진 1-3와 사진 1-4와 같이 movie라는 변수가 보이고, movie 변수 안에 쿼리문을 삽입하여 공격을 하겠습니다.
먼저 mysql의 버전을 알 수 있는 쿼리문을 삽입하여 공격이 가능한지 한번 더 확인하고
버전을 확인한 뒤 이제 테이블과 칼럼을 확인하여 중요한 정보를 알아내 보겠습니다!
사진 1-8과 1-9의 쿼리문을 'movie' 함수에 삽입하여 데이터베이스 안에 내포되어있는 정보를 확인해보면,
그럼 ID가 root이고 비밀번호가 해쉬 함수로 이루어져 알 수가 없는 숫자로 되어있습니다.
하지만 레인보우 테이블을 이용하여 비밀번호는 알아낼 수 있습니다!
레인보우 테이블을 이용해 주입한 해쉬 함수의 타입과 비밀번호가 뜹니다!
하지만 sqli_2.php과 sqli_6.php 는 하나의 결과물 즉 하나의 테이블명 , 칼럼명 밖에 뜨지 않아
수동으로 확인하기에는 시간이 너무 지체하고 오래 걸리기 때문에
SQL 인젝션의 자동화 툴인 'sqlmap'을 사용하여 데이터베이스의 테이블 명을 알아보겠습니다
'sqlmap'은 칼리 리눅스에서 실습해보겠습니다!
사진 1-12 과같이 칼리 리눅스의 터미널에서 sqlmap을 입력하면 sqlmap의 사용법을 알려줍니다!!.
-u 옵션에는 자동화 공격을 시도할 페이지의 주소를 입력하고 POST 메서드를 사용하기 때문에
--data 옵션을 사용하여 인젝션 시도할 변수를 명시한다. 또한, 'bWAPP'는 로그인을 해야 사용하기 때문에 유저의
쿠키값을 입력해야 변수에 대한 자동 인젝션 공격이 수행됩니다. 쿠키 값을 관리자 도구 혹은 버프 스위트로 알 수 있습니다!
sqlmap -v 3 -u "http://192.168.32.128/bWAPP/sqli_13.php" --cookie="security_level=0; PHPSESSID=d7 f15 ca15 e0 a 81 f2 bd7 f8 a1881 eac08 d" --data "movie=1&action=go" --dbs
사진 1-13과 같이 명령어를 칩니다. -u에 공격할 페이지 주소를 입력하고
--datab에는 인젝션을 시도할 변수를 적습니다! 또한 bWAPP는 로그인이 되어야 사용 가능하기 때문에
cookie 옵션으로 쿠키값을 적어줍니다!!
(sqlmap에 대한 명령어를 간단히 설명해놓은 제 블로그인 https://nevertrustbrutus.tistory.com/41 페이지에서 확인 가능합니다!)
사진 1-15와 같이 bWAPP 서버의 데이터베이스 버전과 웹서버 등 자세한 설명과 중요한 정보인 데이터베이스 명이 노출되었습니다! 그럼 'movie' 변수를 통해 -p 옵션으로 SQL Injection 쿼리문을 주입하겠습니다!
sqlmap -v 3 -u "http://192.168.32.128/bWAPP/sqli_13.php" --cookie="security_level=0; PHPSESSID=d7 f15 ca15 e0 a 81 f2 bd7 f8 a1881 eac08 d" --data "movie=1&action=go" -p "moive" --tables
사진 1-16처럼 -p 취약한 변수인 'movie'에 --tables의정보를확인합니다!!
사진 1-15에서 봤던 4개의 데이터베이스들의 테이블이 전부 출력됩니다!!
그중에서 저희는 bWAPP라는 데이터베이스에서 'users'라는 테이블의 칼럼 내용들을 알아보도록 하겠습니다!!
사진 1-18의 명령어는 'users'의 테이블의 칼럼을 보기 위해 아까 사용했던 --tables 대신 --columns 옵션을 사용했습니다!!
그럼 bWAPP라는 데이터베이스에서 'users'라는 테이블의 총 9개의 칼럼이 출력되었는데요,
그중 중요해 보이는 칼럼인 'id', 'login, ' 'password'의 3개의 칼럼의 값을 알아내기 위해
sql Injection (union 베이스) 쿼리문을 작성해보겠습니다!!
'movie' 변수 안에 sql injection 쿼리문을 작성하여
그럼 '1'은 'id'의 값으로 첫 번째 를 뜻하는 것 같고, 'A.I.M'는 'login'의 계정 이름 '해쉬 함수로 이루어진 숫자와 영어들' 은 'password'의 값으로 3개의 칼럼이 출력되었습니다.
해쉬 함수로 이루어진 값을 레인보우 테이블에 대입하여 값을 알아보면
sha1의 타입을 쓰고 결과는 'bug'가 나왔습니다!
2. 레벨 High(대응방안)
난이도 '상'에서 '를 삽입해도,
sql Injection 이 가능하다는 반응이 안 온다..!!! 소스코드를 봐보자!!
sqli_2-ps.php에 내용이 있고 우회 함수를 사용하지 않고
fetch_object 함수를 사용하여 객체로 생성합니다.
그다음 moive 변수에 입력한 숫자 값이 'id' 변수에 대입됩니다
id 변수는 'recordeset'에 저장된 데이터 베이스 내용의 순서 번호를 뜻하고,
'bind_param' 함수를 사용하여 데이터 베이스에서 사용하는 변수들을 불러와 execute 함수로 쿼리를 실행합니다.
그리고 'bind_result' 함수로 각 변수를 연결하고 'store_result' 함수로 쿼리 결과를 저장합니다!
즉 데이터베이스 안에서 칼럼을 개별로 호출하여 연결하는 방식을 사용하여 sql 인젝션을 대응합니다.
Reference by 비박스 환경을 활용한 웹 모의해킹 완벽 실습
'Web Hacking > bee-box' 카테고리의 다른 글
7-6. bee-box 를 사용하여 SQL injection 알아보기! (0) | 2020.03.23 |
---|---|
7-5. bee-box 를 사용하여 SQL injection 알아보기! (0) | 2020.03.23 |
7-3. bee-box 를 사용하여 SQL injection 알아보기! (0) | 2020.03.22 |
7-2. bee-box 를 사용하여 SQL Injection 알아보기! (0) | 2020.03.19 |
7-1. bee-box 를 사용하여 SQL injection 알아보기! (0) | 2020.03.19 |