[dreamhack] Memory Corruption - C (I) / 스택 버퍼 오버플로우
2021. 1. 24. 16:35
Study/System Hacking
버퍼 오버플로우는 할당된 버퍼의 영역을 넘어서는 데이터를 입력해서 다른 데이터를 오염시키는 것을 말한다. 버퍼 오버플로우가 발상하는 영역에 따라 지칭하는 명이 다른데, 스택에서 일어나는 경우 스택 버퍼 오버플로우라고 하고 힙 영역에서 일어나는 경우 힙 버퍼 오버플로우라고 한다. 보통 버퍼 오버플로우 취약점은 프로그래머가 버퍼의 길이에 대한 가정을 올바르지 않게 하여 발생한다. 길이 제한이 없는 API 함수들을 사용하거나 버퍼의 크기보다 입력받는 데이터의 길이가 더 크게 될 때 자주 일어나는 실수다. 아래는 버퍼 오버플로우를 발생시키기 위한 실습이다. - Ex1 // stack-1.c #include #include int main(void) { char buf[16]; gets(buf); printf("..
[2021-겨울] PHP/MySQL 스터디
2021. 1. 22. 21:40
Study/Web
[WEB]: XSS game 02
2021. 1. 19. 19:22
Study/Web Hacking
[Mission] [해결방법] level 1에서 했던 것처럼 script 태그를 사용했는데 level 2에서는 이 방법이 통하지 않았다. hint를 확인해보니 onerror 속성을 사용하라고 했다. 따라서 img 태그에 src을 없는 주소로 설정하고 onerror 속성에 alert()함수를 삽입했다. [결과]
[BOJ] 1037/1712
2021. 1. 19. 18:01
알고리즘
#1037: 약수 [문제] [코드] #include int main() { int a[50] = { 0 }, n, N; int max = 1, min = 1000000; scanf("%d", &n); for (int i = 0; i max) ? *(a + i) : max; min = (*(a + i) < min) ? *(a + i) : min; } N = max * min; printf("%d\n", N); return 0; } [코드설명] 어떤 정수 N의 약수는 1과 자기 자신을 제외했을 때 제일 작은 약수와 제일 큰 약수를 곱하면 자기 자신이 된다. 따라서 약수를..
[OverTheWire] bandit / Level 6 -> Level 10
2021. 1. 14. 18:19
Study/System Hacking
: level 5 → level 6 level 5에는 inhere 디렉토리 아래에 있는 파일에 다음 레벨로 가는 패스워드가 있고, 그 파일의 용량이 1033bytes라는 힌트가 주어졌다. find 명령어로 inhere 디렉토리 아래에 size가 1033bytes인 파일을 찾았고, cat 명령어로 파일 내용을 출력했다. 다음 레벨의 게임 패스워드는 "DXjZPULLxYr17uwoI01bNLQbtFemEgo7"이다. : level 6 → level 7 level 6에서 다음 레벨로 가는 패스워드는 소유권자가 bandit7이고 그룹소유는 bandit6, 파일 크기는 33bytes인 파일안에 있다. 따라서 find 명령어로 표현식을 써서 해당 파일을 찾았다. cat으로 해당 파일을 출력해서 다음 레벨로 가는 패..
[달고나] 정리: 끝까지
2021. 1. 13. 04:28
Study/System Hacking
Buffer Overflow 공격 - 고전적인 방법 가장 고전적인 방법은 NOP를 이용하는 것이다. NOP는 No Operation의 약자로 기계어 코드가 다른 코드와 섞이지 않게 하는 역할을 한다. 따라서 CPU가 NOP를 만나면 아무런 수행을 하지 않고 유효한 instruction을 만날 때까지 한 바이트씩 이동한다. 쉘 코드의 시작 주소를 정확하게 알 수 없기 때문에 이러한 NOP의 특성을 이용해서 buffer overflow 공격을 실행하는 것이다. 쉘 코드의 앞을 NOP로 채우고 return address를 NOP가 채워져 있는 영역 어딘가의 주소로 바꾸면 EIP는 NOP를 지나 쉘 코드가 있는 곳을 가리키게 된다. - 환경변수를 이용하는 방법 *nic 계열의 쉘에서 환경변수는 포인터로 참조된다..
[WEB]: XSS game 01
2021. 1. 12. 18:45
Study/Web Hacking
[Mission] [해결 방법] script 태그로 alert("warning"); javascript를 넣어서 경고 팝업창을 띄웠다. [결과]
C 과제 1/2
2021. 1. 11. 23:20
알고리즘
# 문제1 [문제] 두 개의 문자열 s1, s2를 입력 받고, s1과 s2에 같은 index에 있는 문자들을 비교해서 같으면 O, 다르면 X를 출력하시오. - 문자열의 길이는 모두 30을 넘지 않음 - 문자 비교 중 공백일 경우 X를 출력함 - 포인터 사용 [코드] #include int main() { char s1[31] = { 0 }, s2[31] = { 0 }; char *p1 = &s1, *p2 = &s2; scanf(" %s", &s1); scanf(" %s", &s2); while (!(*p1 == '\0' && *p2 == '\0')) { if (*p1 == *p2) printf("O"); else printf("X"); p1++; p2++; } return 0; } [코드설명] s1배열과..
[OverTheWire] bandit / Level 0 -> Level 5
2021. 1. 10. 17:59
Study/System Hacking
: level 0 Xshell을 실행해서 게임에 접속했다. : level 0 → level 1 ls 명령어로 readme 파일을 확인하고, cat으로 파일 내용을 출력했다. 다음 레벨의 게임 패스워드는 "boJ9jbbUNNfktd78OOpsqOltutMc3MY1"이다. : level 1 → level 2 level 1에 접속 후 파일명이 '-'인 파일을 읽기 위해 cat ./- 명령을 사용했다. 다음 레벨의 게임 패스워드는 "CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9"이다. : level 2 → level 3 level 2에 접속 후 spaces in this filename 파일을 읽기 위해 cat spaces까지 입력 후 tab키 자동완성으로 파일명을 찾았다. 다음 레벨의 게임 패스워..