FTZ(19)
-
Layer7 21과제 -F.T.Z level 20 풀이-
FSB(format string bug) fsb는 format stirng(서식 문자)를 사용하는 함수 딴에서 인자 전달을 확실하게 하지 않았을 경우에 발생하는 취약점이다. 먼저 format string이란 무엇일까? 다음과 같은 것들이 포맷 스트링이다. 아마 c언어를 한번 해본 독자라면 "%d, %f, %c, %s"와 같은 format string(서식문자)를 많이 접해보았을 것이다. 하지만 이 표에는 없는 "%n"과 "%hn"이라는 포맷 스트링이 존재한다. 이 포맷 스트링은 현재 (esp+4+포맷 스트링에 따라 더해질 byte 수)가 가리키고 있는 값을 주소로 인식하고 이전에 출력했던 byte수 만큼 그 주소값에 대입을 하겠다는 포맷 스트링이다. 이 두 포맷 스트링의 차이점은 %n 같은 경우에는 4b..
2019.07.12 -
Layer7 20과제 -F.T.Z level 19 풀이-
level18처럼 코드 길이가 엄청 길까봐 식겁했네요. 다행이에요. 짧아서 어셈블리 코드입니다. 오늘은 뭔가 소스코드가 비어있다는 느낌을 받으시지 않나요? 여태까지의 소스 코드와는 다르게 setreuid()나 system("/bin/sh")와 같은 함수들이 없습니다. 아무래도 쉘코드를 만들 있는지가 관건인거 같습니다. 먼저 레벨 20의 권한이 있어야 쉘을 실행시킬 수 있으므로, 쉘을 실행시키는 코드의 앞쪽에 setreuid의 기계어 코드를 넣어야합니다. 따라서 setreuid(3100,3100);과 같이 만들면 됩니다. 이 값이 바로 setreuid() 함수의 기능이 포함된 쉘코드입니다. "\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80..
2019.07.12 -
Layer7 19과제 -F.T.Z level 18 풀이-
와... 소스 코드가 엄청 길어서 한 화면에 담을 수도 없네요... check 변수에 0xdeadbeef를 넣어주면 될거 같아요. 그럼 gdb로 뜯어보죠. 그전에는 못 본 레지스터가 나왔네요~! data segment 프로그램 실행시에 사용되는 데이터가 여기에 들어갑니다. 여기서 말하는 데이터는 전역 변수입니다 프로그램 내에서 전역 변수를 선언하면 그 변수가 data segment에 자리 잡게 됩니다. data segment는 다시 네 개의 data segment로 나뉘는데 각각 현재 모듈의 data struct, 상위 레벨로부터 받아들이느 데이터 모듈, 동적 생성 데이터, 다른 프로그램과 공유하는 공유 데이터가 있습니다. esi: DS 레지스터가 가리키는 data segment 내의 어느 데이터를 가리..
2019.07.12 -
Layer7 18과제 -F.T.Z level 17 풀이-
어떻게 하면 좋을까요?.. ret부분에 쉘코드를 넣어줄수도 있을거 같고, call에다가 넣어줄 수도 있을거 같아요. (사실 힌트 파일을 만들어서 system("my-pass")를 추가 시켜주었는데 안 되네요...) 처음에 변수를 할당 받아준 후, 그 바로 밑에서 ebp-16의 위치에 printit() 함수의 주소를 대입해줍니다. 그 후 그 밑에 빨간 상자에서는 eax 레지스터로 ebp-56(buf)의 값을 옮겨 대입해줍니다. 쉘코드를 받을 수 있게 프로그램을 만들어봅시다. 그런 다음 환경 변수에 쉘코드를 설정하고 그 주소를 프로그램을 실행하여 받습니다. why did you do it
2019.07.11 -
Layer7 17과제 -F.T.Z level 16 풀이-
level16의 힌트입니다. 아마 오버플로우 시켜서 call 함수 포인터에 shell() 함수의 주소가 들어가게 하면 될거 같아요. 우리가 그동안은 "set disas intel"이라고 해도 실행이 가능했지만 실제 리눅스에서는 set disassembly-flavor과 같이 풀네임을 적어주어야 intel문법으로 변환 가능하다고 합니다. 16진수 38은 56 그리고 바로 그 밑에 부분이 call 함수의 주소를 대입시키는 부분 같습니다. 0x80484d0 shell() 함수의 주소 입니다. 따라서 페이로드를 56-16(call 함수 포인터의 위치)+"shell 함수의 리틀엔디안 주소" 와 같이 짜면 될거 같습니다. 와 정답! : king poetic
2019.07.11 -
Layer7 16과제 -F.T.Z level 15 풀이-
로그인을 한 후 hint이다. 이를 gdb로 뜯어보자. 여기서 레벨 14와 같이 똑같이 0x38을 할당해준다. 따라서 메모리 구조 다음과 같다. crap(4)+dummy+*check(4)+dummy+buf(20)+dummy=56 또한 check와 buf 사이의 거리가 40이다. 우리는 ebp-16(check) 위치의 0xdeadbeef의 주소를 넣어주면 될것 같다. x/x16 main 명령어를 써서 main 함수의 메모리 구조를 보자. x/x [주소] 명령어를 사용하여 찾아보니 0x80484b2의 위치에 0xdeadbeef가 있다는걸 알았다. x명령어 gdb는 x명령어를 사용해 메모리를 조사할 수 있다. o : 8진법으로 보여줌 x : 16진법으로 보여줌 u : 10진법으로 보여줌 t : 2진법으로 보여..
2019.07.11