nc 0 9026으로 접속하면 asm프로그램이 실행될거고 문제의도에 알맞은 shellcode를 넣으면 flag가 나온다고 한다.
위와 같이 프로그램을 실행하면
이 문제에서는 SECCOMP 샌드 박스에서 x64 쉘 코드를 실행해야 한다.
open () / read () / write () 시스템 호출만 사용하여 플래그가 나오는 쉘 코드를 만들도록하십시오. 라고 나와 있다.
stub[]= 부분을 명령어 형태로 보니
아래와 같이 모든 레지스터를 초기화를 한다.
파일을 메모리에 대응시키기위해 mmap함수를 이용해서 메모리에 0x1000공간을 만들어준다.
그다음에 memset을 통해서 0x1000공간을 모두 NOP로 채워주고
memcpy를 이용해서 sh시작 주소에 stub[]를 채워주고 strlen(stub)를 이용해서 offset 값을 구해준다
그후에 read(0, sh+offset, 1000)을 수행하기 때문에 결국 sh에는
stub[]+내가 넣은 쉘코드
와 같은 구조가 될 것이다.
chroot는 가상의 루트 디렉토리를 생성하므로 심볼릭 링크도 불가능하다.
그후에 sandbox함수가 실행되고
sh()이 한번 실행된다.
쉘코드를 만들어서 넣어야하는데 콜 할 수 있는 함수는 read, open, write, exit만 주어져 있다.
쉘코드를 구성해보면 아래와 같다.
pwntool을 이용하면 shellcode도 편하게 만들 수 있다..
'System Hacking > pwable.kr' 카테고리의 다른 글
19.pwnable unlink (0) | 2018.03.10 |
---|---|
17.pwnable memcpy (0) | 2018.02.28 |
16.pwnable uaf (0) | 2018.02.26 |
15.pwnable cmd2 (0) | 2018.02.23 |
14.pwnable cmd1 (0) | 2018.02.23 |