일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C언어 패킷캡쳐
- ucrtbase.dll
- Msvcrt.dll
- 윈도우 커널 드라이버
- apphelp.dll
- Windows Kernel Debug
- pcap packet capture
- Windows
- 바이트 오더
- HackCTF
- 개발 환경 준비
- 시스템해킹
- pwnable
- 개발하기
- arudino
- Network Byte Order
- vcruntime140.dll
- packet capture
- 윈도우 커널
- 네트워크 바이트 오더
- 해킹
- vcruntime.dll
- Windows Kernel Driver
- IAT Hooking
- 윈도우 커널 디버깅
- 포너블
- pcap packet
- windows kernel debugging
- hacking
- Windows Kernel
- Today
- Total
목록분류 전체보기 (118)
미친해커
NX Bit (Never eXecute bit, 실행 방지 비트) NX Bit 보호기법이란 프로세서 명령어나 코드 또는 데이터 저장을 위한 메모리 영역을 따로 분리하는 CPU의 기술이다. NX 특성으로 지정된 모든 메모리 구역은 데이터 저장을 위해서만 사용되며, 프로세서 명령어가 그 곳에 상주하지 않음으로써 실행되지 않도록 만들어 준다. 실행 보호라는 일반 기술은 특정한 종류의 악성 소프트웨어를 컴퓨터에 들어오지 못하게 막는 데 사용된다. 악성 소프트웨어의 경우 자신의 코드를 다른 프로그램의 자료 기억 영역에 심어 놓은 다음 이 구역 안에서 자신의 코드를 실행하게 만들며, 이를 Buffe rOverFlow(버퍼 오버플로우) 공격이라고 한다. 간단 요약 NX Bit는 데이터 영역과 코드 영역을 나누어 데이..
먼저 보호기법을 확인하자 보호 기법은 아무것도 안 걸려 있다. 어떤 공격을 시도해도 가능할 것 같다. 우선 함수를 살펴보면 v4의 사이즈가 엄청난걸 확인할 수 있다. 무려 27,952 (0x6D30) 바이트다. gets 함수에서 BOF가 발생하는데 그 전에 printf 함수에서 v4의 주소를 출럭해준다. 한번 실행을 해보자 v4의 주소를 출력해주고 입력을 받은 뒤 종료하는걸 볼 수 있다. v4의 주소를 알 수 있으니 shellcode를 넣고 ret 주소를 v4로 덮어쓰면 Shell이 따지면서 flag를 얻을 수 있을 것 같다. ASLR때문에 계속 stack의 주소가 바뀌지만 v4의 주소를 출력해주기때문에 문제 없다. # file : Simple_size_bof.py from pwn import * p =..
이번에는 HackCTF의 첫 64Bit Pwnable 문제이다. 기존까지 IDA 32Bit를 이용해서 디스어셈블을 했지만 이번 문제는 IDA 64Bit를 이용해야 한다, (혹시라도 IDA가 없다면 어둠의 경로를 추천..) 그리고 지금까지는 생략했지만 앞으로 문제를 풀기 전에 checksec를 활용해서 꼭 보호기법을 확인하도록 하자 Full RELRO와 NX가 걸려있다. Full RELRO은 GOT Overwrite 기법을 사용할 수 없고 NX는 shellcode를 삽입하여 실행할 수 없다. main 함수이다. 처음에 scanf에서 Buffer OverFlow가 발생하는걸 확인했다. 그 후에는 별 다른 취약점이 발생하는 부분이 없어보인다. 아마 ret 주소를 덮어씌우는 문제로 보인다. 보통 NX가 걸려있으..
리눅스 운영체제의 메모리 보호기법을 정리해볼 생각이다. (사실 나도 매번 까먹어서 정리가 필요함...) 리눅스에서 바이너리에 적용되어 있는 메모리 보호기법은 checksec을 이용하여 확인 할 수 있다. checksec [Bianry File] 커맨드를 입력하면 RELRO: Partial RELRO Stack: No canary found NX: NX disabled PIE: No PIE (0x8048000) 이렇게 현재 바이너리에 적용되어 있는 메모리 보호기법을 볼 수 있다. 보호기법 별 자세한 설명은 다음 글부터 할 생각이다.
IDA로 디스어셈블을 한번 해보자 이번에는 main 함수 외에 다른 함수는 보이지 않는다. 지역변수 s가 20 (0x14) 바이트 할당이 되어 있고 name은 전역변수로 BSS 영역에 할당되어 있다. gets 함수에서 Buffer OverFlow가 발생 main 함수의 ret 주소를 조작할 수 있을 것으로 보인다. 적용된 보호 기법을 확인해보니 바이너리에는 아무런 보호 기법도 적용되어 있지 않다. 그렇다는 건 바이너리 내에 모든 영역에 읽기, 쓰기, 실행 권한이 존재하며 주소도 변하지 않는다는 말이다. 위와 같이 read 함수가 실행되었을 때 shellcode 코드를 BSS 영역에 작성한다. 그 후 gets 함수에서 Buffer OverFlow를 발생시켜 main 함수의 ret 주소를 BSS (name)..
이번에는 FSB (Format String Bug) 문제이다. IDA를 이용해 디스어셈블해보자 vuln 함수가 정의되어 있는것으로 보인다. vuln 함수를 확인해보자 vuln 함수에서 fgets로 입력을 받고 입력받은 문자열을 snprintf를 이용하여 format으로 복사한다. 이때 Format String에 맞춰 format에 쓰여진다. 하지만 s에 받은 문자열에 서식문자가 있다면 Format String Bug가 발생한다. 만약 취약점이 발생하지 않도록 한다면 '%s' 서식문자를 사용해 format에 쓰면 된다. printf에서는 단순히 format에 쓰여진 문자를 출력한다. 이 외에도 flag 함수도 찾을 수 있다. 이번에도 flag 함수를 실행시키면 flag를 따낼 수 있을 것으로 보인다. 서식..