티스토리 뷰
1. Form SQL Injection
Form은 검색하려는 데이터를 입력하는 HTML의 구조이다.
User ID에 1을 입력하면고 Submit을 누르면 http://서버IP/vulnerabilities/sqli/?id=1&Submit=Submit URL로 요청을 하게된다.
이후 id라는 키값에 1이라는 값이 입력되어 $id라는 변수에 할당되고 아래와 같이 쿼리의 where절에 있는 $id에 1이 입력이 되는 구조이다.
$id = $_REQUEST[ 'id' ]; |
Form SQL Injection은 쿼리 문의 where 절을 무력화 시키는 방법이다. 아래와 같이 쿼리를 작성하면 user_id가 공백 또는 1=1의 조건을 만족하는 유저가 나오기 때문에 결과적으로 SELECT first_name, last_name FROM users 가 실행된다. 이후 #은 뒤에오는 '를 주석처리(mysql 기준)하는 기호이다.
SELECT first_name, last_name FROM users WHERE user_id = '' or 1=1 #'; |
이렇게 되면 아래와 같이 모든 유저가 나오는 것을 알 수 있다.
이를 막기위한 방법에는 여러 함수를 적용할 수 있다.
1. mysql_real_escape_string() 함수 사용
$id = mysql_real_escape_string($GLOBALS["___mysqli_ston"], $id); |
2. prepared statement() 함수 사용
$data = $db->prepare( 'SELECT first_name, last_name FROM users WHERE user_id = (:id) LIMIT 1;' ); |
위의 두가지 방법을 사용하면 SELECT first_name, last_name FROM users WHERE user_id = '' or 1=1 #'; 쿼리문의 빨간색 부분을 단순히 문자로 취급하여 id 값이 ' or 1=1 # 인 것을 찾게 된다.
'Security > 어플리케이션' 카테고리의 다른 글
[WEB] DVWA 사이트를 이용한 CSRF 공격 실습 (0) | 2021.01.31 |
---|---|
[WEB] DVWA 사이트를 이용한 Union SQL Injection (0) | 2021.01.31 |
- Total
- Today
- Yesterday
- 카카오페이면접후기
- t검정
- Ai
- 우선순위큐
- 카카오페이
- 그리디
- 백준
- 코딩테스트
- FastAPI
- 프로그래머스
- linux
- t-test
- 보안기사
- 보안
- LangChain
- 리눅스
- 정보보안
- synflooding
- java
- llm
- 시간초과
- Python
- lightsail
- 분산시스템
- 파이썬
- 정보보안기사
- 딥러닝
- 다이나믹프로그래밍
- springboot
- 자료구조
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |