일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준
- 드림핵
- c
- c++
- SWEA
- 풀이
- PHP 웹페이지 만들기
- CSS
- 파이썬
- 생활코딩
- Javascript
- lob
- WarGame
- hackctf
- 웹페이지 만들기
- BOJ Python
- 숙명여자대학교 정보보안 동아리
- BOJ
- Sookmyung Information Security Study
- 머신러닝
- XSS Game
- 숙명여자대학교 정보보안동아리
- 기계학습
- hackerrank
- 자료구조 복습
- Python
- The Loard of BOF
- HTML
- C언어
- siss
- Today
- Total
목록2021 SISS 21기 활동 (136)
혜랑's STORY
number를 클릭했더니 사진 한장을 다운받을 수 있었다. 힌트를 보니 flag의 형식이 PICOCTF{...} 라고 하니 다음 숫자에 위치한 알파벳을 대입하면 될 것이라고 생각하였다. c = [] while True: key = int(input()) if key == -1: break c.append(chr(ord('A') + key - 1)) plain = ''.join(c) print(plain) 앞에 PICOCTF와 { } 를 제외한 안에 들어가는 숫자들을 입력해 주었다. 출력되는 문장을 삽입하여 flag를 완성했다. 끝~
# 문제 ROT13은 카이사르 암호의 일종으로 영어 알파벳을 13글자씩 밀어서 만든다. # 풀이 ciphertext = "cvpbPGS{arkg_gvzr_V'yy_gel_2_ebhaqf_bs_ebg13_hyLicInt}" c = list(ciphertext) for i in range(len(c)): if c[i] >= 'A' and c[i] = 'a' and c[i]
# 문제 # 풀이 char* pangrams(char* s) { int alpha[26]; memset(alpha, 0, sizeof(alpha)); for(int i=0; i='A' && s[i]='a' && s[i]
# 문제 # 풀이 char* caesarCipher(char* s, int k) { for(int i=0; i='A'&&s[i]='a' && s[i]
# Checksec 64bit 바이너리 파일이고, NX가 걸려있다. # IDA 함수 목록을 살펴보니 __libc_init() 함수가 있었다. 따라서 앞서 공부했던 return-to-csu를 사용하여 문제를 해결해 볼 것이다. # Debugging Break Point 0x4005f6 : main 함수 코드 첫 부분 0x40064b : read() 함수 호출 전 즉, 56개 이상의 문자를 입력함으로써 Return address 영역을 덮어 쓸 수 있다. Exploit method ROP 기법을 이용한 Exploit 순서는 다음과 같다. 1번째 ROP Chain a. write() 함수를 이용하여 __libc_start_main@GOT 영역에 저장된 libc 주소를 추출합니다. b. read() 함수를 이용..
return-to-vuln이란 ROP 코드를 실행한 후에 취약성이 있는 코드로 다시 이동하는 것을 말한다. return-to-dl-resolve 기법에서 스택의 흐름을 변경하기 위해 "leave; ret;" gadget을 이용할 수 있다. 그러나 clang으로 컴파일된 바이너리 파일에서는 "leave; ret;"을 찾을 수 없다. GCC vs Clang 다음과 같이 GCC로 컴파일된 파일에서 "leave; ret;" gadget을 찾을 수 있다. 그러나 Clang으로 컴파일된 파일에서는 찾을 수 없다. 다음과 같이 Clang으로 컴파일된 바이너리는 스택(엔트리 포인트)을 정리할 때 "leave" 명령어가 사용되지 않는다. objdump -d rop 이러한 문제를 해결하기 위해 Return-to-vuln ..
return-to-csu는 __libc_csu_init() 함수의 일부 코드를 Gadget으로 이용하는 기술이다. __libc_csu_init() 함수는 프로그램 실행시 _init() 함수와 __preint_array, __init_array에 설정된 함수 포인터를 읽어서 함수를 호출한다. return-to-csu에서 사용되는 코드는 다음과 같다.(해당 코드는 __init_array에 저장된 함수 포인터를 읽어 호출하는 코드이다.) void __libc_csu_init (int argc, char **argv, char **envp) { ... const size_t size = __init_array_end - __init_array_start; for (size_t i = 0; i < size; i+..
# 문제 주어진 숫자를 아스키코드로 변환하는 문제인 것 같다. 간단하게 파이썬으로 코드를 작성하여 확인해보자. ciphertext = [84, 104, 101, 32, 115, 111, 108, 117, 116, 105, 111, 110, 32, 105, 115, 58, 32, 111, 108, 109, 111, 104, 97, 100, 103, 101, 111, 108, 97] for i in ciphertext: print(chr(i), end='') 결과는 다음과 같다. 간단히 문제를 풀 수 있었고 성공이다!