일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- The Loard of BOF
- BOJ
- 숙명여자대학교 정보보안 동아리
- 웹페이지 만들기
- Javascript
- hackerrank
- XSS Game
- 생활코딩
- c++
- 기계학습
- Sookmyung Information Security Study
- WarGame
- SWEA
- CSS
- 파이썬
- Python
- 드림핵
- PHP 웹페이지 만들기
- BOJ Python
- 백준
- HTML
- C언어
- 머신러닝
- 풀이
- lob
- hackctf
- 숙명여자대학교 정보보안동아리
- siss
- 자료구조 복습
- Today
- Total
목록분류 전체보기 (346)
혜랑's STORY
# 문제 # 풀이 #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); long long low = 0, high = -999, mid, cnt; int n, m; cin >> n >>m; int* list = new int[n]; for (int i = 0; i > list[i]; if (high < list[i]) high = list[i]; } while (low 0) cnt += list[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='') 결과는 다음과 같다. 간단히 문제를 풀 수 있었고 성공이다!
# 문제 문제에서 주어진 url을 가져와 보았다. %59%69%70%70%65%68%21%20%59%6F%75%72%20%55%52%4C%20%69%73%20%63%68%61%6C%6C%65%6E%67%65%2F%74%72%61%69%6E%69%6E%67%2F%65%6E%63%6F%64%69%6E%67%73%2F%75%72%6C%2F%73%61%77%5F%6C%6F%74%69%6F%6E%2E%70%68%70%3F%70%3D%69%67%64%6F%64%6C%70%65%6E%73%67%64%26%63%69%64%3D%35%32%23%70%61%73%73%77%6F%72%64%3D%66%69%62%72%65%5F%6F%70%74%69%63%73%20%56%65%72%79%20%77%65%6C%6C%20%64%..