일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- hackerrank
- WarGame
- C언어
- 백준
- 자료구조 복습
- lob
- Javascript
- SWEA
- Sookmyung Information Security Study
- 숙명여자대학교 정보보안동아리
- HTML
- 숙명여자대학교 정보보안 동아리
- XSS Game
- 기계학습
- 생활코딩
- 파이썬
- BOJ Python
- 머신러닝
- 웹페이지 만들기
- PHP 웹페이지 만들기
- c
- BOJ
- The Loard of BOF
- 풀이
- c++
- CSS
- 드림핵
- Python
- hackctf
- siss
- Today
- Total
목록2021 SISS 21기 활동/겨울방학 System (16)
혜랑's STORY
문제를 풀기 위해 xshell에 로그인 해 주었다. ID : cobolt / PW : hacking exposed 가장 먼저 존재하는 파일을 알아보기 위해 ls -l 명령어를 실행하였다. goblin.c 파일의 내용을 확인해 보자. Lv.2와 같이 버퍼에 16 바이트를 할당하고 있어 쉘코드를 담기엔 충분하지 않다. 앞선 문제와 다른 점은 strcpy가 아닌 gets 함수를 사용한다는 점이다. 그러나 gets 함수 또한 문자열의 길이를 검사하지 않는 취약점이 존재한다. 앞에서 실행인자에 쉘코드를 전달하는 방법을 사용했기 때문에 이번엔 환경변수를 선언하여 문제를 해결하려 한다. 환경변수를 선언하는 방법은 다음과 같다. export SHELLCODE=`python -c 'print "\x90"*100 + "\..
문제를 풀기 위해 xshell에서 로그인 해 주었다. Id : grmlin / Pw : hello bof world 가장 먼저 존재하는 파일을 알아보기 위해 ls-l 명령어를 실행하였다. 그 결과 cobolt.c 파일과 cobolt라는 파일이 있는 것을 확인할 수 있다. cobolt 파일은 colbolt.c 파일을 컴파일하여 만들어진 파일인 것 같다. cobolt.c 파일을 열어 내용을 확인해 보았다. Lv.1 문제와 같이 strcpy 함수를 사용하여 문자열의 길이를 검사하지 않는다는 취약점이 있었다. 그러나 이번 문제에서는 buffer에 16바이트를 할당하였기 때문에 버퍼에 공격 코드를 담기엔 충분하지 못하다. 일단 권한 문제를 해결하기 위해 cp 명령어를 통해 복사를 해주었고, 그 결과 gremlin..
문제를 풀기 위해 xshell에서 gate로 로그인 해 주었다. ID : gate PW : gate 가장 먼저 존재하는 파일을 알아 보기 위해 ls -l 명령어를 실행하였다. 그 결과 gremlin.c 파일과 gremlin이라는 파일이 있는 것을 확인할 수 있다. gremlin 파일은 gremlin.c 파일을 컴파일하여 만들어진 파일 같다. gremlin.c 파일을 열어 내용을 확인해 보도록 하자. 위 코드를 살펴본 결과 256 바이트 버퍼 buffer를 스택에 할당한 후, strcpy 함수를 통해 argv[1]의 내용을 buffer에 복사하게 된다. strcpy 함수가 buffer를 복사할 때, buffer의 크기인 256 바이트가 넘는 문자열을 전달한다면 길이 제한 없이 문자열이 복사되어 스택 버퍼 ..
Level 5 -> 6 문제를 해결하기 위해 전 레벨을 통해 얻은 비밀번호를 사용하여 로그인 해 주었다. 주어진 문제를 통해 비밀번호가 들어있는 파일은 inhere 디렉토리 안에 있으며, -human-readable한 파일이며, 1033 바이트에 실행 불가능한 파일이라는 것을 알 수 있었다. 따라서 나는 정말 inhere 디렉토리가 있는지 확인해 보았고 inhere 디렉토리로 이동하여 크기가 1033 바이트 이상인 파일을 검색해 보았다. 그 결과 maybehre07 디렉토리의 file2 파일에 비밀번호가 담겨 있다는 것을 알 수 있었고, 비밀번호는 다음과 같이 알아낼 수 있었다. Level 6 -> 7 앞서 알아낸 비밀번호를 통해 6레벨로 이동할 수 있었다. 주어진 문제에 따라 find 명령어를 통해 소..
#5 Buffer overflow의 이해 buffer overflow 공격 실제 공격 방법을 시험해 보기 위해서는 대상 프로그램이 필요하다. 보다 쉬운 이해를 위해 buffer overflow 취약점을 가진 간단한 아래 프로그램을 사용할 것이다. #include #include #include int main(int argc, char **argv){ char buffer[1024]; if(argc>1) strcpy(buffer, argv[1]); return 1; } 소스코드가 말해 주듯이 실행 시 주어지는 첫 번째 인자를 buffer라는 char형 배열에 복사를 한다. 또한 bound check를 하지 않는 strcpy()함수를 이용하고 있다. 즉, 이 프로그램은 1024바이트의 버퍼공간에 쉘 코드와..
Bandit Level 0 터미널 창을 열고 ssh bandit0@bandit.labs.overthewire.org -p220을 입력한다. (ssh서버에 포트 2220을 사용해서 접속하겠다는 뜻) 비밀번호는 bandit0을 입력한다. 접속 완료! Level 0 -> Level 1 힌트로 "ls, cd, cat, file, du, find"가 주어졌다. 하나씩 입력하여 비밀번호를 찾아보자 ls를 통하여 현재 디렉토리에 존재하는 파일의 목록을 살펴보았다. 그 결과 readme 파일이 존재한다는 것을 확인하였고 cat 명령어를 통해 readme 파일의 내용을 살펴보았다. readme 파일은 boJ9jbbUNNfktd78OOpsqOltutMc3MY1 이라는 내용을 담고 있었고 이 값이 Level1로 가는 비밀번..
#4 프로그램 구동 시 Segment에서는 어떤 일이? 프로그램이 실행되어 프로세스가 메모리에 적재되고 메모리와 레지스터가 어떻게 동작하는지 알아보기 위하여 간단한 프로그램 예를 들어 보았다. void function(int a, int b, int c){ char buffer1[15]; char buffer2[10]; } void main(){ function(1, 2, 3); } 실행 결과 이러한 결과가 나왔다. simple.c 프로그램이 컴파일 되어 실제 메모리 상에 어느 위치에 존재할지 알아보기 위해 컴파일 한 뒤, gdb를 이용하여 어셈블리 코드와 메모리에 적재될 logical address를 살펴보도록 하자. 앞에 붙어 있는 주소가 logical address이다. 이 주소를 자세히 보면 fu..
#1 목적 이 문서는 시스템에서 원하는 명령을 실행시키기 위해 사용되는 Buffer Overflow 공격에 대한 원리와 지식들을 설명한다. 즉, Buffer Overflow 공격이 어떻게 이루어지는지, 이러한 공격이 가능하게 되는 그 원리와 컴퓨터 시스템의 기본 구조에 대해서 설명하고 있다. #2 8086 Memory Architecture 8086 시스템의 기본적인 메모리 구조는 위 그림과 같다. 시스템이 초기화 되기 시작하면 시스템은 커널을 메모리에 적재시키고 가용 메모리 영역을 확인한다. 시스템은 운영에 필요한 기본적인 명령어 집합을 커널에서 찾기 때문에 커널 영역은 반드시 저 위치에 있어야 한다. 32bit 시스템에서는 CPU가 한꺼번에 처리할 수 있는 데이터가 32bit 단위이므로, 메모리 영역..