일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 카카오프로젝트
- 보안뉴스요약
- javascript
- 파이썬
- GIT
- python
- 랜섬웨어
- 자바스크립트 element api
- 카카오프로젝트 100
- 자바스크립트 객체
- ES6
- numpy
- 깃허브
- 다크웹
- 보안뉴스 요약
- php
- 자바스크립트 기본 문법
- 자바스크립트 node
- Oracle SQL
- 자바스크립트 API
- 자바스크립트
- 보안뉴스 한줄요약
- 자바스크립트 jQuery
- 보안뉴스한줄요약
- 보안뉴스
- 오라클
- 카카오프로젝트100
- 자바스크립트 prototype
- oracle db
- oracle
- Today
- Total
FU11M00N
7-5. bee-box 를 사용하여 SQL injection 알아보기! 본문
안녕하세요! 이번 시간엔 sqli_10-1 페이지를 SQL Injection 해보겠습니다!
먼저 SQL 인젝션은 사용자가 입력한 값을 서버에서 제대로 검증을 하지 않아
서버에서 DB의 쿼리문으로 인식하여 DB안의 정보가 노출되거나 인증이 우회되는 취약점이다.
SQL 인젝션은 사용자가 데이터를 입력할 수 있는 곳 어디에서든 발생할 수 있고 이것을 이용해
SQL 쿼리를 변수에 입력을 하여 DB안의 정보를 탈취당 할 수가 있다.
SQL injection은 인젝션 부분에서도 가장 중요한 부분이고 잘 알아야 할 부분이다!
1. 레벨 low
사진 1-2의 홈페이지 모습입니다 sqli_10.php URL을 가지고 있네요!
AJAX 은 Asynchronous JavaScript and XML의 약어이고, HTML, 자바스크립트, JSON을 혼합하여 사용하는 기술입니다!!
JSON 은 Javascript Object Notation의 약어이고, 웹 서버와 클라이언트가 데이터를 주고받는 표현 방법입니다!!
JQuery 은 자바스크립트 라이브러리 중 하나이고, 클라이언트에서 스크립트 언어를 사용할 때 이를 단순화하고, AJAX 기능을 제공합니다!!
그래서 이 홈페이지는 AJAX 기술을 사용해 submit 버튼이 없어도 검색어가 바로 출력이 되네요!
음.. 그러면 ' or 1=1# 을해서 SQL Injection 공격이 가능한지 확인해보니 되는 것 같습니다!!
' or 1=1#은 결과를 항상 참으로 만드는 쿼리문입니다!!
'Search for a moive'의 필드 안에 ' union select 1, table_name,3,4,5,6,7 from information_schema.tables#
DB의 테이블 이름을 확인할 수 있는 쿼리문을 작성하여 주입해보니,
데이터베이스에 존재하는 모든 테이블들이 출력되었습니다! (참고로 1~7까지 하는 이유는 호출되는 칼럼수와 쿼리문이 칼럼수가 일치해야 하는데 sqli_10-1.php 홈페이지에선 칼럼이 7개 이기 때문이다.)
' union select 1, database(),3,4,5,6,7#' 쿼리문을 삽입하여 해당 페이지의 데이터베이스를 확인했습니다!
' union select 1, table_name,3,4,5,6,7 from information_schema.tables where table_schema="bWAPP"#
의 쿼리문을 삽입해 데이터베이스 이름이 bWAPP인 db안에 있는 테이블들의 이름을 알아냈습니다!!
그중 중요해 보이는 테이블 이름인'users'의 테이블 안에 들어있는 칼럼들을 출력하기 위한 쿼리를 작성하자!
id와 login, password, secret 등 중요한 정보가 담겨있을 거 같은 칼럼들이 출력되었습니다!!
그럼 칼럼들의 값을 보기 위한 쿼리를 짜 봅시다!! (이제 하도 많이 해봐서 다들 감이 오시죠??!!)
A, I, M과 bee의 id의 순서 번호 login, password가 출력되었습니다.
password는 해쉬값으로 되어있기 때문에 이를 풀기 위한 레인보 테이블을 사용해보겠습니다!
A.I.M의 해쉬 함수는 sha1을 사용하고 결과 값은bug입니다!!
2. 레벨 High(대응방안)
난이도'상'에서는 항상 참이 되는 쿼리문을 넣어도 공격이 안됩니다! 이를 파악하기 위해 소스코드를 확인해봅시다!!
sqli_10-1.php 에서 AJAX를 호출할 시에 sqli_10-2.php를 호출하는 코드를 발견했습니다!!
그럼 sqli_10-2.php 코드도 확인해보겠습니다!!
sqli_10-2.php 소스코드를 확인해보니 case: 2 즉 난이도 상은 sqli_check_2으로 우회를 하고 있었다
그럼 functions_external.php 소스코드를 확인하여 제대로 확인해보자!
sqli_check_2는 mysql_real_escape_string 함수를 사용하고 있었고 이 함수는 PHP에서 제공하는 기본적인 함수이다.
SQL 문법에서 사용하는 특수 문자가 있을 경우 백 슬래시를 붙여 입력 데이터를 SQL문법으로 인식하지 않게 방어하는 기법입니다. 우회할 수 있는 문자는 'NULL , \n , \r , \ , '등입니다. 즉 ' 가 안 먹히는 이유는 '를 삽입하면 실제 서버에서는
'\으로 우회되어 SQL 쿼리문으로 인식되지 않는 것입니다!
Reference by 비박스 환경을 활용한 웹 모의해킹 완벽 실습
'Web Hacking > bee-box' 카테고리의 다른 글
7-7. bee-box 를 사용하여 SQL injection 알아보기! (0) | 2020.03.23 |
---|---|
7-6. bee-box 를 사용하여 SQL injection 알아보기! (0) | 2020.03.23 |
7-4. bee-box 를 사용하여 SQL injection 알아보기! (0) | 2020.03.22 |
7-3. bee-box 를 사용하여 SQL injection 알아보기! (0) | 2020.03.22 |
7-2. bee-box 를 사용하여 SQL Injection 알아보기! (0) | 2020.03.19 |