일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- apphelp.dll
- IAT Hooking
- 윈도우 커널
- pcap packet capture
- C언어 패킷캡쳐
- Msvcrt.dll
- hacking
- 네트워크 바이트 오더
- windows kernel debugging
- pcap packet
- Windows Kernel
- 시스템해킹
- 해킹
- vcruntime.dll
- HackCTF
- 윈도우 커널 드라이버
- Windows Kernel Driver
- ucrtbase.dll
- 개발 환경 준비
- 바이트 오더
- Network Byte Order
- packet capture
- Windows
- arudino
- 포너블
- Windows Kernel Debug
- 윈도우 커널 디버깅
- 개발하기
- pwnable
- vcruntime140.dll
- Today
- Total
목록Hacking (14)
미친해커
ASLR (Address Space Layout Randomization, 주소 공간 배열 무작위화) ASLR 보호기법이란 말 그대로 주소를 매번 실행 때마다 랜덤하게 배치하는 것을 말한다. PIE 보호기법과 비슷하다고도 볼 수 있는데 엄연히 다른 보호기법이다. ASLR은 데이터 영역의 주소를 랜덤하게 배치한다. 그 이유는 ret 주소를 임의로 조작할 수 있을 때 가장 필요한 것은 주소이다. 공격자가 주소를 알 수 있다면 그 주소에 ShellCode와 같은 악성코드를 주입하여 실행시킬 수 있기 때문이다. 그렇다면 그 ShellCode와 같은 것이 작성되는 영역은 데이터 영역이기 때문에 이 영역의 주소를 랜덤하게 배치되도록 만든다면 공격을 훨씬 어렵게 만들 수 있기 때문이다. 간단요약 데이터 영역의 주소를..
PIE (Position Independent Executable, 위치 독립 실행 파일) PIE 보호기법이란 메모리의 어딘가에 위치한 기계어 코드의 몸체로서 절대 주소와 관계 없이 적절히 실행된다. 즉 메모리상의 명령어들의 위치가 매번 바뀐다는 의미이다. PIE 보호기법이 적용된 프로그램은 특별한 코드 수정이 없이 어느 메모리 주소에서도 실행이 가능하며 메모리 주소의 제약을 받지 않는다. 이 보호기법은 주로 RTL(Return To Libc), ROP(Return Oriented Programming) 과 같은 바이너리에서 실행 가능한 코드의 오프셋을 필요로 하는 공격 기법을 사용하려고 할때 이 코드가 어디에 존재하는지를 알 수 없게 한다. 간단요약 프로그램이 실행 될때마다 그 메모리 주소를 바꾸어 이..
┌──(root💀DESKTOP-H0EJIE2)-[~/Hacking/Pwnable/HackCTF/offset] └─# checksec offset [*] '/root/HackCTF/offset/offset' Arch: i386-32-little RELRO: Full RELRO Stack: No canary found NX: NX enabled PIE: PIE enabled 보호기법은 스택 카나리를 제외한 모든 보호기법이 걸렸이다. 생각 외로 어려운 문제가 될수도 있다고 생각한다. Funtions window를 확인해보니 main 함수 이외에도 사용자 정의 함수가 여럿보인다. 아무래도 print_flag 함수를 실행시키면 flag를 따낼 수 있을것으로 보인다. int print_flag() { char i;..
보호기법은 아무것도 걸려있지 않은걸로 보아 간단하게 풀 수 있는 문제라고 예상된다. main 함수를 분석해보자. main 함수를 보니 이번에는 친절하게 s의 버퍼가 128 바이트라고 명시되어 있다. scanf를 이용하여 개행문자(엔터)가 나오기 전까지 입력을 받고 현재 버퍼의 주소를 출력 후 16바이트 만큼 문자를 출력한다. 그 이상 문자가 있다면 그 다음 주소를 출력하고 또 다시 16바이트 만큼 출력하는 걸 반복하는것 같다. 한번 입력을 시도한 후 출력이 끝나면 다시 입력할건지에 대한 질문이 나온다. 코드만 봐서는 자세히 알 수 없으니 한번 실행을 해보자 한번 실행을 해보니 확실히 알 수 있었다. 버퍼의 주소는 바뀌지 않고 null을 기준으로 출력하기 때문에 뒤에 문자가 더 있어도 출력을 멈추는것 같다..
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 =..