| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Webhaking
- 순서도
- TCP
- 리버싱
- 드림핵
- 워게임
- 시스템
- network
- 알고리즘
- dreamhack
- WarGame
- webhacking
- 비박스
- reversing
- XSS
- ftz
- 네트워크보안
- Web
- 시스템해킹
- bee-box
- 네트워크
- 해킹
- hacking
- CodeEngn
- 웹해킹
- System
- 소프트웨어
- 웹
- 모의해킹
- 소프트웨어보안
- Today
- Total
목록전체 글 (236)
Without a Break
ASLR(Address Space Layout Randomization) : 바이너리가 실행될 때마다 스택, 힙, 공유 라이브러리 등을 임의의 주소에 할당하는 보호 기법 커널에서 지원하는 보호 기법 cat /proc/sys/kernel/randomize_va_space2 명령어로 확인 가능 리눅스에서 이 값은 0/1/2의 값을 가질 수 있음 ASLR이 적용되는 메모리 영역 No ASLR(0) : ASLR을 적용하지 않음 Conservative Randomization(1): 스택, 힙, 라이브러리, vdso 등 Conservative Randomization + brk(2): (1)의 영역과 brk로 할당한 영역 ASLR의 특징 코드 영역의 main 함수를 제외한 다른 영역의 주소들은 실행할 때마다 변경..
스택 카나리(Stack Canary) : 함수의 프롤로그에서 스택 버퍼와 반환 주소 사이에 임의의 값을 삽입하고, 함수의 에필로그에서 해당 값의 변조를 확인하는 보호 기법으로, 카나리 값의 변조가 확인되면 프로세스는 강제 종료된다. 카나리 생성 과정 : 카나리 값은 프로세스가 시작될 때, TLS에 전역 변수로 저장되고, 각 함수마다 프롤로그와 에필로그에서 이 값을 참조한다. 카나리 우회 1. 무차별 대입 무차별 대입으로 x64 아키텍처의 카나리 값을 알아내려면 최대 256^7번, x86 에서는 최대 256^3 번의 연산이 필요하다. => 즉, x64 아키텍처의 카나리는 무차별 대입으로 알아내는 것이 현실적으로 어렵고, x86 아키텍처는 구할 수 닝ㅆ지만 실제 서버를 대상으로 무차별 대입을 시도하는 것은 ..
행 우선/열 우선 배열 2차원 배열 A(5,5)의 원소에 다음과 같은 모습으로 값을 저장해주는 알고리즘 순서도 [순서도] 1행 1열부터 값을 채운 뒤 A(R,C)에 V값을 저장하고, R과 V의 값을 1씩 증가시켜 저장하는 것을 R(행)이 다섯번째 행이 될 때까지 반복한다. R(행)이 5보다 크면 반복문을 끝내고 C의 값을 1 증가시켜 준 뒤, 다시 R=1부터 반복한다. (V의 값은 계속 증가) C(열)이 5보다 크면 알고리즘을 종료한다. 모래시계 모양 배열 2차원 배열 A(5,5)의 원소에 다음 그림과 같은 모습으로 값을 저장하는 알고리즘 순서도 [순서도] 1~3행까지는 저장된 값의 수가 감소(5->3->1)하고 3~5행까지는 저장된 값의 수가 증가(1->3->5)하므로 3을 변수 M으로 두고 2개의 중..
쉘코드 ① 공격자 입장에서는 무한한 가능성 => 모든걸 다 알 수 있기 때문 ② Set-UID까지 추가되면 특정 시스템에 대해 신같은 존재 => 원하는 걸 다 할 수 있기 때문 Stack 변수들의 악용 지역 변수들은 스택에 연속하여 위치 => 만일 특정 변수의 크기를 넘어서는 값이 쓰여지면 다른 영역에 corruption(변질) 발생 가능 *다른 영역의 예시 ① 다른 지역 변수 ② 이전 함수의 EIP ③ 리턴 주소 ④ Arguments 값 ⑤ 다른 함수의 영역 지역변수의 corruption 지역변수를 오염시키는 상황의 난해함 변수의 위치가 알려지지 않음 효과가 응용코드의 동작에 의존적 => 좀 더 예측가능하고 보편적인 공격을 위해서는 스택 프레임의 고정된 정보를 corrupt시키는 것이 좋음 (Frame..
플래그는 /app/flag.txt에 있다는 것을 알 수 있다. image viewer로 들어가면 url을 입력할 수 있다. 입력되어있는 url을 그대로 두고 view를 하면 이미지경로에 있는 dream.png를 보여준다. 사용자가 빈칸에 입력한 url이 "localhost"이거나 "127.0.0.1"일 경우, error.png를 화면에 띄운다. 즉, localhost, 127.0.0.1을 우회해서 url을 입력해야 함 => 0x7f000001 혹은 Localhost 사용 입력창에 localhost를 입력하니 error.png가 뜬 것을 확인할 수 있었다. error.png가 뜬 상태에서 개발자 도구로 들어가면 error.png의 current source를 알아낼 수 있었다. 포트 번호는 1500~180..
문제 M과 N이 주어질 때 M이상 N이하의 자연수 중 완전제곱수인 것을 모두 골라 그 합을 구하고 그 중 최솟값을 찾는 프로그램을 작성하시오. 예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 완전제곱수는 64, 81, 100 이렇게 총 3개가 있으므로 그 합은 245가 되고 이 중 최솟값은 64가 된다. 입력 첫째 줄에 M이, 둘째 줄에 N이 주어진다. M과 N은 10000이하의 자연수이며 M은 N보다 같거나 작다. 출력 M이상 N이하의 자연수 중 완전제곱수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 완전제곱수가 없을 경우는 첫째 줄에 -1을 출력한다. #include int main() { int m, n; int..
문제를 보면 flag.py 안에 플래그가 있음을 확인할 수 있다. 제공해주는 URL로 들어가면 인덱스 페이지가 가장 먼저 뜬다. 메모 작성 페이지에서 일단 메모를 여러가지 입력해보았다. 메모를 입력한 후 개발자도구의 소스코드를 확인하면 /read?name=FILENAME 형태로 file의 내용을 확인할 수 있음을 알 수 있다. 문제에서 flag.py 안에 플래그가 있다고 했으므로 ../flag.py로 파일 이름을 지정해주면 다음과 같이 플래그를 얻을 수 있다.
php 파일을 사용해 플래그를 획득하는 문제이다. 플래그는 /flag.txt에 있음을 알 수 있다. 제공된 URL로 들어가면 인덱스 페이지가 뜬다. 파일 업로드 취약점을 활용할 것이므로 먼저 업로드 페이지를 사용할 것이다. 파일 업로드 취약점을 통해서 플래그를 찾아볼 것이므로 메모장에 flag.txt의 내용을 확인하는 코드를 작성한 후 php 파일로 저장해준다. 작성한 php 파일을 업로드한 뒤 리스트 페이지에서 업로드한 flag.php 파일을 열어보면 다음과 같이 플래그를 얻을 수 있다.