선릉역 1번 출구
[Becoming the hacker] Efficient Discovery 본문
공격의 첫 시작: Application을 공격할 때 가장 빠른 방법으로 해당 application에 관한 많은 정보를 알아내는 것이 목표임
Type of assessments
- white-box
- gray-box
- black-box
white box | gray box | black box |
모든 정보에 접근할 수 있는 권한 | 일정 정보 | zero knowledge |
highest privilege | certain level of access or knowledge | perspective of external threat |
다음 정보 이용 가능 - User accounts - Source code - Infrastructure design documents - Directory listing |
공격자에게 다음 정보 제공 | 어떠한 정보도 제공되지 않고 attacker는 모든 정보를 OSINT를 통해 수집하여야 함 |
Target mapping
- nmap: port scan / service discovery
- Metasplot Framework(MSF): penetration testing framework
- DB 구성 - service postgresql start
- Metasploit 구동 - msfconsole 명령어
- Metasploit & DB 연동 확인 - msf > db_status
- Metasploit 종료 - msf > exit
- Metasploit의 DB initialize하기 - msfdb init
- msfdb 명령어는 Metasploit이 database에 연결하기 위해 필요한 설정 파일을 생성해줌
- Metasploit 콘솔 접속 후 db configuration file 연결 확인 - msfconsole > db_connect -y > db_status로 연동 확인
- target application에 맞는 workspace 생성 - workspace -a <NAME>
- target application에 맞는 workspace 생성 시 MSF module이나 scan, exploits의 결과를 관리하기 좋음
- workspace list 확인 - msf > workspace
- nmap 스캔 결과 DB 저장 시에는 db_nmap을 사용함
- db_nmap 사용 시 Metasploit database
- ex) db_nmap -sV -Pn -v [IP 대역]
- 스캔이 완료 되면, services명령어를 통해 결과를 query하거나 filtering할 수 있음
- masscan
- nmap은 훌륭하지만, 속도가 느려서 거대한 IP 대역을 scan해야하는 경우에 일반적인 선택은 아님
- 속도를 생각했을 때 masscan이 더 나은 선택임
- 옵션
- -p: 포트
- --banner: open port에 대해 정보 검색 시도
- --rate
- --resume paused.conf: ctrl + c로 작업을 중지했을 때 재개하는 방법
- WhatWeb
- masscan와 nmap을 통해 정보를 도출한 후 진행
- simple but effective
- 특정 web application이 사용하는 기술을 확인할 수 있음
- 1,000개가 넘는 plugins
- Nikto
- 6,500개 이상의 잠재적으로 위험한 파일을 포함하여 웹 스캐닝 진행
- CMS scanners
- target이 Joomla, Drupal, WordPress 같은 CMS를 사용할 때 사용
- 특히, WordPress는 다양한 플러그인을 제공하여 인기있는 CMS이지만 그 만큼 attack surface가 wide함
- Tools: WPScan, JoomScan, droopescan, CMSmap
Efficient brute-forcing
- brute-forcing: login form이나 web application's root directory를 찾는데 사용하는 공격
- 취약한 credentials이나 application의 misconfiguratio이 문제가 되는 경우가 많음
- rockyou.txt 라는 1,400만개 wordlist를 사용할 수도 있으나, 더 효율적인 목록을 대상으로 brute-force를 하는 것이 더 나을 수 있음
- SecLists: https://github.com/danielmiessler/SecLists.
- 대안책은 FuzzDB: https://github.com/fuzzdb-project/fuzzdb
- git clone [URL] 명령어를 통해 최신 버전 download
root@kali:~/tools# git clone https://github.com/danielmiessler/SecLists
Seclist Wordlist | 설명 |
Discovery | web contents, DNS, common Nmap ports |
Fuzzing | FuzzDB, Brutelogic, Polyglot payloads(다양한 언어) 그 외 |
IOCs | 침해 지표 |
Miscellaneous | 다양한 것들 |
Passwords | 비밀번호 관련 |
Pattern-Matching | - |
Payloads | webshells for common languages, 윈도우 netcat, EICAR 테스트 파일 |
Usernames | - |
*Nikto와 nmap이 항상 원격으로 실행가능한 취약점을 발견하는 것은 아니지만, discovery에 유용한 wordlist를 결정할 때 유용한 데이터를 반환하는 경우가 있음
생성되는 정보를 기반으로, 간단한 추론을 할 수 있음
- IIS Web server는 PHP보다 ASP.NET으로 애플리케이션 개발을 할 가능성이 높음
- PHP는 WIndows에서 여전히 사용 가능하지만, 생산 환경에서 자주 쓰이지는 않음
- 반대로, Linux는 ASP 프로세서가 있지만 PHP나 Node.js가 더 일반적으로 쓰임
이를 기반으로, file burte forcing 진행 시에 Windows 환경에는 .asp나 .aspx의 확장자를 사용하고 Linux에는 .php의 확장자가 good start가 됨
- robots.txt
- 합법적인 크롤러 봇에 allowed 또는 ignore의 instructions을 담고 있는 파일
- 숨겨진 디렉토리나 파일에 대한 정보를 제공하여 brute-forcing 공격 시 starting point가 됨
User-agent: *
Disallow: /cgi-bin/
Disallow: /test/
Disallow: /~admin/
*크롤러는 해당 정보를 무시하지만, attacker는 이를 활용할 수 있음
Content discovery
- Burp Suite - Intruder module
- content discovery 수행을 쉽게 해줌 - 숨겨진 디렉토리나 파일 획득 및 credentials 추측이 용이함
- OWASP ZAP
- Burp Suite의 무료 대안이며, Intruder 모듈과 유사한 Fuzzer를 제공함
- Gobuster
- content discovery를 하는 CLI 유틸리티임
- Kali에 깔려있지 않고 Github에서 다운로드를 진행해야 하는데, 해당 유틸리는 Go언어로 제작되어 있어 golang 컴파일러 설치가 필요함
Persistent Content discovery
- application security는 올바르게 구현하기 어렵고, 유지보수도 힘듦
- 초기 content discovery를 진행할 때, 한 번에 멈추지 않는 것이 중요함
- 초기 robots.txt에서 얻은 단서로 ADMIN DIRECTORY에 접근 시 403 error로 access가 거부되었지만, 추후 directory brute forcing을 통해 하위 디렉토리에는 access success함
- 흔한 misconfiguration은, parent directory의 보호가 subdirectories를 보호한다고 생각하는 것임
Payload processing
- 공격을 시도하기 전 Burp Suite의 Target Scope 기능을 사용하여 Attack Score를 지정
- Burp Suite를 attack proxy로 지정하면, 방문 URL이 proxy's history 기록에 남음
- 여러 Burp Suite의 기능 설명
Polyglot payloads(=여러 환경에서 구동하는 강력한 코드 조각)
- Attack들이 취약점을 찾기 위해 최소의 noise로, 응용 프로그램의 입력 컨트롤을 신속하게 처리할 수 있음
- 많은 복잡한 애플리케이션에서 사용자의 입력값은 여러 검증 절차를 거치기 때문에 하나의 step이라도 해당 payload를 block한다면, 애플리케이션의 취약점을 발견하는 것이 더욱 힘들어짐
- polyglot payload는 다양한 방법을 결합하여 해당 프로그램에서 injection을 시도하려고 함
- OWASP XSS filter evasion cheat sheet에서 application의 filter를 우회할 수 있는 polyglot payloads를 제공함
예시)
jaVasCript:/*-/*'/*\'/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/-- !>\x3csVg/<sVg/oNloAd=alert()//>\x3e
- 대/소문자가 섞여 있음
- 다음의 정규 표현식 필터를 우회하려는 것
- s/onclick=[a-z]+\(.+\)//g
- regex101's에서 정규식 catch를 확인할 수 있음
- \x3c , \x3e는 <, >로 반환될 수 있음
- 대다수의 개발자가 security fix를 진행할 때 시간 제약 하에서 진행하기 때문에 문제가되는 framework를 수정하기보단 문제 일부만을 수정함
Code obfuscation(코드 난독화)
- 모든 애플리케이션 방화벽이 악의적인 입력을 확인하고 차단하는 것은 아님
- inline 솔루션은 403나 500 http 응답 코드를 통해 연결을 중단함
- 이 경우 payload의 어떤 부분이 safe하고, block을 trigger했는지 확인하기 어려움
- 보통, inline firewall의 경우 들어오는 데이터를 처리할 때 상당한 지연을 초래할 수 없기 때문에 sql injection이나 xss attack을 탐지할 때 simple한 logic을 사용함
- 특정 키워드를 찾고 잠재적으로 악의적인 것으로 판단함
- alert()를 자체적으로 많은 false-positive를 생성하기 때문
- 예를 들어 alert이 8680439..toString(30)과 동일한 것처럼, some modification의 과정을 거치면 더 안전한 ployglot payload를 얻을 수 있음
요약
- Nmap과 Nikto와 같은 도구로 시작
- WPScan과 CMSmap을 통해 보편적으로 잘못구성되고, 업데이트되지 않는 CMS를 발견할 수 있음
- 큰 네트워크의 경우 Masscan을 사용하여 신속하게 식별 가능
- Burp Suite와 ZAP 같은 웹 컨텐츠 취약점 발견 툴은 Seclists나 FuzzDB와 같은 적절한 wordlists를 사용하여 효율적으로 스캔 가능
*engagement = 참여
*leverage = 영향력
*verbose = 장황한(말이 많은)
*claim to fame = ~가 유명한 이유
*trove = 사방
*barrage = 봉쇄
*ever-evolving = 지속해서 발전
*obscure = 모호한
*entice = 꾀다
*deviatioin = 편차
*remediate = 업데이트를 적용하다
*bypass rudimentary = 초보적인 것을 우회하다
*paramount = 가장 중요한
*low-hanging fruit = 쉽게 이룰 수 있는 성과
참고 사이트
nmap option: https://hagsig.tistory.com/94
Nmap 모든 옵션/스캔 방식 총 정리(설명과 예시)
Nmap 모든 옵션/스캔 방식 총 정리(설명과 예시) 1. 대상 사양(TARGET SPECIFICATION) 옵션 설명 예시 -iL 스캔할 대상을 파일에서 가져옴 nmap -iL /hagsig/scanlist.txt -iR 지정한 숫자만큼 무작위 대상을 스캔 nma
hagsig.tistory.com
• Metasploit: https://www.metasploit.com/
• WPScan: https://wpscan.org/
• CMSmap: https://github.com/Dionach/CMSmap
• Recon-NG (available in Kali Linux or via the Bitbucket repository): https://bitbucket.org/LaNMaSteR53/recon-ng
• OWASP XSS Filter Evasion Cheat Sheet: https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
• Elsobky's GitHub page: https://github.com/0xSobky
• Brutelogic cheat sheet: https://brutelogic.com.br/blog/cheat-sheet/
• SecLists repository: https://github.com/danielmiessler/SecLists
• FuzzDB: https://github.com/fuzzdb-project/fuzzdb
'Project > Program' 카테고리의 다른 글
[tryhackme] Google Dorking (0) | 2023.11.06 |
---|---|
[Becoming the hacker] Low-Hanging Fruit (1) | 2023.10.22 |
[Becoming the hacker] Penetration Test Tools (0) | 2023.10.19 |
[bug bounty] Lab: Information disclosure in version control history (0) | 2023.09.17 |
[bug bounty] Lab: Information disclosure on debug page (0) | 2023.09.17 |