본문 바로가기

Security/System Security

(3)
[Dreamhack] return_address_overwrite https://dreamhack.io/wargame/challenges/351 Return Address OverwriteDescription Exploit Tech: Return Address Overwrite에서 실습하는 문제입니다.dreamhack.io 강의내용과 숫자까지 완전히 똑같은 문제라 어떻게 풀어야 할지는 강의에 다 나와있다. 스택프레임이 어디까지 확장되어있는지만 disassemble을 통해서 확인한 후 saved rbp 즉 sfp까지 포함해서 덮어쓰면 된다. 다만 이걸 바이트코드 형태로 넘겨줘야하는데, shell_basic에서 했던 pwntools을 통해 넘겨주면 된다.#!/usr/bin/env python3from pwn import *context.arch="amd64"p=remote..
[Dreamhack] shell_basic 문제풀이 https://dreamhack.io/wargame/challenges/410 shell_basicDescription 입력한 셸코드를 실행하는 프로그램이 서비스로 등록되어 작동하고 있습니다. main 함수가 아닌 다른 함수들은 execve, execveat 시스템 콜을 사용하지 못하도록 하며, 풀이와 관련이 없는dreamhack.ioshellcraft라는 파이썬 툴을 사용하면 쉽게 할 수있다는데, 우선 직접 쉘코드를 짜보는 식으로 진행했다.main 함수를 살펴보면 execve 시스템콜은 막혀있고read(0, shellcode, 0x1000);을 통해 STDIN을 나타태는 0을 통해 사용자에게 인풋을 받아서 그걸 쉘코드로 인식하는구나. 라고 알 수 있다.execve를 사용하지 못하기 때문에 orw 쉘코드..
[어셈블리어] 데이터 전달 방식 *intel 문법의 기준으로 작성된 글입니다.0x68732f6e69622f 라는 문자열을 rdi 레지스터에 전달하고 싶다고 하자.보통은 mov rdi, 0x68732f6e69622f를 떠올릴것이다. 나도 직관적으로 그렇게 적곤했다. 그러나 다른 레퍼런스에서는mov rax, 0x68732f6e69622fpush raxmov rid, rsp의 형태로 작성하는 것을 볼 수 있었다. 왜 한 줄로 끝낼 수 있는 것을 굳이 스택 포인터를 통해 넘겨줄까?차이는 문자열을 직접 레지스터[rdi]에 전달하냐 아니면 주소를 통해 전달하냐이다. 결론은 주소를 통해서 전달하는 것이 훨씬 더 안정적이다.예제인 문자열은 8바이트를 넘지 않아 데이터 전달 중에 잘려서 부분만 전달되거나 하지 않는다. 하지만 8바이트 이상의 데이터인 ..