일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SWEA
- BOJ
- WarGame
- The Loard of BOF
- 웹페이지 만들기
- hackerrank
- Javascript
- Sookmyung Information Security Study
- 드림핵
- 기계학습
- CSS
- C언어
- XSS Game
- 생활코딩
- 숙명여자대학교 정보보안 동아리
- 숙명여자대학교 정보보안동아리
- BOJ Python
- lob
- 자료구조 복습
- PHP 웹페이지 만들기
- hackctf
- 머신러닝
- 풀이
- HTML
- 백준
- Python
- c++
- 파이썬
- siss
- c
- Today
- Total
목록siss (91)
혜랑's STORY
자료구조 복습용 sorting 문제입니다. -문제 Quicksort 1 - Partition | HackerRank Perform the first step of Quicksort: partitioning an array. www.hackerrank.com 퀵 정렬을 할 때, pivot을 arr[0]으로 사용하여 left, equal, right을 분류하고 그 리스트를 반환한다. - 풀이 int* quickSort(int arr_count, int* arr, int* result_count) { int *result = (int*)malloc(sizeof(int)*arr_count); int *left = (int*)malloc(sizeof(int)*arr_count); int *equal = (int*..
# checksec을 통해 보호기법 및 파일 유형 체크하기 -> 확인해본 경과 prob1dms 32bit 파일이고, 보호기법은 없다. 따라서 Return Shellcode를 사용해 프로그램의 흐름을 변경할 수 있을 것 같다. # IDA를 통해 Pseudo Code 확인하기 s의 크기는 0x14(20) byte라는 것을 알 수 있다. gets() 함수로 s 변수에 입력받은 문자열을 저장함으로써 버퍼오퍼플로우 취약점이 발생한다. name 주소는 bss영역에 있어 주소가 바뀌지 않는다. (bss영역 : 초기화되지 않은 전역 데이터를 위한 영역) -> 즉, s의 크기가 쉘코드를 전달하기에 충분하지 못하므로 name에 쉘코드를 담고 Return address를 name의 주소를 저장하면 RET 명령어로 해당 주소..
#Return to Shellcode Return to Shellcode란 Return address 영역에 Shellcode가 저장된 주소로 변경해, Shellcode를 호출하는 방식이다. CALL & RET instruction CALL 명령어는 Return address(CALL 명령어 다음 명령어의 위치(주소값))를 Stack에 저장하고, 피연산자 주소로 이동한다. RET 명령어는 POP 명령어를 이용해 RSP 레지스터가 가리키는 Stack영역에 저장된 값을 RIP(EIP)에 저장 후, 해당 주소로 이동한다. -> Stack 영역에 저장된 Return address 값을 변경할 수 있다면 프로그램의 흐름을 변경할 수 있다. 1. Proof of concept 코드를 통해 CALL, RET 명령어에..
자료구조 복습용 sorting 문제입니다. - 문제 www.hackerrank.com/challenges/insertionsort2/problem Insertion Sort - Part 2 | HackerRank Code Insertion Sort itself. www.hackerrank.com 첫번째 원소가 정렬되어있다 가정하고 두번째 원소부터 삽입 정렬을 반복 후, 올바른 위치에 삽입될 때마다 배열을 인쇄한다. - 풀이 // Complete the insertionSort2 function below. void insertionSort2(int n, int arr_count, int* arr) { for (int i = 1; i < n; i++) { int key = arr[i]; for (int j..
문제를 풀기 위해 xshell로 로그인 해 주었다. ID : troll / PW : aspirin 가장 먼저 존재하는 파일들을 알아보기 위해 ls -l 명령어를 실행하였다. vampire.c 파일의 내용을 확인해 보았다. 이번엔 46번째 자리의 값이 "\xff"가 되면 안되는 것 같다. 즉, Return address에 그보다 작은 주소를 주려면 엄청 큰 값을 넣으면 될 것 같다. 일단 vampire 파일을 복사한 뒤 gdb를 사용하여 main 함수의 어셈블리 코드를 살펴보자. gdb를 통해 스택 상황을 아래와 같다고 생각해 볼 수 있다. buffer SFP RET(return) 40 4 4 argv[2]의 주소를 찾기 위해 strcpy 함수가 끝나는 지점에 bp를 걸고 실행 인자로 "A"*44 + "\..
#게시물 삭제 -> 게시물을 삭제하는 코드이다. - 글 삭제 전 -> 글 삭제 테스트라고 되어있는 게시물을 삭제할 것이다. - 글 삭제 후 -> 글이 삭제되었다는 알람이 보여진 뒤, 목록으로 돌아가고 값이 삭제된 데이터베이스를 볼 수 있다. #사진 첨부 기능(미완) -> 사진 첨부 기능을 구현할 때, 게시글의 number가 필요한데 처음 글을 작성할 때 게시글의 number를 알아오는 방법을 알지 못해 게시글을 처음 작성할 때 이미지를 첨부하는 기능을 구현하지 못하였다. -> 이미지를 담는 데이터베이스이다. 앞의 number는 게시물의 번호를 받아와서 연결할 때 사용한다. 이미지를 선택해 주세요.
다른 문제들과 다르게 입력창이 따로 없고 # 뒤에 입력하는 값을 출력하고 있는 것 같다. # 뒤에 1234를 넣어 확인해보자 화면에 1234가 출력되고 있는 것을 볼 수 있다. 소스코드를 확인해 보자. 소스 코드를 살펴보니 URL에서 # 뒤의 값을 가져와 url 변수에 저장하고, url 변수에서 'https://'와 같은 형태가 있을 경우 "Sorry, cannot load a URL containing" 문구를 출력하고 아닐경우 해당 url에 있는 코드를 자바스크립트로 실행하는 것 같다. 힌트를 살펴보자. "google.com/jsapi?callback=foo"에서 callback의 값으로 alert을 전달해주면 될 것같다. 그러나 'https://'와 같은 형태는 검사를 하고 있기 때문에 'Https..