쉘코드 리눅스명령어로 잘라내서 환경변수에 넣기 질문

qkrwncks593의 이미지

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
"₩xcd₩x80" 
"₩x31₩xc0" 
"₩x50₩x68₩x2f₩x2f₩x73₩x68" 
"₩x68₩x2f₩x62₩x69₩x6e" 
"₩x89₩xe3" 
"₩x50" 
"₩x53" 
"₩x89₩xe1" 
"₩x89₩xc2" 
"₩xb0₩x0b" 
"₩xcd₩x80" 
"₩x31₩xdb" 
"₩xb0₩x01" 
"₩xcd₩x80"; 
 
int main( ....) {
 
..
..
..
 
}

위에 있는 쉘코드를 리눅스명령어로 잘라내서 파일로 저장할때

$ head exploit.c | grep "^\"" // 1
$ head exploit.c | grep "^\"" | cut -d\" -f2 //2
$ for i in$(head exploit.c | grep "^\"" | cut -d\" -f2) //3
> do
> echo -en $1
> done > shellcode.bin

이렇게 한다는데 여기서 첫번째줄에서 | grep "^\"" 은 무슨역할이죠?

쉘코드에서는 "\xf0 이런형식으로 써있는데 어떻게 ^#" 을 포함하죠?

또 cut 에서 cut -d\" -f2 는 무슨뜻이죠? 이해가 안가네요 ... cut 이라는명령어가 잘라내는건 알겠는데 .. 위 소스코드랑 다른거같기도하고..

마지막으로 번거롭지만

$ for i in$(head exploit.c | grep "^\"" | cut -d\" -f2) //3
> do
> echo -en $1
> done > shellcode.bin

가 무엇이죠??

익명 사용자의 이미지

grep명령에 대해 조사해 보시고,
^은 찾는 문자열의 처음을 의미
\"은 "문자를 의미하는데, "이 제어문자이므로, 이스케이프(escape)처리
따라서, "^\""은 ==> 각 라인의 첫번째 문자(^)가 " 인 줄을 모두 찾아 출력하라! 가 됩니다.