2013-08-25 1 views
-4

진수 버전 을 위해 그것을 것은 프로그램이 형태로 작성된다하는 프로그램의 진수 버전 것입니다어떤 리눅스에서 예를 들어 프로그램의

누군가가 위의 코드가 무엇을 나에게 설명 할 수

char esp[] __attribute__ ((section(“.text”))) /* e.s.p 
release */ 
= “\xeb\x3e\x5b\x31\xc0\x50\x54\x5a\x83\xec\x64\x68″ 
........... 
...... 
..... 
“\xc0\x40\xeb\xf9\xe8\xbd\xff\xff\xff\x2f\x62\x69″ 
“\x6e\x2f\x73\x68\x00\x2d\x63\x00″ 
“cp -p /bin/sh /tmp/.beyond; chmod 4755 
/tmp/.beyond;”; 
? 당신이 보통이 컴퓨터가 실행할 수있는 명령어를 나타내는 원 바이트

shellcode으로 대해 참조됩니다에 연결되어 있고, 일반적으로 이러한 buffer overflow attack 등 다양한 공격, 페이로드로 사용되는 무엇

+1

는 버퍼 오버 플로우처럼 보이는 악용 – P0W

+0

@nlightnfotis "은 cp -p/빈/쉬 /tmp/.beyond 것입니다; chmod를 4755 /tmp/.beyond; "은 – Kajal

+0

을 의미합니다. @Kajal 그것은 기본 시스템 쉘 ** (bash 일 것임)을'/bmp/'라는 이름의'/ tmp /'아래 숨겨진 새로운 파일에 복사 한 다음 소유권을 변경합니다 현재 프로세스에서이를 실행할 수 있어야합니다. – NlightNFotis

답변

4

.

가 생산되는 방식에 대한 질문에 대답 :

어셈블리 코드의이 부분을 고려

[SECTION .text] 
global _start 
_start: 
     xor eax, eax  ;exit is syscall 1 
     mov al, 1  ;exit is syscall 1 
     xor ebx,ebx  ;zero out ebx 
     int 0x80 

당신은 당신이 얻을 그것을 조립하는 경우이 :

Disassembly of section .text: 

08048080 <_start>: 
8048080:  b0 01     mov $0x1,%al 
8048082:  31 db     xor %ebx,%ebx 
8048084:  cd 80     int $0x80 

바이트를 필요는 b0, 01, 31, db, cd 80입니다. 지금 당신은 쉽게 다음과 같이 사용할 수 있습니다 :

char shellcode[] = "\xb0\x01\x31\xdb\xcd\x80"; 

Source
Another Source