403 Forbidden
eregi
전체 방문자
오늘
어제
  • 분류 전체보기 (22)
    • 컴퓨터 공학 (8)
      • 네트워크 (1)
      • 보안 (4)
      • 리눅스 (2)
      • 프로그래밍, DB (1)
    • 이슈 (1)
      • 보안 이슈 (1)
      • 사회 이슈 (0)
    • 기타 (11)
      • 소프트웨어 (7)
      • 알뜰 정보 (4)
      • 일기장 (0)

403 Forbidden

컴퓨터 공학/보안

PentesterLab - Web for Pentester 2 - (2) SQL Injection

2020. 7. 28. 23:16

# SQL Injection - Example (1)

구축된 테스트 사이트의 SQL Injections 첫번째 예제 페이지로 접속.

 

첫 점검 사항인 single quote (') 입력 후 제출(submit)

 

오류문과 함께 sql문이 출력되었다. username= '''인 것으로 보아 '를 따로 처리해주지 않은 것을 확인.

 

' or 1=1# 입력으로 조건문을 True처리

 

로그인 성공

 

정확한 소스코드 파악을 위해 Debian 웹 서버 경로로 이동.

 

SQL문이 아무 검증없이 사용되고 있음을 확인할 수 있다.

 

# SQL Injection - Example (2)

Example 2로 넘어가보자.

 

Single Quote를 입력했을 때 동일한 오류가 나타난다.

 

동일하게 ' or 1=1#을 입력해본다.

 

먹히지 않는다. 오류가 동일한 것을 보면 SQL 입력은 동일하지만 SQL문 입력 이후의 조건문에서 분기되는 것으로 보인다. 결과의 크기가 1인 경우로 쿼리를 제출해본다.

 

limit을 이용하여 한개의 레코드만 전송하고 쿼리문이 true가 되도록 전송

 

로그인에 성공했다.

 

소스코드를 살펴보자. 예제 1번의 레코드 크기 조건문이었던 res.size > 0과 달리, 예제 2번에서는 res.size가 정확히 1인지 체크하고 있다.

 

# SQL Injection - Example (3)

마찬가지로 '를 입력후 제출 시도

 

아무 반응이 없다. 반응이 없을 경우엔 먼저, \를 입력해본다. sql문에서 \ 문자는 싱글 쿼트(')의 문자표현에 사용된다. 이는 쿼리문의 '와 문자표현을 위한 '를 구분하기 위함이다. 우리는 이 점을 공격에 활용할 수 있다.

 

 

\를 입력했을 때 sql 오류문을 캐치할 수 있다. 여기서 '''\를 입력하면

 

'가 제외된 오류구문이 나오는데, 이를 통해 해당 스크립트에서 single quote(')를 묵인처리 하였다고 판단할 수 있다.

 

ID에 \ Password에 or 1=1#을 입력할 경우 최종 쿼리문은

select * user from select * from users where username =’\' and password =’ or 1=1#

가 되며 최종적으로 username이 "\ and password ="이거나 1=1을 만족할 경우 조건문을 통과하게 된다.

후자가 참이므로 조건문은 참이 된다.

 

'컴퓨터 공학 > 보안' 카테고리의 다른 글

hping3 사용법  (0) 2020.08.06
보안관제 면접질문  (0) 2020.08.01
PentesterLab - Web for Pentester 2 - (1) Setup  (0) 2020.07.28
eregi
Designed By 정상우.

티스토리툴바