[LOB] skeleton -> golem id : skeletonpw : shellcoder 먼저 힌트를 보겠습니다. 코드입니다. ret을 제외한 모든부분을 0으로 초기화를 합니다. 환경변수는 물론 buffer와 argv까지 이용을 못합니다. 그래서 다른 방법을 이용해야 합니다. 바로 공유라이브러리를 사용하는 것 입니다. LD_PRELOAD 환경변수에 등록시켜놓으면 실행을 할때 우선적으로 설정한 라이브러리가 참조되기 때문에 라이브러리를 실행할때, 스택 어딘가에 저장이 되고 이를 이용해서 쉘을 따면 됩니다. 먼저 아무것도 없는 코드를 짠 후 컴파일을 해줍니다. 여기서 -fPIC는 독립적인 코드로 만들어 주고 목적파일을 만들고 -shared는 목적파일을 이용해 공유라이브러리를 생성 할 때 사용하는 옵션입니..
[LOB] vampire -> skeleton id : vampirepw : music world 먼저 힌트를 보겠습니다. 코드 입니다. 밑에가 잘렸습니다. 밑에 //ultra argv hunter 이 부분을 잘 보면 argv를 모두 0으로 초기화를 합니다. 그렇다면 쓸 수 있는 스택 공간이 있는지 확인해보겠습니다. 디버깅을 하기위해 tmp폴더를 만들고 옮겼습니다. 쓸 수 있는 스택 공간을 확인 해보겠습니다. 코드와 같이 0으로 다 초기화가 되었는데 마지막 쯤에 0이 아닌 것들이 있습니다. 이 부분이 뭔지 확인해보니, 실행 파일의 경로 이네요. 이 부분을 이용해서 공격하면 될 것 같습니다. argv[0]에 쉘 코드로 심볼릭 링크를 걸어주고 실행하고 저 위치로 ret주소를 변경해주면 될 것 같습니다. 먼저..
[LOB] troll -> vampire id : trollpw : aspirin 코드를 보겠습니다.중요한 부분은 이 부분 인데요. argv[1] 46이 ff이면 안됩니다. 고로 ret주소가 bfff이면 안된다는 것 인데요 그냥 놉 많이 박아서 bffe로 만들어 주면 됩니다. 놉을 10만개 박았습니다. core파일이 생성 되었습니다. 놉 천지 입니다. 저는 주소를 0xbffe82a0으로 잡고 공격을 해보겠습니다.먼저 tmp 파일에 공격을 해보겠습니다. 쉘이 실행되었습니다. 실제 파일에 공격을 해보겠습니다. vampire의 password는 “music world” 입니다.
LOB orge -> troll id : orgepw : timewalker 코드입니다. argc가 2개 여야 하네요 흠.. 환경변수는 초기화를 해주고 argv[1]의 마지막은 bf이니 스택을 이용해야 하고 argv[1]의 길이는 48이상이면 안됩니다. buf는 초기화를 하고 argv[1]도 초기화를 하네요 그럼 딱 하나 남았네요 argv[0]을 이용해서 공격하면 될 것 같습니다. 저번 레벨에서 써먹었던 심볼릭 링크를 이용하면 될 것 같습니다. ln -s troll `python -c 'print "\x90"*98+"\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x..
LOB darkelf -> orge id : darkelfpw : kernel crashed 코드입니다. 매우 길어졌습니다.// here is changed!if(strlen(argv[0]) != 77){ printf("argv[0] error\n"); exit(0);} 전 단계에서 이게 추가 되었습니다. argv[0]의 길이가 77이 아니면 종료하라는 것 같네요. 심볼릭 링크를 이용하면 될 것 같습니다. 심볼릭 링크는 대명사 같은 느낌인데요 그냥 파일을 대신해서 실행시켜 주는 것입니다. 분석은 생략하겠습니다. 전 레벨이랑 똑같군요. argv 0 부분의 이름만 조작해주면 될 것 같습니다. 심볼릭 링크를 걸어줬습니다. 75를 한 이유는 ./ 가 있기 때문이죠. 잘 만들어졌습니다. 바로 공격해보겠습니다. 쉘..
LOB wolfman -> darkelf id : wolfmanpw : love eyuna 코드입니다. 전 레벨과 달라진 점이 인자의 길이를 체크합니다. argv[1] 의 길이가 48이상이면 프로그램이 종료되는군요. 그러면 argv[2]를 이용해서 쉘코드를 전달하고 ret주소를 argv[2]의 주소로 뛰어주면 될 것 같습니다. 분석을 위해 tmp폴더를 만들고 cp하도록 하겠습니다. 어셈블리 코드입니다. 중요한 부분만 보도록 하겠습니다. 44만큼 스택 프레임을 구성하고 있습니다. ebp-40부터 strcpy를 합니다. 따라서 메모리구조는 i(4) | buf(40) | sfp | ret 이 되겠습니다. 저희는 argv[2]의 주소를 구해야합니다. 이렇게 해보겠습니다. 보니까 답이 나오네요 bf구간은 argv..
LOB orc -> wolfman id : orcpw : cantata 코드입니다. 아까와 다른 점이 있다면 똑같이 환경변수를 초기화 해주지만 이번에는 버퍼도 0으로 초기화를 해줍니다. 따라서 쉘코드를 버퍼안에 못 넣겠네요. 그렇다면 ret뒤에 공간을 이용하면 가능하지 않을까요. 일단 분석을 하기위해서 tmp라는 폴더를 만들고 옮겨서 분석하겠습니다. 어셈블리 코드입니다. 중요한 부분만 보도록 하겠습니다. 스택프레임을 44만큼 형성하고 있습니다. ebp-40부터 strcpy하는군요 따라서 메모리구조는 i(4) | buf(40) |sfp | ret 이 되겠습니다. 저희는 ret뒤에 공간을 이용할 것이니 주소를 구해보도록 하겠습니다. 이렇게 해보겠습니다. 0000000이 보이시나요 버퍼가 0으로 초기화 된 모..
LOB goblin -> orc id : goblinpw : hackers proof 코드입니다. //egghunter 부분은 환경변수 기법을 막은 것 입니다.그리고 argv1의 47번째 글자가 \xbf가 아니면 종료가 됩니다. strcpy를 해주니 bof가 일어납니다. 분석을 해보겠습니다. 분석을 위해 tmp폴더로 파일을 cp하겠습니다. 어셈블리 코드입니다. 중요한 부분만 보도록 하겠습니다. 스택 프레임을 44만큼 할당 하고 있습니다. ebp-40부터 strcpy 하는 군요 따라서 메모리 구조는i(4) | buf(40) | sfp | ret 이 됩니다. sfp까지 44개를 채워주고 ret을 조작해주면 될 것 같습니다. 하지만 ret의 마지막이 \xbf여야 하니깐 스택을 이용해야 할 것 같습니다. Nop..
- oob
- rt_sigreturn
- pwnable.tw
- 해킹
- fsop
- shellcoding
- tcache
- FSB
- fastbin
- SQLi
- heap
- TLS
- ebp change
- exit
- 본선가고싶다
- HackCTF
- pwnable
- srop
- hacking
- codegate
- stack reusing
- pwable
- glibc
- overflow
- fastbindup
- Total
- Today
- Yesterday