일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 클라우드보안
- 공개키
- 보안컨설팅
- 로드밸런서
- 인스턴스
- 파일시그니처
- Iam
- 취약점
- EC2
- 로그분석
- azure
- 정보보호
- 개인정보보호법
- 클라우드
- ISMS-P
- 네이버클라우드
- 클라우드자격증
- mysql
- 클라우드서비스
- metasploit
- AWS SAA
- Burp Suite
- 정보보안
- RDS
- isms
- 클라우드 자격증
- AWS
- AWS SSA
- 와이어샤크
- ncp
- Today
- Total
처음 만나는 클라우드 보안
SQL 인젝션(Injection)이란? 해킹실습과 대응방안 본문
이번 포스팅에선 대표적인 해킹 기법인 'SQL Injection'에 대해 알아보고, 이를 이용한 해킹을 실습한다.
SQL Injection이란?
: 공격자가 보안상의 취약점을 이용하여 임의의 SQL 쿼리 문을 주입하여 데이터베이스가 비정상적으로 작동하여 공격자에게 중요한 정보를 가져오게 하는 해킹 기법을 말한다. OWASP TOP10 에서도 수년간 1순위로 꼽히는 치명적인 보안위협이다.
[환경구축] https://cloudinfosec.tistory.com/26
1. 로그인 우회 (Login Bypass)
: 아이디와 패스워드 없이 SQL 쿼리 구문으로 로그인한다. 로그인 창에는 ID와 PW를 입력받는다. 따라서 서버에 전송되는 값은 입력 ID, PW에 일치하는 계정 정보를 찾는 아래와 같은 SQL 쿼리문일 것이다.
예상 SQL 구문 : select id, pw from??? where id = 'ID' and pw = 'PW;
1) ID에 인젝션 코드 삽입
ID >> 'or 1=1 --
: 우선 작은따옴표로 구문을 닫아준다. (NULL값 생성) 'or'에 이어 TRUE값을 반환하는 값을 입력한다. (1=1 또는 a <b) 뒤이은 구문들은 MS-SQL의 주석 표식인 --로 무효화시킨다.
select id, pw from??? where id = ' 'or 1=1 -- ' and pw = ' ';
2) PW에 인젝션 코드 삽입
: PW이전에 ID 입력란이 먼저 존재한다. 공란일 경우 에러 창이 발생하기 때문에 조건을 TRUE로 만족시킬 ID 정보가 필요하다. 따라서, 접근 가능한 자유게시판에서 ID를 선정하였고 (webmaster) PW에는 위와 동일한 SQL 구문을 삽입한다.
ID >> webmaster
PW >> 'or 1=1 --
select id, pw from??? where id = 'webmaster' and pw = ' 'or 1=1 -- ';
SQL 인젝션 수행 시 계속 'Superman'으로 로그인되는 이유 => 계정 정보가 특정되지 않은 경우 해당 Table중 최상위의 값을 호출한다.
3) 특정 계정으로 로그인
: 현재까지 superman 계정으로만 로그인되던 injection을 webmaster라는 특정 계정으로 로그인을 시도한다.
ID: webmaster' --
select id, pw from??? where id = 'webmaster' -- 'and pw=' ';
2. 특수문자 삽입 (로컬 프락시 활용)
: SQL 삽입 공격 시 삽입 문자에 제한이 존재하는 경우, 로컬 프락시(Loval Proxy) 프로그램을 활용하여 서버로 전송되는 클라이언트의 요청을 조작하여 인젝션 구문을 주입할 수 있다.
Burp Suite (Community edition) 다운로드
: 서버와 클라이언트 간의 요청 및 응답 패킷을 Intercept 하여 조작할 수 있는 웹 프락시 툴이다. 이와 유사한 프록시로 Paros, Fiddler2, Charley, Achilles 등이 있다.
[Burp Suite 다운로드] https://portswigger.net/burp/communitydownload
1) 로컬 프록시 설정
인터넷 옵션 > 연결 > LAN설정 (프락시 서버 8080 포트)
2) Burp Suite 실행 후 인젝션
따라서, 위와 같이 보안대책이 Client서버에 적용 될 경우, 프락시 조작 수법으로 취약점에 노출될 가능성이 크다는 것을 알 수 있다.
3. Blind SQL 인젝션인젝션
: 공격자는 데이터베이스에 대한 정보가 거의 없는 상태에서 임의로 에러를 유발해 발생된 에러 정보를 통해 필요한 DB정보를 수집하는 기법을 말한다. 대표적인 삽입 구문으로 '‘having 1=1 --'이 있다.
정상적인 SQL 쿼리 구문상에서 having은 group by이 선행되어야 한다. group 지정 없이 having만 전달될 경우 서버 측 오류를 나타내는 HTTP500 메시지를 나타내며 DB에 대한 정보를 노출시킨다.
ID >> 'havin 1=1 --
select id, pw from?? where if =’ ‘having 1=1 -- ‘ and pw = ‘ ‘
‘having 1=1 -- 인젝션 결과
문제는 또 다른 SQL 인젝션에 활용될 수 있는 DB 데이터를 고스란히 노출한다는 점이다.
Blind 인젝션 결과 웹서버, DB 테이블테이블 명, 컬럼명, 아파치 버전 등등 데이터베이스의 테이블 명들을 알 수 있었다. (아래)
Uid | Userid | passwd | username | regnol | Zipcode | addr | |
패스워드 변경 시도
: 수집된 데이터베이스 정보를 통해 특정 계정의 패스워드를 변경할 수 있다.
';update tbl_member set passwd='1234' where userid='webmaster'; -- (webmaster의 패스워드를 1234로 update)
4. SQL Injection 대응법 => Secure Coding
시큐어 코딩 (Secure Coding)이란?
: 보안 취약점의 원인을 개발단계부터 제거하기 위한 개발 방법을 말한다. 이를 위하여 Escape처리 함수와 같은 입력값 검증방법을 개발 단계부터 적용시킨다. 최근 해킹 수법의 고도화로 인하여 보안이 고려된 개발에 대한 필요성이 더욱 증대되고 있다.
mysqli_real_escape_string
: SQL 주입 공격에 사용되는 특수문자의 입력을 방지하기 위해 'Escape' 기능 활용해 특수문자의 기능을 무력화시키는 기법이다. Escape (Back slash)에 수반되는 특수문자는 모두 문자열로 저장된다.
2 \+3\=5
: 함수를 사용하여 자동적으로 특수문자 앞에 역슬레쉬(\)를 붙여 특수문의 기능을 없앤다.
(ex. NUL (ASCII 0), \n, \r, \, ‘ , ” , 등 control+Z를 보면 앞에 \를 추가)
참고자료
https://noirstar.tistory.com/264
https://m.blog.naver.com/lstarrlodyl/221837243294
https://www.insilicogen.com/blog/383
본 게시물은 학습기록을 위한 포스팅입니다. 악의적인 목적으로 이용 시 발생할 수 있는 모든 법적 책임은 자신에게 있습니다.
'정보보안' 카테고리의 다른 글
웹쉘(WebShell)기본개념 + 실습하기 (0) | 2022.05.10 |
---|---|
난독화 (Obfuscated code): 인코딩과 디코딩 정리 + 디코딩 실습 (0) | 2022.05.10 |
SQL Injection 실습을 위한 환경 구성하기 (with Win7 server) (0) | 2022.05.09 |
해킹복습-공격대상: Window10 (0) | 2022.05.05 |
SQL 기본구동 및 인젝션(Injection) 실습 (0) | 2022.05.04 |