이번 문제는 지금까지보다 훨씬 쉽습니다... 고고 !그냥 간단하게 buf를 지나서 check 값을 0xdeadbeef 로 바꿔주면 됩니다.... 너무 간단해서 금방 하시겠죠 ??미리 해보세요 ~~ 정말 쉽다는 것을 느끼실 수 있고 자신감이 엄청나게 향상되실 겁니다 !... 풀어 보셨죠 ?? 그럼 풀어 볼게요 !이번 문제가 정말 쉬운 이유는 쉘코드도 필요가 없다는 것에 있습니다...그냥 [ebp-56] 부터 [ebp-16] 까지의 차를 구한 후 덮어쓰고 후에 0xdeadbeef 라는 값을 써주면 끝나죠... 풀겠습니다 !뭔가 FTZ는 가면갈수록 쉬워지는 느낌이 듭니다...답은 guess what
사실 FTZ는 너무 단순하게 뻔해서 BOF라고 부르기 민망한 정도지만 그래도 가봅시다 !소스코드를 보시면 아시겠지만... 그냥 기존의 11, 12번과 같이 막 넣었다가는 BOF탐지 됐다고 하고 kill로 signal(11, SIGSEGV) 을 전달합니다.이걸 어떻게 우회해야 할까요 ??바로 떠오르는 아이디어는 그냥 값을 덮을 때 i의 값을 0x01234567 로 만들어 주는 것 입니다. 사실 이게 이렇게 보면 매우 간단하고 쉽게 우회가 가능한 것 같지만 실 서버에서는 이 값이 ASLR이라고 해서 계속 바뀌므로 예측하기 힘들게 됩니다. 아무튼 저희가 해야할 건 13번 이므로 바로 풀어볼게요 ~gdb로 분석해봅시다 ! if문의 비교 부분에 BreakPoint를 걸고서 실행시켜 보면,빨간 네모 친 위에 것이 ..
시작합시다 !소스코드입니다... 뭐가 이리 긴지 -_-;; 캡처하기도 무섭네요...암튼 분석해보면 포인터로 함수(bad) 가리키고 buffer[50] 선언을 해놨습니다. 그리고 if 로 조건을 걸고, memcpy, memset으로 값을 복사한 후에 앞의 바이트들을 4바이트 빼고 모두 0으로 초기화 시킵니다.딱 보면 감이 오시죠 ? memcpy 부분에서 overflow 되는 것을 이용해서 함수포인터의 주소 값을 바꾸는 문제입니다.일단 막 값을 넣다보면,76개를 넘어가는 순간부터 포인터 값을 침범합니다.코드 구성을 A*76 + '문제 풀기 위한 주소' 를 넣으면 되는거죠. 사실 좀 귀찮아서 gdb로 분석안하고 그냥 막 값 넣다보니 딱 나와서 -_;; 분석하실 분은 분석해보세요. 안 어려워요.바로 풀면 ~9C..
바로 시작 !이번 문제는... 취약점이 두 가지입니다. 포맷 스트링 버그(FSB) 와 버퍼 오버플로우(BOF)죠...근데 사실 저도 아직은 FSB를 잘 설명 못 할 것 같아서... 20번에서 좀 더 가다듬고 설명드리고, 이번에는 BOF로 풀어봅시다 !gdb로 디버깅 하실 때는 복사해서 합니다 ~소스는 간단하니까 바로 보면 지역변수를 위한 공간을 0x108만큼 할당하고 있네요.지역변수가 하나니까 256+8(Dummy)라는 것을 알 수 있는 부분입니다. 그럼 스택의 구조는 아래와 같네요. | str(256) | dummy(8) | ebp(4) | ret(4) | argc(4) | argv |
이번에도 Level2 입니다만.... 문제가 다릅니다. 뭐 그냥 대체한다는 문제인가... 흠... 시작해봅시다.처음에 문제 소스 보고서 "뭐 이런 문제를 냈지 엄청 쉽네 -_-;;" 하면서 바로 아래와 같이 입력했습니다 ㅋㅋㅋㅋ??? 작다고 ? 왜 ? 이러면서 다른 수도 넣어보고 막 생쇼를 했습니다... 뭐 아무수나 막 넣어봐도 안되서 그냥 이 소스에서 모르는 부분을 딱 검색해봤습니다... 뭘까요...?바로 stdtod 부분입니다. stdtod 이건 아무래도 맞는 것 같아요그리고 두 번째로 궁금했던 것은 왜 3.141593을 넘기는데도 계산이 안되는가 였습니다...한 5분 생각해봤더니 간단하죠 -_-;;c언어를 하신 분들은 아시죠? 정밀도의 차이 ! float 와 double 이요.생각해보니, answe..
드디어 2번 입니다 ! 접속하고 바로 문제 살펴보죠 !문제가 두 개가 있습니다... 왜 두 개인지는 모르겠지만 둘 다 풀어봅시다 !level02.c 부터 살펴봅시다 ~사실 이 문제를 먼저 한 이유는 FTZ 6번에서 signal에 대해서 공부 자세히 했어서... 쉬워 보여서 했습니다 !시그널에 대해서 궁금하시면 클릭 !아무튼 SIGFPE라는 걸 일으키면 catcher라는 함수를 실행해준다는 것을 알 수 있습니다 ~SIGFPE가 뭔가 검색해봤습니다... 뭘 알아야 풀던가 하죠 ㅎㅎ..SIGFPE
Level10 풀이 시작 ! 먼저 매번 하는 과정을 해보면 !평소에 없던 program 디렉토리가 존재하고 hint 파일에서는 공유메모리의 키 값을 7530이라고 알려주네요.사실은 처음 문제를 접했을 때에도 그렇게 오래 걸리지는 않았던 문제인 것 같습니다. 그냥 몰라서 리눅스 공유메모리 검색했거든요 -_-;;검색해서 있는 코드들 잘 갖다 썻더니 답 나오드라고요 ㅎㅎ...여기를 참조해서 작성했습니다. 컴파일 후 실행시키면 !다음으로 넘어갑시다 ~
이번 레벨 부터는 Buffer Overflow 부분이 시작됩니다 !일단 매번 하는 것 있죠. 고고싱...좀 길죠...? 하하... 일단 코드 자체만 해석하는 것은 되실거라 믿어 의심치 않습니다... 만 ! 그래도 한 번 해석해보죠. 10바이트를 할당받은 두 개의 변수가 buf2, buf 순서로 선언이 되어있구요."It can be overflow : " 를 출력한 뒤 바로 입력을 받고 있습니다. 입력을 완료하면, buf2 변수와 "go" 문자열을 비교해서 맞으면 Level10의 쉘을 띄워줍니다.그런데 한 가지 이상한 것이 있네요...? buf에 입력을 하는데 왜 buf2에서 "go"를 비교하고 있을까요 ?? 아무것도 모르는 상태에서는 당황할 수 밖에 없습니다.gdb를 이용해서 한 번 살펴보죠 !hint의..
드디어 문제 8번 입니다 ! 바로 고고 ~오랜만에 find를 써야할 것 같은 문제입니다 +_+ ! 용량이 2700이라는데.... 한 번 찾아보죠...-_-;; ?? 뭐죠... 왜 안나올까요... 이상해서 man 페이지를 둘러봅니다.size 옵션에 대한 설명인데 보시면 바이트 단위로 찾으려면 c를 붙이라네요. 아무것도 안붙이면 기본적으로 512바이트를 기준으로 하구요. 사실은 삽질해서 c라는 것을 안 것이지만 ! 그것은 이 글을 읽는 분들에게 맡기겠습니다 하하 ~찾아보니 결과가 몇개 나오고 딱 봤을 때 '이건가?' 하는 파일을 읽어보면 원하던 값들이 나옵니다. John The Ripper 를 설치해서 풀어보면,답은 apple 이네요 ! 다음으로 고고싱 ~P.S. John The Ripper 링크는 윈도우 ..
- Total
- Today
- Yesterday
- Cloud
- web
- compliance
- 2xx
- IAM
- cloudsecurity
- fleet manager
- JavaScript
- .get()
- AWS #CIS
- platform
- teplate
- REACT
- findinglatestversion
- 계정정보저장
- 우주와컴퓨터
- temlate
- terraform
- conftest policy
- opensource
- steampipe
- ViaAWSService
- CIS
- defaulttheme
- stateType
- security
- scp
- aws
- 4xx
- ControlTower
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |