일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- WarGame
- 드림핵
- c
- 숙명여자대학교 정보보안 동아리
- 기계학습
- 숙명여자대학교 정보보안동아리
- hackerrank
- 풀이
- Sookmyung Information Security Study
- The Loard of BOF
- XSS Game
- Python
- HTML
- 생활코딩
- PHP 웹페이지 만들기
- hackctf
- 웹페이지 만들기
- 자료구조 복습
- c++
- 머신러닝
- Javascript
- SWEA
- lob
- BOJ
- siss
- 파이썬
- CSS
- 백준
- BOJ Python
- C언어
- Today
- Total
목록무지성 공부방/Dreamhack SystemHacking (41)
혜랑's STORY
pwntools API 사용법 더 자세한 내용은 여기에서 살펴볼 수 있다. 1. process & remote process 함수는 익스플로잇을 로컬 바이너리를 대상으로 할 때 사용하는 함수이고, remote 함수는 원격 서버를 대상으로 할 때 사용하는 함수이다. 전자는 보통 익스플로잇을 테스트하고 디버깅하기 위해, 후자는 대상 서버를 실제로 공격하기 위해 사용한다. from pwn import * p = process('./test') #로컬 바이너리 'test'를 대상으로 익스플로잇 수행 p = remote('example.com',31337) #'example.com'의 31337 포트에서 실행 중인 프로세스를 대상으로 익스플로잇 수행 2. send send는 데이터를 프로세스에 전송하기 위해 사용..
디버거란 컴퓨터과학에서는 실수로 발생한 프로그램의 결함을 버그(bug)라고 한다. 완성된 코드에서 버그를 찾는 것은 어렵다. 이런 어려움을 해소하고자 디버거(Debugger)라는 도구가 개발되었다. 디버거는 문자 그대로 버그를 없애기 위해 사용하는 도구이다. 프로그램을 어셈블맄 코드 단위로 실행하면서, 실행결과를 사용자에세 보여준다. 이번에는 리눅스의 대표적인 디버거 중 하나인 gdb의 기능들에 대해 배우고, 실습을 통해 사용법을 익혀볼 것이다. gdb & pwndbg 실습 예제 간단한 코드를 작성하고, 이를 분석하면서 gdb의 사용법을 익혀보자. 우선 아래의 코드를 작성하고 컴파일 한다. // Name: debugee.c // Compile: gcc -o debugee debugee.c -no-pie ..
보호되어 있는 글입니다.
시작하며 해킹 분야에서 상대 시스템을 공격하는 것을 익스플로잇(Exploit)이라고 부른다. 시스템해킹의 익스플로잇과 관련된 여러가지 공격 기법 중 첫 번째 공격기법으로 셸코드를 알아볼 것이다. 셸코드(shellcode) 셸코드는 익스플로잇을 위해 제작된 어셈블리 코드 조각을 말한다. 일반적으로 셸을 획득하기 위한 목적으로 사용해 셸코드라고 부른다. 만약 해커가 rop를 자신이 작성한 셸코드로 옮길 수 있으면 해커는 원하는 어셈블리 코드가 실행되게 할 수 있다. 어셈블리어는 기계어와 거의 일대일 대응되므로 사실상 원하는 모든 명령을 CPU에 내릴 수 있게 되는 것이다. 셸코드의 목적에 따라 모두 다르게 작성되나 아키텍처별로 자주 사용되는 셸코드를 모아서 공유하는 사이트도 있다. orw 셸코드 orw 셸코..
Code 실행 main 함수 push rbp 스택에 rbp를 넣는다. mov rbp, rsp rsp의 값을 rbp에 대입한다. mov esi, 0xf esi에 0xf 값을 넣는다. mov rdi, 0x400500 rdi에 0x400500 값을 넣는다. call 0x400497 0x400497에 위치한 write_n 함수를 호출한다. mov eax, 0x0 eax에 0x0 값을 넣는다. pop rbp 스택 최상위 값을 꺼내서 rbp에 대입한다. ret return address로 반환한다. write_n push rbp mov rbp, rsp 스택에 rbp를 넣고 rsp의 값을 rbp에 대입한다. mov QWORD PTR [rbp-0x8], rdi rdi의 값을 [rbp-0x8]의 데이터를 8바이트만큼 참..
Code 실행 1: mov dl, BYTE PTR[rsi+rcx] BYTE PTR[rsi+rcx]의 값을 dl에 대입한다. 2: xor dl, 0x30 dl에 있는 값과 0x30을 xor 연산한다. xor 연산은 비트 연산을 통해 이루어지므로 먼저 두 값을 2진수로 바꿔주고 xor 연산을 한다. 첫 번째 0x400000(0x67)과 xor 연산을 하면 0x57이라는 값을 얻게 된다. 3: mov BYTE PTR[rsi+rcx], dl dl의 값을 BYTE PTR[rsi+rcx]에 대입한다. 4: inc rcx rcx의 값을 1 증가시킨다. 5: cmp rcx, 0x19 rcx의 값과 0x19를 비교한다. 6: jg end 직전에 비교한 두 연산자 중 전자가 더 크면 프로그램을 종료 한다. 7: jmp 1..
x86-64 어셈블리 명령어 Pt.2 Opcode: 스택 x64 아키텍쳐에는 다음 명령어로 스택을 조작할 수 있다. Opcode: 프로시저 컴퓨터 과학에서 프로시저(Procedure)는 특정 기능을 수행하는 코드 조각을 말한다. 프로시저를 사용하면 반복되는 연산을 프로시저 호출로 대체할 수 있어 전체 코드의 길이를 줄일 수 있으며, 기능별로 코드 조작에 이름을 붙일 수 있게 되어 코드의 가독성을 크게 높일 수 있다. 프로시저를 부르는 행위를 호출(Call)이라고 부르며, 프로시저에서 돌아오는 것은 반환(Return)이라고 부른다. 프로시저를 호출할 때는 프로시저를 실행하고 나서 원래의 실행 흐름으로 돌아와야 하므로, call 다음의 멸영어 주소(return address, 반환 주소)를 스택에 저장하고 ..
시작하며 1. 해커들의 언어: 어셈블리 시스템 해커가 가장 기본적으로 습득해야 하는 지식은 컴퓨터 언어와 관한 것이다. 왜냐하면, 컴퓨터의 언어로 작성된 소프트웨어에서 취약점을 발견해야 하기 때문이다. 그런데 컴퓨터의 언어인 기계어는 우리의 일상 언어와 너무나 다르다. 기계어의 경우 0과 1로만 구성돼 있어, 우리가 한 눈에 이해하기 매우 어렵다. 그래서 컴퓨터 과학자 중 한명인 David Wheeler는 EDSAC을 개발하면서 어셈블리 언어(Assembly Language)와 어셈블러(Assembler)라는 것을 고안했다. 어셈블러는 개발자들이 어셈블리어로 코드를 작성하면 컴퓨터가 이해할 수 있는 기계어로 코드를 치환한다. 그런데 소프트웨어를 역분석하는 사람들은 여기에 역발상을 더해, 기계어를 어셈블리..