[Pwnable] ELF 동적 분석
2021. 3. 1. 01:39
Hacking/Pwnable
ELF 동적 분석 바이너리를 분석할 때, 바이너리가 실행되며 변화하는 상태를 관찰하기 위해 동적 디버깅이 필요한 경우가 있다. 때문에 리눅스의 실행 파일인 ELF 파일을 동적으로 디버깅하는 방법에 대해 알아보도록 하겠다. 여기선 가장 유명한 ELF 디버거인 gdb(GNU Debugger)를 사용하여 ELF 바이너리를 동적 디버깅하는 방법에 대해 알아보겠다. gdb의 디스어셈블리 문법에는 AT&T와 intel 두 종류가 있다. 이 중 널리 쓰이는 디스어셈블리 문법은 intel 이다. gdb 기본 설정에서의 디스어셈블리 문법은 AT&T이기 때문에, 디버깅 실습을 하기 전에 gdb의 디스어셈블리 문법을 intel로 바꾸어 주어야 한다. .gdbinit는 gdb를 시작할 때 자동적으로 실행할 gdb 명령어들을 ..
[Pwnable] Dreamhack - Memory Corruption - C (I)
2021. 2. 28. 18:46
Hacking/Pwnable
Buffer Overflow C언어에서 버퍼란 지정된 크기의 메모리 공간이라는 뜻이다. 버퍼 오버플로우 취약점은 버퍼가 허용할 수 있는 양의 데이터보다 더 많은 값이 저장되어 버퍼가 넘치는 취약점을 뜻한다. 일반적으로 버퍼 오버플로우는 발생하는 위치에 따라 스택 버퍼 오버플로우, 힙 오버플로우와 같이 나눠서 부른다. 버퍼 오버플로우는 인접한 메모리를 오염시키는 취약점이기 때문에 어떤 메모리를 오염시킬 수 있는지에 따라 공격 방법이 달라지기 때문이다. 그중 스택 버퍼 오버플로우는 지역 변수가 할당되는 스택 메모리에서 오버플로우가 발생하는 경우이다. 스택 버퍼 오버플로우 // stack-1.c #include #include int main(void) { char buf[16]; gets(buf); prin..
[Pwnable] pwndbg 주요 사용법
2021. 2. 27. 12:55
Hacking/Pwnable
GDB GDB(GNU debugger)는 GNU 소프트웨어 시스템을 위한 표준 debugger이다. 실행 방법 gdb [프로그램명] 종료 방법 q (quit_ Ctrl + d 소스 보기 ( gdb 실행 시 소스 폴더에서 구동해야 가능함. ) l : main 함수를 기점으로 소스 출력 l 10 : 10행을 기준으로 출력 l func : func 함수의 소스를 출력 브레이크 포인트 ( 프로그램을 브레이크 포인트에 멈춰서 그 때의 상황을 파악하면서 확인할 때 사용 ) b func : func 함수의 시작 부분에 브레이크 포인트 설정 b 10 : 10행에 브레이크 포인트 설정 프로그램 실행, 종료 ( run kill ) r : 프로그램 수행( 재시작 ) k : 프로그램 수행 종료 역추적 하기 bt : 오류가 발..
[Pwnable] pwntools 주요 사용법 (feat. Dreamhack)
2021. 2. 27. 12:42
Hacking/Pwnable
pwntools는 Gallospled 팀이 개발한 파이썬 익스플로잇 프레임워크로, 익스플로잇을 할 때 유용한 여러 기능들을 제공해 준다. 다음과 같이 파이썬 인터프리터에서 pwn 모듈이 임포트되면 pwntools가 정상적으로 설치되었다는 것을 알 수 있다. remote remote는 원격 서비스에 접속하여 통신할 때 사용되는 클래스이다. p = remote("127.0.0.1", 5000) 위 코드는 127.0.0.1 주소에 열려있는 5000번 포트에 TCP 연결을 맺는다. 연결이 성공적으로 맺어지면 remote 객체를 리턴한다. process process는 로컬 프로세스를 실행하여 통신할 때 사용되는 클래스이다. p = process("/home/theori/binary") 위 코드는 로컬 파일시스템..
[pwnable] Ubuntu 16.04에 Pwntools, Pwndbg 설치하기
2021. 2. 26. 17:20
Hacking/Pwnable
VMware Workstation Pro에 Ubuntu 16.04 설치하기 Ubuntu 초기 기본 설정 ~$ sudo apt-get update ~$ sudo apt-get upgrade 명령어를 통해 최신 파일들로 업데이트 Ubuntu 16.04에 Pwntools 설치하기 apt-get install python2.7-dev python-pip pip install pwntools apt-get install libcapstone-dev 이때, 주의점이 있다.. pip를 굳이 업그레이드 하지 말 것! (업그레이드 했다가 밑의 오류가 떴다..) $ pip Traceback (most recent call last): File "/usr/bin/pip", line 9, in load_entry_point(..
[Pwnable] IDA Pro 사용법
2021. 2. 26. 00:45
Hacking/Pwnable
IDA는 디스어셈블러의 일종으로, 바이너리 파일을 역으로 어셈블리어로 재구성해주는 툴이다. 바이너리 >> 어셈블리어 >> 프로그래밍 언어 까지 변환을 지원한다. * Hello_World.exe를 이용해 IDA Pro 사용법을 익혀볼 것이다. Pseudo Code 보기 - F5 - 특정 함수 이름 더블 클릭 그런데 이는 어셈블리어 코드를 다시 pseudocode로 자동적으로 바꾼 것이기 때문에 분석 시 한줄 한줄 붙잡는 것보다 큰 줄기를 이해한 뒤에 중요해보이는 부분만 세부적으로 분석하는게 좋다. 디스어셈블 상태에서 특정 어셈블리어 코드 고치고 싶을 때 - 고칠 부분 클릭하고 Alt + F2 -> 프로그램 파일이 수정되는 것이 아니라 분석 화면에서만 바뀐다. OPEN 한 파일의 정보 보기 - ida vie..
[P4C] CodeUp 1099 : [기초-2차원배열] 성실한 개미
2021. 2. 25. 16:24
Programming Languages/C
문제 : 개미는 오른쪽으로 움직이다가 벽을 만나면 아래쪽으로 움직여 가장 빠른 길로 움직인다. (오른쪽에 길이 나타나면 다시 오른쪽으로 움직인다.) 미로 상자의 구조가 0(갈 수 있는 곳), 1(벽 또는 장애물)로 주어지고, 먹이가 2로 주어질 때, 성실한 개미의 이동 경로를 예상해보자. 단, 맨 아래의 가장 오른쪽에 도착한 경우, 더 이상 움직일 수 없는 경우, 먹이를 찾은 경우에는 더이상 이동하지 않고 그 곳에 머무른다고 가정한다. 미로 상자의 테두리는 모두 벽으로 되어 있으며, 개미집은 반드시 (2, 2)에 존재하기 때문에 개미는 (2, 2)에서 출발한다. 정답 : #include #define _CRT_SECURE_NO_WARNINGS int main() { int arr[10][10]; int ..
[P4C] CodeUp 1098 : [기초-2차원배열] 설탕과자 뽑기
2021. 2. 25. 16:14
Programming Languages/C
문제 : 격자판의 세로(h), 가로(w), 막대의 개수(n), 각 막대의 길이(l), 막대를 놓는 방향(d:가로는 0, 세로는 1)과 막대를 놓는 막대의 가장 왼쪽 또는 위쪽의 위치(x, y)가 주어질 때, 격자판을 채운 막대의 모양을 출력하는 프로그램을 만들어보자. 정답 : #define _CRT_SECURE_NO_WARNINGS #include int main() { int h, w; int n; int l, d, x, y; int arr[100][100]={}; scanf("%d %d",&h,&w); scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d %d %d %d",&l,&d,&x,&y); if (d == 0) { for (int j = y - ..