보호되어 있는 글입니다.
이번에는 5번 입니다 ! 벌써 BOF네요 ㄷㄷ...이번 문제도 역시 alt 문제가 있는데요... 사실 전 풀이를 올리기 전에 풀어보고 올립니다. 근데 이번 alt 문제는 보자마자 그냥 분석도 안하고 꺼버렸어요 ㅎㅎ일단 비밀 글로 해놓고 풀고서 다시 공개할게요 !(귀찮다고는 말 못하는 속사정...) 바로 시작 !문제가 두 개지만 ~ 하나만 봅시다 ~.~FTZ 보다 더 쉬운 BOF 문제네요 ㅎㅎ...바로 gdb로 분석 들어갑니다 !소스가 간단하니 바로 printf에 BreakPoint를 걸고 A문자를 128개 넣어보면 스택 구조가 아래와 같다는 것을 알 수 있슴다 !| buf(128) | dummy(8) | ebp(4) | ret(4) |
문제를 바로 보니까... 아주 재밌는 것 같군요 !문제를 딱 보는데, popen 쪽에서 뭔가 취약한 것 같긴한데... 모르겠어서 그냥 검색했었습니다 -_-;;근데 나오는게... 참... php에서 popen으로 인자를 전달할 때 | 와 ; 의 취약점들이더군요....그래서 막 생각을 하다가 이렇게 해봤어요 !근데 안됨;; 이런... alias로 하면 간단히 될 줄 알았는데 alias 단계에서 해석이 안되는 건가 봅니다...그냥 그렇게 생각했죠. alias는 popen으로 실행될 때에는 상관없나보네... 하고요.검색도 해보고, which alias 명령으로 위치도 찾아봤는데 alias라는 파일이 존재하지가 않네요 -_-;; alias에 대해서 자세히 아는 분들 좀 알려주세요 ㅠㅠ...아무튼, alias가 안..
이번 문제는 지금까지보다 훨씬 쉽습니다... 고고 !그냥 간단하게 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
- Total
- Today
- Yesterday
- ViaAWSService
- JavaScript
- CIS
- steampipe
- web
- compliance
- stateType
- aws
- cloudsecurity
- AWS #CIS
- teplate
- IAM
- findinglatestversion
- REACT
- 계정정보저장
- platform
- conftest policy
- temlate
- .get()
- fleet manager
- 4xx
- security
- 우주와컴퓨터
- scp
- terraform
- defaulttheme
- Cloud
- opensource
- ControlTower
- 2xx
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |