SQL注入是网络攻击的一种常见手法,攻击者通过对页面中的SQL语句进行拼组来获得管理账号、密码及更多的其他信息。这种攻击<nobr oncontextmenu="return false;" onmousemove="kwM(1);" id="key1" onmouseover="kwE(event,1, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC(event,1);" onmouseout="kwL(event, this);" target="_blank">方法</nobr>对于网站的危害是非常大的。
SQL注入攻击的一般方法
<clk></clk>以下代码是一个简单的数据输出页面,该页面通过从<nobr oncontextmenu="return false;" onmousemove="kwM(2);" id="key2" onmouseover="kwE(event,2, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC(event,2);" onmouseout="kwL(event, this);" target="_blank">浏览器</nobr>地址栏获得参数来显示相应的内容。
<?php
$id = $_GET['id'];//获得参数
$sql = "SELECT * FROM posts WHERE postid = $id"; //定义SQL
mysql_connect("localhost", "root");//连接服务器
mysql_select_db("guestbook");//连接数据库
$rs = mysql_query($sql);//执行SQL
if(mysql_numrows($rs))//如果记录存在,则输出
{
$row_rs = mysql_fetch_assoc($rs);
echo "TOPIC: ".$row_rs['topic']."<br>";
}
else//否则提示错误
{
echo "Record not found!";
}
?>
上面的代码通过获得id参数的值来进行数据查询,并在页面上显示相应的数据信息。如果数据无法从数据库中找到,则显示相应的错误信息。例如,从浏览器上访问http://127.0.0.1/ bugs/eg2.php?id=9可以获得如下结果。
Topic: This is a test!!
<clk></clk>这里,SQL注入的方法是通过对id参数的赋值来构造一个用户自定义的SQL语句给<nobr oncontextmenu="return false;" onmousemove="kwM(0);" id="key0" onmouseover="kwE(event,0, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC(event,0);" onmouseout="kwL(event, this);" target="_blank">程序</nobr>执行来实现的。例如,从浏览器上访问http://127.0.0.1/bugs/eg2.php?id=9 and 1=1,仍然可以看到上面的结果。但是,此时程序实际上执行的SQL语句如下所示。
SELECT * FROM posts WHERE postid = 9 and 1=1
可以看出,由于程序简单地将id参数放置在SQL语句中,实际上程序已经允许用户自由地运行SQL语句了。从浏览器上访问http://127.0.0.1/bugs/eg2.php?id=9 and 1=2,可以看到页面的运行结果如下所示。
Record not found!
这是因为程序执行了如下的SQL语句致使记录没有成功返回而造成的。
SELECT * FROM posts WHERE postid = 9 and 1=2
有了这一基础,就可以通过猜测存储管理员的用户名和密码的表名和列名来对网站进行SQL注入攻击了。例如,当前用于存储管理员用户的数据表名为admin,在浏览器上访问http://127.0.0.1/bugs/eg2.php?id=9 and (select length(adminname) from admin limit 0,1)>0可以使PHP程序对admin表进行查询并获得当前用于存储管理员账号和密码的列名。如果上面的访问可以使页面内容正常显示,则说明猜测正确。实际上,上面的访问执行了下面的SQL语句。
SELECT * FROM posts WHERE postid = 9 and (select length(adminname) from admin
limit 0,1)>0
就这样,通过对数据库字段长度的逻辑判断获得了存储管理员账号和密码的表名和列名。下一步,就可以通过对管理员账号和密码的每个字符的ASCII码的判断来获得管理员账号了。例如,当前管理员的账号为admin,在浏览器上访问http://127.0.0.1/bugs/eg2.php?id=9 and (select ascii(substr(adminname,1,1)) from admin limit 0,1)=97可以使网页正常显示,这是因为当前管理员账号为admin,通过使用ascii函数和substr函数来获取第一个字母的ASCII码为 97。当SQL中的逻辑成立时,页面就可以正常地显示了。
漏洞防护措施
前面所述的攻击方法虽然很烦琐,但是只要有充足的时间,完全可以通过前面所示的PHP代码来获取管理员的账号和密码,并对网站数据进行修改。解决这一问题的方法很简单,就是对通过地址栏传入的参数的值进行判断或者格式化处理,如以下代码所示。
<?php
$id = (int)$_GET['id']; //通过对id参数进行数据类型转换过滤掉非法SQL字符
$sql = "SELECT * FROM posts WHERE postid = $id";//定义SQL
echo "SQL: ".$sql."<br>"; //输出SQL
mysql_connect("localhost", "root"); //连接服务器
mysql_select_db("guestbook"); //连接数据库
$rs = mysql_query($sql); //执行SQL
if(mysql_numrows($rs)) //判断是否存在记录
{
$row_rs = mysql_fetch_assoc($rs);
echo "TOPIC: ".$row_rs['topic']."<br>";
}
else//如果记录不存在,则输出错误信息
{
echo "Record not found!";
}
?>
上面的代码首先将传入的参数的值转换为整型数据,然后再放入SQL语句中执行。这一简单的举措可以将地址栏中的非数字字符全部过滤掉,大大增强了系统的安全性。
分享到:
相关推荐
使用示例-使用Sqlmap获取DVWA数据 (6)判断列名:root@kali:~# sqlmap -r /etc/url -D dvwa -T users –column 单击此处添加标题 * * * * * * * * * * * * * * * * 目录页 SQL注入漏洞的利用 数据提取方式 数据提取...
SQL注入的危害-绕过登录 某高校招聘录入系统登录框存在SQL注入漏洞: SQL注入的危害-数据盗取 智慧医疗安全之云信医疗主站存在SQL注入漏洞,涉及近500W+用户数据: SQL注入的分类 SQL注入测试方法 判断注入漏洞的...
《安全技术经典译丛:SQL注入攻击与防御(第2版)》前一版荣获2009Bejtlich图书奖,第2版对内容做了全面更新,融入了一些的研究成果,包括如何在移动设备上利用SQL注入漏洞,以及客户端SQL注入等。 《安全技术...
SQL注入漏洞全接触,SQL注入漏洞全接触,SQL注入漏洞全接触,SQL注入漏洞全接触
SQL注入漏洞演示源代码 更多免费资源请查看:http://download.csdn.net/user/php_fly
利用谷歌搜索SQL注入漏洞关键词 目标关键字+inurl:id 英语字母及单词+inurl:id 网站域名+inurl:id 阿拉伯数字+inurl:id inurl:asp?id= inurl:Article_Print.asp? EnCompHonorBig.asp?id=随便加个数字 showproduct....
信息安全技术基础
YXcms-含有SQL注入漏洞的源码包,亲测可用真实有效,如有侵权,请联系CSDN管理员删除即可
SQL注入漏洞测试入门篇
SQL注入漏洞原理分析
对于现代SQL注入检测大部分都是将语法分析策略为基础,但是此种策略检测的效率较低,并且还存在漏洞扫描不完善的问题,实现基于Web的SQL注入漏洞扫描系统的设计。对SQL注入漏洞给相应检测及防御技术进行研究,通过...
SQL注入漏洞全接触.ppt
宽字节注入、SQL手工注入漏洞测试(Oracle数据库)、SQL手工注入漏洞测试(...SQL注入漏洞测试(参数加密)、SQL手工注入漏洞测试(MySQL数据库)、SQL注入漏洞测试(delete注入)、SQL过滤字符后手工注入漏洞测试、延时注入...
自己动手编写SQL注入漏洞扫描器
在CSDN上没有找到,所以将别处下载的上传过来,必须免费分享! 包括两个程序,代码尚未调试,希望有所借鉴。 代码仅供学习交流,切勿行危害安全之事,务必遵守法律法规!
SQL注入漏洞全接触 注入是常见的利用程序漏洞进行攻击的方法,是很多入门级"黑客"喜欢采用的攻击方式,近来网上对它的讨论很热烈,所以我在本期专题中为读者揭示SQL攻击的主要原理以及如何防范这种攻击。 全文分为十...
Web安全开发:SQL注入攻击和网页挂马.pdf