관리 메뉴

FU11M00N

7-2. bee-box 를 사용하여 SQL Injection 알아보기! 본문

Web Hacking/bee-box

7-2. bee-box 를 사용하여 SQL Injection 알아보기!

호IT 2020. 3. 19. 20:14

 

먼저 SQL 인젝션은 사용자가 입력한 값을 서버에서 제대로 검증을 하지 않아

서버에서 DB의 쿼리문으로 인식하여 DB안의 정보가 노출되거나 인증이 우회되는 취약점이다.

SQL 인젝션은 사용자가 데이터를 입력할 수 있는 곳 어디에서든 발생할 수 있고 이것을 이용해

SQL 쿼리를 변수에 입력을 하여 DB안의 정보를 탈취당 할 수가 있다.

SQL injection은 인젝션 부분에서도 가장 중요한 부분이고 잘 알아야 할 부분이다!

저번 시간과 같은 SQL Injection이지만 이번엔 데이터 전송이 POST인 sqli_6.php 페이지입니다!

사진 1-1

1. 레벨 low

동작원리는 저번과 같이 사진 1-1과 같습니다!

사진 1-2

이것 또한 검색란에 사용되는 변수가 취약하므로 검색란에 SQL 쿼리문을 취약점을 발견할 수 있습니다!

 

하지만 이번엔  POST 방식으로 HTTP 데이터 전송이 이루어져 있기 때문에

burp suite를 사용해 SQL 인젝션 공격을 시도해봅시다!

 

사진 1-3
사진 1-4

사진 1-3, 1-4과 같이 ' union select 1,2,3,4,5,6,7#으로  쿼리문을 작성하고

사진 1-5

사진 1-5의 결과를 보고 칼럼의 수가 7개인 것을 파악할 수 있었습니다!

그리고 전에 포스팅했던 GET 방식 SQL Injection과 같이 2,3,4,5 번째 칼럼이 취약한 것을 확인할 수 있습니다!

 

그럼 GET 방식과 같은 테이블 이름과 칼럼의 이름이 있을 거 같아 예측을 해 간결하게 

login과 password의 칼럼의 값을 확인해보겠습니다!. ( 자세히 테이블과 칼럼을 하나하나 추적하는 것은 전 포스팅인

7-1 SQL Injection 글을 참고하길 바라요!)

 

사진1-6
사진1-7

 

사진 1-6과 사진 1-7에서는 ' union select 1, login, password,4,5,6,7 from users# 명령어로 users라는 테이블에 loginpassword의 칼럼의 값을 알아내는 명령어입니다.

사진1-8

그럼 사진 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

그럼 사진 1-9과 같이 bee 계정의 password를 알아냈습니다.

 사용하는 해쉬 함수는 sha1을 사용하고 password는 bug이네요!!

 

2. 레벨 High(대응방안)

사진 1-10

레벨 High를 풀어보겠습니다!

 

사진1-11

레벨 High에도 맨 처음 동일하게 프락시 툴을 이용해 '를 넣어서 확인해보면

 

 

사진1-12

'를 정상적인 것으로 인식하여 영화가 없다고 뜹니다!

코드를 확인해보자면

사진1-13

난이도 상은 sqli_check_2 함수로 우회되고 있습니다.

사진1-14

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 비박스 환경을 활용한 웹 모의해킹 완벽 실습


Comments