쉘코드 python version 구분법

agnusdei·2025년 6월 15일
0

CTF

목록 보기
24/154

✅ 1. 쉐뱅(Shebang) 라인 확인

#!/usr/bin/python
  • 이 줄은 시스템이 이 스크립트를 실행할 때 어떤 인터프리터를 사용할지 지정하는 것.
  • #!/usr/bin/python → 보통 Python 2를 가리킴
  • #!/usr/bin/python3Python 3 명확히 지정

단점: 시스템에 따라 /usr/bin/python이 Python 2일 수도, 3일 수도 있음. 100% 확실한 건 아님.


✅ 2. 문법적 특징으로 판단하기

🔹 print 구문

print "[*] Uploading the malicious image..."
  • Python 2 문법 ✅
  • Python 3에서는 print() 함수 형태여야 함
print("[*] Uploading the malicious image...")  # Python 3

🔹 raw_input() 사용

input = raw_input("$ ")
  • Python 2에서 사용자 입력 받을 때 raw_input() 사용
  • Python 3에서는 raw_input()이 제거되고 input()만 존재함

✅ 따라서 raw_input()은 Python 2임을 거의 확정할 수 있음


🔹 requests.get().text를 그대로 출력

이 부분은 Python 2, 3 공통으로 동작합니다. 차이는 없습니다.


✅ 3. print 문과 input() 이름의 충돌 여부

input = raw_input("$ ")
  • 여기서 input이라는 변수 이름을 쓰고 있음
  • Python 3에서는 input내장 함수이므로 이런 식으로 덮어쓰면 문제 생길 수 있음
  • 하지만 이건 관습적 차이일 뿐, 결정적인 증거는 아님

🔍 결론

이 스크립트는 명백히 Python 2 스크립트입니다.

🔑 결정적인 특징 요약:

특징설명버전
#!/usr/bin/python기본 인터프리터 명시보통 Python 2
print "문자열"괄호 없이 print 사용✅ Python 2
raw_input()사용자 입력 함수✅ Python 2

✅ Python 2 / 3 / 1 문법 차이 요약 (간단표)

기능Python 1Python 2Python 3
print문장문장함수
raw_input()❌ 없음✅ 있음❌ 사라짐
input()위험 (코드 실행됨)코드 평가 (eval)✅ 사용자 입력 문자열
Unicode 지원❌ 없음제한적 (u"...")✅ 기본 지원
Division (/)정수 나눗셈정수 나눗셈✅ 실수 나눗셈
xrange()❌ 없음✅ 있음❌ 사라짐 (range 사용)

⚠️ Python 1은 현재 거의 사용되지 않으며, 실제 분석에서 볼 일은 거의 없습니다.


profile
DevSecOps ⚙️ + CTF🚩

0개의 댓글