EYEN

시스템 보안 11주차 본문

Wargame/pwn

시스템 보안 11주차

EYEN 2024. 11. 12. 11:55

이번에는 스택의 쉘코드

1. /bin/sh와 같은 기능을 하는 코드

2. 코드 설명

  1. xor eax, eax→eax=0
 
 
 
0

push eax
push [/bin/sh 아스키코드]
 
    2. /bin/sh의 아스키 코드는 다음과 같은 형태로 들어감

 
b
i
n
/
/
s
h

3. 그래서 push hs// push nib/ 이런 형태로 넣어야함
4. ebx에 ‘/bin//sh’의 주소를 넣어주기위해 현재 ‘/’에 있는 esp를 이용해 ebx가 그 주소를 가리키게 한다.
5. push eax를 통해 0을 한개 더 넣어준다.
[이때 스택]

  
nib/ebx=esp
hs// 
0eax

6. push edx, esp: edx를 esp로 바꿔줌

  
nib/ 
hs//edx=esp
0eax

7. push ebx: 0을 하나 더 넣어줌

0 
nib/ 
hs// 
0eax

8. mov ecx,esp:ecx를 esp로 바꿔줌, argv가 ecx가 됨
 esp=ecx=argv

0esp=ecx=argv
nib/edx
hs//ebx
0 

9. al에 11을 넣어서 실행할 함수 설정
*스택이 4바이트기 때문에 4바이트를 맞추려고 ‘/’를 하나 더 그은 것
*슬래쉬를 아무데나 넣으면 안됨
 

3. 실습 

convert.pl 컴퓨터에 옮겨놔야함. 독립적으로 쉘코드를 실행하기 위해 형태를 바꿔주는 용도
목표: /usr/bin/who 의 역할을 하는 쉘코드 작성 

[exec_shell2.s 코드 전문]

xor eax, eax                
push eax                    
push ohw/ → 0x6f68772f
push nib/ → 0x6e69622f

push rsu/ → 0x7273752f
mov ebx, esp               
push eax                    
mov edx, esp              
push ebx                    
mov ecx, esp             
mov al, 11                  

int 0x80

 
who.s

who.c

whoami

 

ps

 
*질문
왜 얘는 세그폴트가??당연함 usr/bin/whoami/가 되니까

cdq :eax 뿐만 아니라 edx도 0으로 만듦

  • 왜 굳이??
    • 부호 확장: cdq는 EAX 레지스터의 부호 비트를 EDX에 확장하여 64비트 정수로 만들기 때문에, 부호 있는 나눗셈에 있어 올바른 결과를 보장합니다.
      • 예를 들어, EAX에 -10이 있을 때, cdq를 실행하면 EDX:EAX는 0xFFFFFFFFFFFFFFF6 (즉, -10의 64비트 표현)이 됩니다. 이렇게 되면 idiv로 나눗셈을 할 때 올바르게 -10을 나누게 됩니다.
    • 부호 있는 나눗셈: cdq는 주로 idiv 명령어와 함께 사용되며, 이는 부호가 있는 나눗셈 연산입니다. cdq 없이 idiv를 사용할 경우, EDX의 값이 부호 확장되지 않아 계산 오류가 발생할 수 있습니다.
    • 간단하고 효율적: cdq는 1바이트 명령어로 간단하게 실행되며, 별도의 조건이나 비교 없이 EAX의 부호 비트를 빠르게 확장할 수 있는 효율적인 방법입니다.

 

[다음 시간 예고]

파일명을 지정하는 것 뿐만 아니라 인자까지 입력할 수 있는 쉘코드 작성하기!

1. 코드가 들어가는 순서

push 0
push tac/
push nib/
push 0
push dwss
push ap//
push cte/

2. 코드 진행 시 스택 상황

ebx ecx→argv, 포인터로 파일주소를 가리키게됨.
ecx'파일주소를 받은 다음 바로 인자를 가리키게 됨.
0edx→envp:여기가 인자
cte/ecx'
ap// 
dwss 
0edx
nib/ebx: 여기가 파일주소
tac/ 
0 

 
 

'Wargame > pwn' 카테고리의 다른 글

dreamhack racewithme write-up  (0) 2025.01.04
겨울방학 ctf 프로젝트 basic_rop_x64 발표자료  (0) 2023.02.26
canary가 할당되는 경로 확실히 알기  (0) 2023.02.25
Dreamhack-basic_rop_x64  (0) 2023.02.17
Dreamhack-stack canary/ r2s  (0) 2023.01.29