셸코드 질문입니다
조회수 919회
#include <stdio.h>
char shell[] = "\x78\x56\x34\x12";
int main(){
float p1;
int *p2;
p2 = (int*)&p2 + [ 빈칸 ];
(*p2) = (int)shell;
빈칸에 들어갈수 있는 코드가 뭐가 있을까요?
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
쉘코드 테스트 코드같은데요 32 크로스 컴파일했는데 wsl 에서는 실행이 안되는거 같네요 그래서 코드 수정했서요 ( compile option : -fno-stack-protector )
안하면 마지막에 ret 에 eax 로 넣다보니 0x7fff가 남아서 정상적으로 rip 조작이 안되서요 ㅎㅎ
간단하게 말하면 [ ret sfp p1 p2 ] 이 있으니. p2 기준에서 +@ 해서 ret의 주소값을 p2에 박고 p2가 가리키는 위치에 shellcode를 넣으면 됩니다.(만약 canary 가 있으면 카나리 범위도 계산해야합니다.)
char shell[] = "\x87\x65\x43\x21"; int main(){ float p1=0x1; long *p2; p2 = (int *)&p2 + 5 + (long)(*p2) ; (*p2) = (long)shell; return 0; }
[----------------------------------registers-----------------------------------] RAX: 0x0 RBX: 0x0 RCX: 0x8000640 --> 0x41d7894956415741 RDX: 0x8201010 --> 0x21436587 RSI: 0x7ffffffee048 --> 0x7ffffffee267 ("/home/howoni/qqt") RDI: 0x1 RBP: 0x8000640 --> 0x41d7894956415741 RSP: 0x7ffffffedf70 --> 0x1 RIP: 0x8201010 --> 0x21436587 R8 : 0x7fffff3ecd80 --> 0x0 R9 : 0x7fffff3ecd80 --> 0x0 R10: 0x0 R11: 0x3 R12: 0x80004f0 --> 0x89485ed18949ed31 R13: 0x7ffffffee040 --> 0x1 R14: 0x0 R15: 0x0 EFLAGS: 0x10202 (carry parity adjust zero sign trap INTERRUPT direction overflow) [-------------------------------------code-------------------------------------] 0x820100a: and BYTE PTR [rax],cl 0x820100c: add BYTE PTR [rax],al 0x820100e: add BYTE PTR [rax],al => 0x8201010 <shell>: xchg DWORD PTR [rbp+0x43],esp 0x8201013 <shell+3>: and DWORD PTR [rax],eax 0x8201015 <completed.7698>: add BYTE PTR [rax],al 0x8201017: add BYTE PTR [rax],al 0x8201019: add BYTE PTR [rax],al [------------------------------------stack-------------------------------------] ...생략... Legend: code, data, rodata, value Stopped reason: SIGSEGV 0x0000000008201010 in shell ()
댓글 입력