일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- javascript
- 자바스크립트 객체
- ES6
- 카카오프로젝트 100
- 자바스크립트 node
- numpy
- 깃허브
- 보안뉴스 요약
- 보안뉴스한줄요약
- Oracle SQL
- php
- GIT
- 자바스크립트
- 보안뉴스 한줄요약
- 자바스크립트 element api
- 카카오프로젝트100
- 다크웹
- 카카오프로젝트
- 자바스크립트 기본 문법
- 보안뉴스요약
- oracle
- 보안뉴스
- 오라클
- 랜섬웨어
- 자바스크립트 prototype
- 파이썬
- 자바스크립트 jQuery
- oracle db
- python
- 자바스크립트 API
- Today
- Total
FU11M00N
7-2. bee-box 를 사용하여 SQL Injection 알아보기! 본문
먼저 SQL 인젝션은 사용자가 입력한 값을 서버에서 제대로 검증을 하지 않아
서버에서 DB의 쿼리문으로 인식하여 DB안의 정보가 노출되거나 인증이 우회되는 취약점이다.
SQL 인젝션은 사용자가 데이터를 입력할 수 있는 곳 어디에서든 발생할 수 있고 이것을 이용해
SQL 쿼리를 변수에 입력을 하여 DB안의 정보를 탈취당 할 수가 있다.
SQL injection은 인젝션 부분에서도 가장 중요한 부분이고 잘 알아야 할 부분이다!
저번 시간과 같은 SQL Injection이지만 이번엔 데이터 전송이 POST인 sqli_6.php 페이지입니다!
1. 레벨 low
동작원리는 저번과 같이 사진 1-1과 같습니다!
이것 또한 검색란에 사용되는 변수가 취약하므로 검색란에 SQL 쿼리문을 취약점을 발견할 수 있습니다!
하지만 이번엔 POST 방식으로 HTTP 데이터 전송이 이루어져 있기 때문에
burp suite를 사용해 SQL 인젝션 공격을 시도해봅시다!
사진 1-3, 1-4과 같이 ' union select 1,2,3,4,5,6,7#으로 쿼리문을 작성하고
사진 1-5의 결과를 보고 칼럼의 수가 7개인 것을 파악할 수 있었습니다!
그리고 전에 포스팅했던 GET 방식 SQL Injection과 같이 2,3,4,5 번째 칼럼이 취약한 것을 확인할 수 있습니다!
그럼 GET 방식과 같은 테이블 이름과 칼럼의 이름이 있을 거 같아 예측을 해 간결하게
login과 password의 칼럼의 값을 확인해보겠습니다!. ( 자세히 테이블과 칼럼을 하나하나 추적하는 것은 전 포스팅인
7-1 SQL Injection 글을 참고하길 바라요!)
사진 1-6과 사진 1-7에서는 ' union select 1, login, password,4,5,6,7 from users# 명령어로 users라는 테이블에 login과 password의 칼럼의 값을 알아내는 명령어입니다.
그럼 사진 1-8과 같이 login의 값과 password의 값이 나왔는데, password는 해쉬 함수가 이루어져 있어
알 수가 없는 숫자입니다. 해쉬 함수는 일방향성의 특징을 가지고 있어 해쉬 함수가 거쳐진 비밀번호는
다시 원래의 비밀번호로 못 돌아오는 성질을 가지고 있는데요.
하지만 레인보우 테이블을 이용해 값을 알아낼 수 있습니다. 레인보우 테이블의 원리는
레인보우 테이블의 원리
-
레인보우 테이블은 한 개가 아니라 몇 천 개로 이뤄져 있다. 이 몇 천 개가 생성된 후 진짜 최종 테이블이 생성된다.
-
최종 테이블: 해당 테이블의 최초 패스워드랑 최종 해시값을 저장한다.
-
최초 패스워드에서 해시 함수를 이용해 해시 값 생성, 생성된 해시 값 사용하여 R함수로 두 번째 확인하고자 하는 패스워드를 생성한다.
-
R함수: 앞에서부터 숫자인걸 가져와서 저장하는 식으로 이뤄진다.
-
최종 테이블은 각각의 테이블의 최초 패스워드와 마지막 해시값으로 이뤄진다
레인보우 테이블의 원리 출처-
http://wiki.hash.kr/index.php/%EB%A0%88%EC%9D%B8%EB%B3%B4%EC%9A%B0_%ED%85%8C%EC%9D%B4%EB%B8%94
레인보우 테이블 - 해시넷
레인보우 테이블(rainbow table)은 해시함수(MD-5, SHA-1, SHA-2 등)를 사용하여 만들어낼 수 있는 값들을 대량으로 저장한 표이다. 보통 해시함수를 이용하여 저장된 비밀번호로부터 원래의 비밀번호를 추출해 내는데 사용된다. 레인보우 테이블은 해시 함수(MD5, SHA-1, SHA-2 등)을 사용하여 만들어낼 수 있는 값들을 대량으로 저장한 표이다. 1980년 마틴 헬만에 의해 소개되었고 MD5 암호화가 쉽게 복호화될 수 있다는 것을 보
wiki.hash.kr
그럼 사진 1-9과 같이 bee 계정의 password를 알아냈습니다.
사용하는 해쉬 함수는 sha1을 사용하고 password는 bug이네요!!
2. 레벨 High(대응방안)
레벨 High를 풀어보겠습니다!
레벨 High에도 맨 처음 동일하게 프락시 툴을 이용해 '를 넣어서 확인해보면
'를 정상적인 것으로 인식하여 영화가 없다고 뜹니다!
코드를 확인해보자면
난이도 상은 sqli_check_2 함수로 우회되고 있습니다.
qli_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-4. bee-box 를 사용하여 SQL injection 알아보기! (0) | 2020.03.22 |
---|---|
7-3. bee-box 를 사용하여 SQL injection 알아보기! (0) | 2020.03.22 |
7-1. 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 |