일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 머신러닝
- BOJ
- CSS
- SWEA
- c++
- The Loard of BOF
- 풀이
- hackctf
- 숙명여자대학교 정보보안 동아리
- XSS Game
- 웹페이지 만들기
- WarGame
- 기계학습
- c
- 드림핵
- 생활코딩
- siss
- 숙명여자대학교 정보보안동아리
- lob
- 백준
- C언어
- 자료구조 복습
- Sookmyung Information Security Study
- BOJ Python
- PHP 웹페이지 만들기
- hackerrank
- 파이썬
- Javascript
- HTML
- Python
- Today
- Total
목록분류 전체보기 (346)
혜랑's STORY
역시 가장 먼저 문제 파일을 다운받은 후 c 파일을 열어 보았다. basic_explotation_000.c #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } int main(int argc, char *argv[]) { char buf[0x80]; initialize(); printf("buf = (%p)\n", buf); scanf("%141s", buf); r..
문제 파일을 다운 받고, c 파일을 열어 취약점을 찾아 보았다. // Name: rao.c // Compile: gcc -o rao rao.c -fno-stack-protector -no-pie #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL); } int main() { char buf[0x28]; init(); printf("Input: "); scanf("%s", buf); return 0; } scanf("%s", buf) 사용; ..
스택 버퍼 오버플로우 취약점 발생 코드 // Name: rao.c // Compile: gcc -o rao rao.c -fno-stack-protector -no-pie #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL); } int main() { char buf[0x28]; init(); printf("Input: "); scanf("%s", buf); return 0; } 취약점 분석 프로그램의 취약점은 scanf("%s", buf)에..
스택 버퍼 오버플로우 스택 버퍼 오버플로우는 스택의 버퍼에서 발생하는 오버플로우를 말한다 버퍼(buffer) 버퍼는 컴퓨터 과학에서 '데이터가 목적지로 이동되기 전에 보관되는 임시 저장소'의 의미를 갖는다. 수신 측과 송신 측 사이에 버퍼라는 임시 저장소를 두고, 이를 통해 간접적으로 데이터를 전달하게 한다. 송신 측은 버퍼로 데이터를 전송하고, 수신 측은 버퍼에서 데이터를 꺼내 사용한다. 이렇게 하면 버퍼가 가득 찰 때까지는 유실되는 데이터 없이 통신할 수 있다. 빠른 속도로 이동하던 데이터가 안정적으로 목적지에 도달할 수 있도록 완충 작용을 하는 것이 버퍼의 역할이라고 할 수 있다. 버퍼 오버플로우(Buffer Overflow) 버퍼 오버플로우는 문자 그대로 버퍼가 넘치는 것을 의미한다. 버퍼는 제작..
함수 호출 규약 함수 호출 규약은 함수의 호출 및 반환에 대한 약속이다. 한 함수에서 다른 함수를 호출할 때, 프로그램의 실행 흐름은 다른 함수로 이동한다. 그리고 호출한 함수가 반환하면, 다시 원래의 함수로 돌아와서 기존의 실행 흐름을 이어나간다. 그러므로 함수를 호출할 때는 반환된 이후를 위해 호출자(caller)의 상태(Stack frame) 및 반환 주소(Return Address)를 저장해야 한다. 또한, 호출자는 피호출자(Callee)가 요구하는 인자를 전달해줘야 하며, 피호출자의 실행이 조요될 때는 반환 값을 전달 받아야 한다. 함수 호출 규약을 적용하는 것은 일반적으로 컴파일러의 몫이다. 그러나 컴파일러의 도움 없이 어셈블리 코드를 작성하려 하거나, 또는 어셈블리로 작성된 코드를 읽고자 한..
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 ..