관리 메뉴

FU11M00N

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

Web Hacking/bee-box

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

호IT 2020. 3. 23. 21:16

안녕하세요! 이번엔 sqli_3.php 페이지 SQL Injection (Login Form/Hero) 입니다!!

 

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

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

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

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

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

 

사진 1-1

1. 레벨 low

 

사진 1-2

음.. 뭔진 모르겠지만 우선 항상 결과 값을 참으로 만들어주는 쿼리문을 삽입해보겠습니다!

사진 1-3

' or 1=1# 은 쿼리의 값을 참으로 만들어줍니다!! Password 필드에는 아무 값이나 집어 넣었습니다!!

 

사진 1-4

오! 그럼 Neo 의 계정으로 로그인된것같습니다!!  

Your secret : Oh why Didn't Took That BLACK Pill? 은 아마 비밀번호의 힌트..? 같은거 인것같습니다!

우선 비밀번호를 아무거나 집어넣었는데 로그인이 됐다는게 중요한 점인거같은데요, 왜 이렇게 됐는지 소스코드를 분석해보니,

 

사진 1-5

 

데이터베이스에서 변수를 따로 입력안하고 둘이 같이 AND 연산자를 사용하여 한줄의 DB 아이디, 비밀번호을 출력하기때문에 발생하는 취약점입니다! 

2. 레벨 High(대응방안)

 

사진 1-6

사진 1-6에서 ' or 1=1 # 을 삽입하니 오류메세지가 뜹니다.. 

항상 그랬듯 소스코드를 봅시다!!

사진 1-7

난이도 상은 sqli_check_2 로 우회되고있습니다! 

그럼 functions_external.php 소스코드를 확인하여 제대로 확인해봅시다!! 

사진 1-8

sqli_check_2 mysql_real_escape_string 함수를 사용하고 있었고 이 함수는 PHP에서 제공하는 기본적인 함수이다.

 

SQL 문법에서 사용하는 특수 문자가 있을 경우 백 슬래시를 붙여 입력 데이터를 SQL문법으로 인식하지 않게 방어하는 기법입니다. 우회할 수 있는 문자는 'NULL , \n , \r , \ , '등입니다.  ' 가 안 먹히는 이유는 '를 삽입하면 실제 서버에서는

'\으로 우회되어 SQL 쿼리문으로 인식되지 않는 것입니다!

 

Reference by 비박스 환경을 활용한 웹 모의해킹 완벽 실습




Comments