pwnable/Shellcoding

쉘코딩 (shellcoding) - (1)

범고래_1 2022. 3. 25. 19:47

 

쉘코딩 하는 여러 방법 소개 시리즈 (1)

어셈 코딩하고 해당 코드를 실행하는 방법 소개

아래 예시는 argv[1] 문자열을 뒤집는 쉘코드

# main.s
# gcc -nostdlib main.s -m32
.intel_syntax noprefix
.global _start

.text
_start:
	push ebp
	mov ebp, esp

	# if (argc < 2) exit;
	cmp DWORD PTR [ebp+4], 2
	jl exit

	# length of argv[1] : esi
	mov esi, 0x0 # i = 0
loop:
	mov eax, DWORD PTR [ebp+0xc]
	add eax, esi
	add esi, 1
	cmp BYTE PTR[eax], 0
	jne loop
	sub esi, 1

# while (true) i--; if(i <= -1) break; write(1, &argv[1][i], 1)
write_one_char:
	mov eax, DWORD PTR [ebp+0xc]
	sub esi, 1
	cmp esi, -1
	jle exit
	add eax, esi

	# write(1, eax, 1)
	mov edx, 1
	mov ecx, eax
	mov ebx, 1
	mov eax, 4
	int 0x80 # write
	jmp write_one_char

# exit(0)
exit:
	mov ebx, 0x0
	mov eax, 0x1
	int 0x80 # exit

실행

$ ./a.out

 

 

'pwnable > Shellcoding' 카테고리의 다른 글

쉘코딩 (shellcoding) - (3)  (0) 2022.06.08
쉘코딩 (shellcoding) - (2)  (0) 2022.03.25
쉘코드 만들기 (asm 코딩)  (0) 2018.12.23
쉘코드 만들기 (직접)  (0) 2018.12.23