资讯专栏INFORMATION COLUMN

sql注入之order by猜列数问题

weizx / 289人阅读

摘要:问题简述在用做注入检测时,遇到一个小小的问题猜出来的列数跟数据库表中的列数不匹配。在未了解之前,我一直想当然的以为就是获取数据库表中的列数,在两次实际检测过程中,确实发现这个是我所不能理解的。所以猜解得到的列数还跟在后端的逻辑有关。

环境: xampp-win32-5.6.3-0-VC11  dvwa-1.0.8
前言

有幸在网上搜到一款非常不错的渗透测试演练系统 — dvwa ,作为学习,演练真的非常强大啊! 在学习的过程中也遇到一些问题,所以这里做学习分享记录。

问题简述

在用dvwa做sql 注入检测时,遇到一个小小的问题 — order by 猜出来的列数跟数据库表中的列数不匹配。(注入时猜出来两个字段,但是实际数据库的表中却有6个字段)。在未了解之前,我一直想当然的以为 order by就是获取数据库表中的列数,在两次实际检测过程中,确实发现这个是我所不能理解的。

问题详情

在发现注入点后,进行猜列数时,用了如下语句:


故此我们猜出有两列,但是我去数据库查看相应的表时,发现字段比这个多

搞定问题

在别人的指导下作了如下分析:

将猜列数语句直接在sql数据库执行,发现他们的结果跟在web页面注入时都是不一致的

而在数据库执行得到的6列则是跟数据库匹配的,难道order by 猜的列数有问题?

最后去注入代码看到源码一下豁然开朗:

$getid = "SELECT first_name, last_name FROM users WHERE user_id = "$id"";

你也看到了,我在mysql执行的语句是 select * ,而 注入代码则是 select first_name, last_name。

小结

网上大多资料说的order by来猜列数,实际是猜查询出的列数,而不是表实际的列数。order by本来就是指定的结果如何order,针对的就是查询结果而不是原表。所以order by猜解得到的列数还跟在后端的逻辑有关。

实用

这个有什么用?我用一个例子来简述。

在注入时,用order by 猜出结果集有两个字段,且两字段名分别为:user pwd (实际数据库表中还有id一字段)

在爆字段值时:当注入语句这样时可能什么也得不到,甚至直接报错:

代码:

and 1=2 union select user, 2 from admin 

error:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /usr/local/webroot/cw/about/index.php on line 95

这时我们需要对注入语句进行转换下:

and 1=2 union select concat(id,0x232323,user,0x232323,pwd),2 from admin

这样就能到两字段的值了

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31928.html

相关文章

  • sqli-labs过关write up记录(Page-1)

    摘要:当后面的数字大于表的列数时就会报错访问页面正常,访问页面异常所以这个表有个字段。联合查询获取信息运算符可以将两个或两个以上语句的查询结果集合合并成一个结果集合显示,即执行联合查询。 sqli-labs靶机搭建 docker部署: docker pull acgpiano/sqli-labs docker run -d -p 80:80 acgpiano/sqli-labs 访问127...

    KitorinZero 评论0 收藏0

发表评论

0条评论

weizx

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<