일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- cwe-506
- kernel image
- kernel img
- newbie
- kernel build
- xz-utils
- CVE-2024-3094
- 백도어
- Kernel
- rootfs
- liblzma
- Today
- Total
목록분류 전체보기 (80)
ZZoMb1E

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ RTL_Chaining은 RTL 기법을 응용하여 Chain 형태를 구성하여 수행하는 공격 기법이다. 체인을 구성한다라는 것이 무슨 말인지 아직은 잘 이해가 되지 않을 것인데, 이 다음에 다룰 ROP에서도 매우 중요하게 사용되기 때문에 이해하고 넘어가야 한다. RTL에서도 다뤘듯이 가젯이 필요하다. 64비트 환경에서 실습을 진행할 것이기 때문에 System V 호출규약에 사용되는 6가지 레지스터(rdi, rsi, rdx ,rcx, r8, r9)를 고려하여 찾아야 한다. 먼저, ASLR을 우회하는 기법이 아니기 때문에 해당 보호기법을 해제하겠다. sudo sysctl -w kernel.randomize_va_space=0 예제 코드는 ..

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ 메모리 구조를 다루면서 bss에 대한 초기화 되지 않은 변수들이 저장되는 영역이다라고 설명을 했었다. 앞으로 다양한 기법을 다루기에 해당 세그먼트가 중요하다. bss 세그먼트의 위치를 찾는 방법은 readelf라는 명령어를 사용하면 된다. readelf -S [파일명] 매핑된 영역들을 확인해보면 bss 영역이 있는 것을 확인할 수 있다. bss 세그먼트의 주소는 0x404040인것을 확인할 수 있다. 여기서 bss 세그먼트가 중요한 이유는 쓰기가 가능한 영역이라는 것이다. 권한을 보면 WA인데 아래 테이블을 확인해보면 된다. 읽기가 가능한 이유가 중요한 이유는 해당 영역에 /bin/sh라는 문자열을 넣어두고 이용하면 공격에 사용될 ..

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ gadget이 무엇인지 이전 RTL에서 다음과 같이 설명을 해두었다. 2023.10.22 - [STUDY/PWNABLE] - [PWNABLE] RTL 일반적으로 '코드 조각'을 의미한다. 이렇게만 보면 이게 무슨 소리인가 싶을 것이다. ret 가젯을 예로 설명하겠다. ret 가젯은 말 그대로 ret 명령을 실행하기 위한 코드 조각이다. 이렇게 disassemble을 했을 때 pop rdi, rsi, ret 등의 코드들이 있을 것인데 이 부분을 코드 조각 즉 '가젯'이라고 한다. 이제 이 가젯을 찾는 방법을 다뤄보겠다. 가젯을 찾는 방법에는 대표적으로 ROPgadget이 있다. sudo pip3 install ropgadget 위 명..

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ # 시험기간이 있었던 바람에 최근 포스팅한 게시글 중 일부 예제를 직접 만들지는 못했습니다. # 다음 실습부터 다시 직접 예제를 만들며 진행하겠습니다. RTL Return to Library는 메모리 보호 기법 중 하나인 NX-bit를 우회하기 위한 공격기법이다. 해당 기법은 DreamHack의 문제를 가지고 진행하겠다. 보호기법을 살펴보면 NX-bit가 켜져있는 것을 볼 수 있다. gdb의 vmmap으로 권한을 확인한 모습이다. NX-bit에 의해 스택에 실행권한이 빠져있는 것을 볼 수 있다. 때문에 Shellcode 같은 Byte code를 사용하는 것은 불가능에 가깝다. 이를 우회하기 위해서 실행권한이 남아있는 영역 중 하나인..

Shellcode 시스템 해킹의 목적 중 하나인 Shell을 취득하기 위한 코드조각이다. 바이트코드로 구성되어 있으며 스택 영역에 실행권한이 있는 상태(NX-BIT 비활성화)에서 사용이 가능하다. pwntools의 기능중에 shellcraft.sh라는 기능이 있다. 셸코드를 생성해주는 고마운 기능인데 해당 함수를 이용하면 손쉽게 원하는 기능의 셸코드를 제작할 수 있다. from pwn import* shellcode = shellcraft.sh() print(shellcode) print(hexdump(asm(shellcode))) 함수를 실행했을 때의 결과를 살펴보겠다. 어셈블리어 부분이 만들어진 코드이고, 아래 hex값으로 나온 부분이 셸코드의 바이트코드에 해당이 된다. shellcraft.sh()에..

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ BOF 하면서 포스팅했어야 하는데 순서가 좀 틀렸네요;; No eXecute bit의 약자로 스택 영역에 실행권한을 부여하지 않는 것이다. 비교를 위해 같은 c파일을 2가지 방법으로 컴파일 했다. non_ex 파일은 NX bit가 비활성화 된 상태이고, tomato 파일은 활성화 되있는 상태이다. 먼저 활성화 되있는 tomato를 살펴보면 스택 부분의 권한을 보면 실행 권한인 x가 빠진 것을 알 수 있다. 이어서 non_nx파일을 살펴보면 실행권한 x가 들어가 있는 것을 알 수 있다. 이때 스택영역에서 우리가 공격을 위해 사용할 수 있는 것은 셸코드 같은 바이트 코드이다. 여기서 셸코드가 아닌 다른 문자열도 바이트 코드로 인식을 해..

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ 바이너리가 실행될 때마다 코드 영역을 제외한 스택, 힙, 공유 라이브러리 영역의 주소를 랜덤하게 바꿔주는 보호기법이다. 실행할 때마다 주소가 바뀌는 것을 볼 수 있다. 위 실행 파일의 코드이다. #include #include #include char *global = "whrd"; int main(){ char *heap = malloc(100); char *stack[] = {"whrd"}; printf("[Heap] address: %p\n", heap); printf("[Stack] address: %p\n", stack); printf("[libc] address: %p\n",**(&stack + 3)); printf("[..

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ 앞서 Canary기법과 우회하는 방법에 대해 포스팅을 했다, https://whrdud727.tistory.com/10 [PWNABLE] Canary_설명 ※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ SSP(Stack Smashing Protector) Stack buffer Overflow로부터 sfp와 ret를 보호하기 위한 기법으로, Stack의 canary라는 값을 이용하여 검증 whrdud727.tistory.com https://whrdud727.tistory.com/11 [PWNABLE] Canary 우회 ※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ 이전 포스팅에..
보호되어 있는 글입니다.

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ 이전에 작성한 plt&got를 이용한 공격 기법이다. https://whrdud727.tistory.com/15 [PWNABLE] plt & got ※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ 시스템을 공부하는 상황에서 plt와 got에 대해 많이 들어보았을 것이다. plt에는 got의 데이터를 가지고 있고, got에는 함 whrdud727.tistory.com Dynamic 방식의 경우 lazy binding 방식으로 인해 함수를 호출할 때 실제주소를 link하는 것을 살펴보았다. 정상적으로 linking이 되면 plt => got => 실제주소 의 순으로 가리키게 되는데, 이때 got가 가리키는 데이..