강의 설명

스택 버퍼 오버플로우
스택 버퍼 오버플로우 취약점에 대해 알아봅니다.

힙 오버플로우
힙 오버플로우 취약점에 대해 알아봅니다.

Off-by-one
off-by-one 취약점을 알아봅니다.

Out-Of-Boundary
Out-Of-Boundary 취약점에 대해 알아봅니다.

강의 목표
C에서 발생하는 메모리 커럽션 취약점들과 코드에서 발생하는 취약점을 이해할 수 있다.
이 강의와 관련된 질문들입니다.
53개의 질문
음수를 나머지 계산하는 방법??
-2147483648 % 10 = -8이 되는게 이해가 안가서 확인해봤는데요. C언어에서는 -1%10 = -1 -2%10 = -2 -3%10 = -3 이 되는 반면 파이썬에서는 -1%10 = 9 -2%10 = 8 -3%10 = 7 이더라구요. 왜 이런 차이가 생기는지 일단 C언어에서 연산과정을 확인하려고 어셈블 봣는데 대뜸 이상한 값을 imul하고 쉬프트하고 그러는거 보니까 어셈블 보고 이해하는건 엄두가 안나더라고요. 대충 결과값만 놓고 봤을때 C언어에서 -105 %10을 계산한다면 -를 떼고 105%10을 계산한 결과 5에 -를 다시 붙여줘서 -5가 되는 그런 원리라고 생각하면 되는거 같고 파이썬은 -16%3을 한다고 하면 16%3을 한 결과 1을 3에다 뺀 2가 최종 결과가 되는 그런 형태인거 같은데.. 왜 이런 차이가 있는걸까요
#시스템해킹
스택 버퍼 오버플로우 ex3 질문 있습니다
사이즈에 32작성하고 데이터에 32글자 넣어서 win까지 채우게하는거 맞나요??
#시스템해킹
out of boundary ex3 질문있습니다
% 10 때문에 -8이 되는게 맞나요?? 0xfffffff7를 10진수로 넣으면 왜 안되나요? 음수로 표현되서 그런가요..?
#시스템해킹
Memory Corruption - C (1)의 1-6 슬라이드에서 스택 버퍼 오버플로우 어떻게 일으키는 건가요?
Memory Corruption - C (1)의 1-6 슬라이드에서 스택 버퍼 오버플로우 어떻게 일으키는 건가요? 사이즈를 크게 입력해서 data를 입력해도 buf 영역에만 입력이 들어가고 size와 win 영역을 침범하지 못하더라구요
#시스템해킹
sfp의 뜻?
stack 영역에 buffer -> sfp -> ret 순으로 메모리가 설정 되어있는데 sfp가 정확히 뭔지 궁금합니다.
#시스템해킹
out of boundary-ex1 질문있습니다!
oob-ex1 문제에서 idx에 11을 넣어야만 win으로 값을 할당받게 되는 건가요? 12,13 그 이상의 수를 넣으면 출력이 안되는데...... 그 이유를 개념적으로 자세하게 설명해주실 분 계신가요 ㅜㅜ......
#시스템해킹
Outofbounday-ex1
Offbybounday-ex1에서 스택을 보면 높은 주소부터 차례대로 4byte(win) 4byte 10byte(buf) 이렇게 있는데 scanf로 입력받을때 주소값을 주는거로 알고있는데 , 그러면 buf[11] 의 주소를 줄게 아니라 buf[12] 의 주소를 줘야하는거 아닌가요?? 11인 이유가 궁금합니다
#시스템해킹
Out Of Boundary - ex2
@Out Of Boundary - ex2 왜 -1이어야 답인가요?? 다른 음수를 넣으면 value값이 0이 나오는 경우도 있고 segmentation 오류 뜨기도 하는데 -1이어야 하는 이유를 모르겠어요..
#시스템해킹
ex.2 질문이요
ex.2가 이해가 안되네여 답이랑 왜 답인지 좀 알려줄 분 계신가요..?
#시스템해킹
stack-2.c 질문이요
우분투에서 stack-2.c 작성해서 실행해봤는데 "Usage: ./stack-1 ADMIN_PASSWORD\n")만 나오는데 check_auth 함수 실행시켜보려면 어떻게 해야하나요?
#시스템해킹
ex.1 질문이요
ex.1은 어떤 식으로 작성해야 정답인가요? 만약에 정답이면 왜 정답인지 좀 알려주세여
#시스템해킹
OOB
```c int a; if (a==1){ printf("%d", &buf[idx]); } else return 0; ``` 라는 걸 봤을 때, '&'는 buf라는 정수형 변수의 주소를 가리키는 포인터라고 생각이 들었지만 그렇게 생각했을 뿐이고 정확하게 단정을 지을 수가 없었어요. 그런데 buf 뒤에 있는 [ ] 는 정수형 변수를 선언할 때, 배열로써 반복되는 수고를 덜 수 있는 기호라고 배운 기억이 있습니다. 그런데 포인터와 배열이 어떻게 이런 식으로 혼합될 수 있는 것인지... 정확한 답변이 필요하군요.
#시스템해킹
Out Of Boundary에 대한 질문
예시 OBB-1에서는 인덱스에 11을 줘서 영역 밖의 win 값을 하는데 왜 11을 인덱스로 넣어야만 win의 값이 변경되나요? 영역 밖을 접근할 수 있는 인덱스의 값은 많은데....
#시스템해킹
스택 버퍼 오버플로우 - ex1 에 관한 질문
예제1에서 ret 영역을 0x41414141 로 만들어라는것이 정확히 어떤의미인가요?? ret 앞 영역까지는 아무 글자나 써도 되는것이죠?? ret영역에 들어가는 숫자문자를 41414141로 작성하라는 뜻인가요??그리고 모듈 밑에 한칸마다 16진수표현법으로 표현되어있는데 이게 의미하는것은 무엇인가요??
#시스템해킹
버퍼를 오버플로우 시키는 실습에 관해
버퍼를 오버플로우 시키는 실습을 하려고 하는데 하나도 모르겠습니다..;;ㅎㅎ 좀 알려주세요 컴퓨터를 완전히 다 아는것은 아니기 때문에 저한테는 조금 어렵네요 ;; 하나도 모르겠습니다.; 알려주시면 감사하겠습니다.
#시스템해킹
스택버퍼 오버플로우 ex3 문제
고정된 크기의 버퍼보다 더 긴 데이터를 입력받아 스택 버퍼 오버플로우가 발생한다는데 어떻게 푸는지 잘 이해가 안됩니다
#시스템해킹
이 내용을 공부하기 위해서
이걸 배우기 위해 초반에 뭘 따로 공부같은걸 해야되나요? C언어를 배웠는데 그래도 뭐가 뭔지는 조금 눈에 보이지만 제가 초보라서 그런지 이해하기 힘들어서요
#시스템해킹
실습진행을 위한 준비
이 실습과 문제를 풀기위해선 파이썬과 c언어 기계어를 배워야 하나요?
#시스템해킹
Ubuntu 20.04.1 환경에서의 실습 진행
안녕하세요, stack-2.c를 Ubuntu 20.04.1에서 다양한 input 값을 넣어서 실행해봤는데 buffer overflow가 일어나지 않는 것 같습니다.... 혹시 어떠한 과정으로 방지가 되는건지 알 수 있을까요? password가 "1111111111111111111111111"와 같이 적당히 긴 경우(temp 배열 크기를 약간 초과하는 경우)에 temp를 출력했을 때 정상적으로 출력되고 그 이상으로 과도하게 긴 경우에는 세그폴트가 뜹니다. (어떠한 경우에도 auth는 0 값을 갖네요)
#시스템해킹
=oob1 정답이 궁금합니다.
win도 정수형태니까 31337을 그대로 집어넣으면 되는건가요?
#시스템해킹
스택버퍼오버플로우 ex2 메모리할당에 관해
temp 랑 auth 메모리 할당이 왜 temp가 먼저 되는건가요? 그리고 할당시 항상 마지막 메모리공간 바로 뒤에 새로운 변수의 메모리 공간이 할당되는건가요?
#시스템해킹
해법에 관한 질문
왜 int 배열의 최대치에서 +1을 한 2147483648에서는 나누었을때 -8이 되지만 그것보다 초과할 경우엔 안되는 건가요?
#시스템해킹
스택 버퍼 오버플로우
실습 부분의 부분에서요, 이러한 프로그램을 어떠한것을 사용해야하는지와, 실제로 할때 이러한 창에 도달하는지와, 또한 두번쨰줄로 안넘어가지는데 어떻게 해야하는지 궁금합니다.
#시스템해킹
버퍼 오버 플로우
하지만, 최근에 나오는 대부분의 사용자가 입력할 수 있는 비밀번호, 혹은 이름 등등은 대부분이 글자수 제한이 있는것으로 알고있습니다. 아니라면, 혹은 많은 양의 데이터를 전송할 수 있는 코드가 있나요?
#시스템해킹
OBB.ex1 질문
win에 값을 입력할떄 아스키코드값을 입력해야하나요? 만약 아스키코드값을 이용한다면 띄어쓰기는 적용 되나요?
#시스템해킹
스택 버퍼 오버플로우
스택 버퍼 오버플로우 하는 방법을 모르겠어요.
#시스템해킹
OOB-ex1 질문
buf[idx]에 정수밖에 입력을 못하는데 어떤 수를 입력해야 win 영역까지 접근할 수 있나요?
#시스템해킹
실습
예제 답은 어디서 확인가능한가요? 예제 1 모르겠어여ㅠㅠ
#시스템해킹
ex2, ex3 예제에 대해서 이해가 덜된것 같아요.. 도와주세요
1. ex2 예제 문제를 실제 리눅스에서 컴파일 후 했을때는음수값을 넣어도 win 변수 메모리에 도달할 수 없었는데 이유가 무엇일까요?? ㅠㅠ 2. ex3에서 2147483648, -2147483648 2가지를 넣었을때 win 변조가 되었는데 이유가 무엇일까요?? ㅠㅠ 도와주시면 감사드립니다!!!
#시스템해킹
스택 버퍼 오버플로우 실습
여기서 실습하는데 어떻게 해야할지 이해가잘 안가는데 뭐부터 공부하는게 좋을까요
#시스템해킹
질문
temp 뒤에 auth 값이 존재하는 것을 어떻게 알 수 있을까요?
#시스템해킹
1. 스택 버퍼 오버 플로우란?
데이터 영역 B에 나중에 호출될 함수 포인터를 저장하고 있다고 적혀있는데 혹시 Retun Address를 의미하는 것인가요?
#시스템해킹
출력 결과
Theori{d505e3a5558caa934f0dc61346226639} 이렇게 떴습니다 맞게 뜬걸까요?
#시스템해킹
oob ex2 오타 아닌가요?
idx = idx % 10 이 10행에 있다고 했는데 실지 코드에는 12행에 있어요. 뭐 큰문젠 아니지만 ... ㅎㅎ
#시스템해킹
oob1.c 질문
oob1.c 에서 buf변수의 메모리가 10바이트 인데 오른쪽 그림에는 40바이트네요. 제가 뭘 모르고 있는걸까요?
#시스템해킹
윈도우10 잠금 pin번호 입력할 때
윈도우10 잠금 화면에서 pin번호를 입력 했을 때, 설정된 pin번호보다 긴 문자열을 입력할 수 없도록 하는 게 버퍼 오버 플로우를 방지하기 위해서 인가요?
#시스템해킹
stack-2.c 질문
안녕하세요. 왕초보라 그런지 temp 버퍼 위에 auth 값이 존재한다는 말이 이해가 되질 않습니다. 왜 auth 값이 temp 버퍼 위에 존재하게 되는건가요?
#시스템해킹
ex2 & ex3 질문
안녕하세요. ex2 예시를 보면 buf보다 한칸 앞에 있기때문에 idx를 -1로 넣어서 예시 성공 할 수 있었습니다. ex3 예시를 보았는데 idx에 -pow(2,31)이 -pow(2,31)이 되니까 idx에 -pow(2,31) 값을 넣으면 음수 값을 얻어서 win에 접근하여 예시 성공 할 수 있었는데요. 질문이 몇가지 있습니다. 1. ex3의 경우 음수를 얻을 수 있는 음수가 -pow(2,31)만 존재하나요? 다른 경우를 생각해봐도 없는거같네요. 있다면 컴파일러마다 차이가 있을수 있나요? 2. buf 앞에 dummy때문에 win접근하려면 idx가 -8이 필요하게 되는데 여기 win보다 낮은 메모리에 할당된 공간이 없으니까 -pow(2,31)해도 그냥-8 idx위치인 win을 가르키는건가요? 3. 질문2가 맞다면 ex2에서 idx를 -2, -5, -9 등등의 값을 줬을때 성공하지 못하는 이유를 설명해주세요. 감사합니다!
#시스템해킹
예시 개선사항 제안입니다.
안녕하세요. pg5 실습의 check 함수에서 line8에서 int auth = 0; 을 주었으니 Overflow 부분 하단에 메모리에 temp배열은 초기화 안했으니 무시하고 auth값에 0이 들어가 있으면 좀 더 이해하기 쉬울거같네요. 0이외의 값은 참이라는 추가 설명과 함께요. 그리고 pg4의 설명 마지막 세번째줄 line 18이 오타인거같네요. line 24가 맞다면 수정 부탁드립니다. 수고하세요!
#시스템해킹
메모리 할당 순서에 대해서
변수 선언 순서를 보면 idx --> buf --> win 인데 오른쪽을 차트를 보면 win제일 첫번째로 되어있는데 늦게 할당받을수록 앞주소를 받는건가요?
#시스템해킹
오타(?) 및 질문이요!
오타(?) 1. stack-2.c에서 int main(void)인에 if(argc != 2)로 프로그램 인자 개수를 확인합니다! 2. if(argc != 2)에서 stack-1이라고 되있습니다! 질문 1. Dev C++로 똑같이 프로그래밍하여 실행해보왔습니다. int main(void)는 고치고여 그런데 이상하게 char temp[16]으로 해놨는데도 불구하고 a를 30개 까지 입력 후 31에서 버퍼오버플로우가 일어났습니다. 왜 그런지 알수 있을까요?
#시스템해킹
size를 32로 할 때
안녕하세요, 왕초짜 입니다. 사용자에게 입력받는 문자열 길이를 24보다 크게 받을 때 buf에 가득 차면 win으로 넘치는 것인가요? 운영체제에 따라 다른거로 알고 있는게 이렇게 가정한 것인지 궁금해서 질문드립니다. 감사합니다.
#시스템해킹
오타가 있습니다.
버퍼 크기가 설명에 25라고 있는데 24인것 같습니다.
#시스템해킹
오타가 있는 것 같습니다
본문의 함수명을 `check_auth`로 변경하거나, 코드의 함수명을 `check`로 변경해야 할 것 같습니다.
#시스템해킹
인덱스로 넣는 값에 대해서
-pow(2, 31)보다 작은 아무 음수나 넣어봐도 통과되는데 원래 그런건가요?
#시스템해킹
Out Of Boundary, oob-3.c 코드와 메모리 구조가 다른것 같습니다.
2^-31 을 입력하여 idx = - idx 을 우회하고, idx = idx % 10 을 하여 idx = -8 으로 만들어 공격을 하는 예제입니다. 하지만, idx가 음수인 경우 buf 의 하위 메모리 주소들을 접근하게 되는데(스택에서의 배열은 buf + 0x4 * idx 으로 접근하기에 buf 보다 낮은 주소들을 접근함) target인 win 변수는 코드상 buf 보다 앞서 정의 되어있으며, 직접 gcc로 컴파일 해보아도 아래와 같이 위치하게 됩니다. buf : rbp - 0x60 idx : rbp - 0x8 win : rbp - 0x4 즉 win 변수는 buf보다 상위 주소에 위치하여 idx 의 값이 음수가 되면 접근을 할 수 없게됩니다. 컴파일 하실 때, 어떤 flag를 넣으셨는지는 모르겠지만, win 변수는 https://dreamhack.io/learn/14#13 에서 오른쪽에 나온 모습과 비슷하게 buf보다 상위 주소에 위치하고 있는 것을 보입니다. 한번 다시 확인해주셨으면 좋겠습니다.
#시스템해킹
버퍼를 표시하는 칸이 한 칸 더 있으면 좋을 것 같아요
off-by-one이 일어나는지를 보기 위해 0x10 index의 메모리를 보여주면 좋을 것 같아요
#시스템해킹
코드랑 프로그램이랑 로직이 달라요
idx = -idx; 해주는 부분이 적용이 안된것 같네요
#시스템해킹
line number 관련 typo 제보입니다 : )
line 15에서 hello 메모리를 출력할 때 "HI!" 문자열이 아니라 공격자에게 오염된 데이터가 출력됩니다. (line 15 -> line 16) 15 printf("Input: %s\n", input); 16 printf("hello: %s\n", hello);
#시스템해킹
본문에 오타가 있습니다.
'''line 12에 들어가게 되는 idx 값은 양수가 되고''' line12는 아무 코드도 없는 라인입니다.
#시스템해킹
강의 평점
0.0★ (0)
0
Memory Corruption - C (I)
0.0★ (0)
Free
상세정보
약 2 hours 소요
보통 난이도
C, 기초 컴퓨터 구조