이번 문제는 힌트가 없습니다. 한 번 보시죠.너무 소스코드가 길어서 없어도 되는 부분은 없앴습니다. 중요한 부분은 Null Canary 를 넣어주기 때문에 인자를 길게 구성할 수 없다는 것입니다.그래도 문제가 풀 수 있도록 구성해야 하니 fgets 함수를 제공해주네요. 어떻게 풀어야 할까요 ?ebp 값을 저장해놓고 복구하는 과정이 없고, buffer 의 값을 0으로 모두 초기화시키니...stdin 임시 버퍼를 사용하면 될 것 같습니다. 하지만 문제가 있습니다.(gdb) x/4xw 0x008cb7400x8cb740 :0xfbad22880xb7fa90050xb7fa90050xb7fa9000(gdb) x/4xw 0x008cb7400x8cb740 :0xfbad22880xb7fb50050xb7fb50050xb7f..
Fedora 4 부터는 그 전 문제의 아이디와 비밀번호를 알아야 접속할 수 있습니다.dark_stone 으로 로그인한 후에 문제를 보겠습니다.딱히 어려운 문제는 아닙니다. 랜덤 라이브러리가 걸려있지만, 사실상 없다고봐도 무방합니다. fake ebp 를 사용못하니 그냥 무난하게 풀겠습니다.더미가 존재하지 않기 때문에 ebp 를 덮기위해서는 260개의 문자가 필요합니다.또한 스택에 쌓인 값들을 보니, execl 을 사용하기 위해서는 ret 을 12번 정도주면 될 것 같습니다.일단은 에러가 나는 것을 보기위해 system 함수를 줘서 stderr 값을 out 으로 받았습니다.그 결과, 위의 85 ~ 54 까지의 값을 링크걸어서 실행해주면 될 것 같습니다.링크걸어 줄 파일은 위와 같이 코딩해줬습니다. 이제 링크..
이번 문제는 Fedora 3 LOB 의 마지막 문제입니다 ! 문제보시죠 ~xshell 을 이용해서 풀어봤는데 뭔가 더 보기가 좋네요 ㅎㅎ. 앞으로는 xshell 사용키로 했습니다.아무튼, 이번 문제는 전 문제와 풀이는 같지만 fgets 함수의 임시버퍼 부분을 지웁니다.xinetd 환경이라는 것을 빼면 다를 것이 없지만 전 문제와 똑같은 방식으로 풀면 풀리지 않을 확률이 높습니다.왜 그런지에 대해서 한 번 보고 시작하죠.일단 printf@got 주소는 0x804984c 입니다. 그렇다면 got 의 주소와 범위를 살펴보도록 하죠.data 영역의 주소와 printf@got 주소의 차이가 0x10 밖에 안나기 때문에 가젯을 잘못사용하면, data 영역을 침범하는 사태가 발생합니다. 그렇기 때문에 이번 문제에서는..
드디어 ! PPR 가젯을 제공하는 문제에 도달했습니다. 문제 보시죠.크... 엄청나게 기네요...중요한 곳은 두 곳이 있습니다. PPR(pop pop ret) 가젯과 setre* 계열 함수의 제공입니다. 즉, 간단한 ROP(Return Oriented Programming)의 개념을 이용한 문제라는 것을 알 수 있습니다 !plt, got, ppr 등을 모두 알고있다고 가정한 후에 문제를 풀겠습니다.먼저 공격 코드를 구성해보면,| buf(268) | +| strcpy@plt | ppr | printf@got+0 | system[0] | +| strcpy@plt | ppr | printf@got+1 | system[1] | +| strcpy@plt | ppr | printf@got+2 | system[2] ..
이번 문제는 fgets 로 입력을 받고 입력받은 것을 strcpy 로 옮겨주는 문제입니다. 버퍼는 256 바이트만큼 입력받는데 fgets 로 1024 바이트만큼 입력받은 값을 옮기기 때문에 취약합니다.먼저, 힌트를 보시면 fake ebp 나 got overwrite 를 사용하라고 나와있습니다.만... 사실 두 가지 방법 외에도 do_system 을 이용한 공격이 가능한데... 이것은 따로 찾아보시기 바랍니다.아무튼... 저는 원래 쉽고 간단한 do_system 으로 풀었습니다만, 여러분들을 위해 !mprotect 라는 함수를 이용한 방법을 소개해드리겠습니다.(워 게임에서 mprotect를 사용한 것은 이 문제가 최초군요.)일단 환경은 ASLR, Ascii-Armor, NX-Bit 입니다. 하지만 stdi..
11번 이후의 FTZ 문제 중 가장(?) 어려울지도 모르는 놈이 등장합니다 !FD_SET과 select는 이곳을 보고 공부하세요.간단히 설명하면 위의 코드는 read로 string 변수에 한 글자씩 입력받는 변수입니다.저희가 오버플로우시켜서 값을 바꿀 수 있지만 중요한 것은 리턴을 할수가 없다는 겁니다.그렇기 때문에 string 보다 높은 주소에 있는 check 값을 0xdeadbeef 로 수정해서 쉘을 획득해야 합니다.소스코드가 매우 간단하죠 ? 결과를 한 번 보세요. 신기하지 않나요 ? 사실 저도 배열이 이렇게 사용될 수도 있다는 것을 이 문제를 통해서 알았습니다 -_-;; 정말 신기하더군요.근데 사실 어떻게 생각해보면 당연하기도 하죠. 주소단위로 접근을 하니까요.아무튼 위의 예제를 보셨다면 풀 수 ..
끝이 다 와갑니다 !문제 17번을 보겠습니다.이번에는 전 문제와 달리 쉘을 실행시켜주는 부분이 사라졌네요 !그렇기때문에 저희가 쉘코드를 환경변수에 올려주고 그 부분으로 call을 진행해야 합니다.보시면 fgets로 48개를 받는 것을 볼 수 있는데 40개 이후로 call의 주소 값을 조정할 수 있습니다.결과적으로 0x42424242 라는 주소에는 아무것도 없다고나오면서 에러를 보여줍니다.그렇다면 저 곳에 저희가 올려놓은 쉘코드의 주소를 올려주면 어떻게 될까요 ?위와 같은 소스코드를 작성해주세요. 더 자세한 것을 보시려면 이곳으로 가시면 됩니다.( BOF를 체계적(?)으로 배우실 수 있어요 ! ) 아무튼 컴파일하고 실행해보면,쉘코드의 정확한 위치를 구할 수 있습니다.이를 토대로 공격을 수행해보면,답해봅시다..
이번에는 조금(?) 참신한 문제입니다.이번에는 Fake EBP 가 안먹히도록 ebp 주소를 저장해놨다가 복구시키네요...이것은 execl+3 을 사용하지 못하도록 하려는 제작자의 배려(?)입니다...사실 전 첫 번째 문제도 RET Sled 로 풀었는데... 두 번째 문제라서 살짝 당황했었습니다.(execl+3 은 이후에 알게된...)아무튼 RET Sled는 Nop Sled 와 비슷한 원리입니다. ret이 수행되면, pop eip; jmp eip 의 동작이 수행됩니다. 그렇게 되면 esp의 값이 4 바이트만큼 증가하게 되죠 ? | ebp(4) | ret(ret) | new ret | -> ret에 ret을 넣어주면 그 뒤의 값이 ret으로 바뀌는 원리를 이용하는 것입니다. 이게 통하는 이유는 스택의 모든 ..
매우 간단한 문제입니다.그 대신 이제 ASLR, Ascii-Armor, NX-Bit 가 걸려있어서 쉘코드를 실행시키기도 어렵고, 공유라이브러리 함수를 연결시켜서 수행하기도 힘듭니다. 그 대신 정말 참신한 방법이 존재합니다. 바로, execl+3 의 주소를 이용하는 겁니다.이 글 읽는 분들이라면 아마 스택이 어떤식으로 만들어지고, 인자를 어떻게 참조하는지 아실겁니다. 그래도 간단히 보죠.| buf(264) | ebp(4) | ret(4) | 인자1 | 인자2 | -> 이와 같은 식으로 구성됩니다.위와 같이 구성되는 이유는 함수의 프롤로그 때문인데요. 함수가 처음 수행될 때 아래와 같이 수행됩니다.익숙하시죠 ? push ebp; mov ebp, esp -> 이 과정을 거침으로써 위의 기본 스택 구조가,| e..
- Total
- Today
- Yesterday
- 4xx
- Cloud
- steampipe
- terraform
- .get()
- stateType
- ViaAWSService
- teplate
- CIS
- ControlTower
- 2xx
- aws
- findinglatestversion
- cloudsecurity
- opensource
- web
- security
- conftest policy
- temlate
- 계정정보저장
- IAM
- AWS #CIS
- fleet manager
- scp
- defaulttheme
- REACT
- 우주와컴퓨터
- JavaScript
- compliance
- platform
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |