博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql注入之order by猜列数问题
阅读量:6304 次
发布时间:2019-06-22

本文共 1115 字,大约阅读时间需要 3 分钟。

环境: 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

这样就能到两字段的值了

转载地址:http://eybxa.baihongyu.com/

你可能感兴趣的文章
Ruby 实现扫码二维码登录
查看>>
深入理解虚拟机之虚拟机类加载机制
查看>>
优秀的Python编程环境需具备的功能
查看>>
shell训练营Day3
查看>>
ESFramework Demo -- 简单的网络硬盘Demo
查看>>
1.b4
查看>>
洞悉物联网发展1000问之能否三分钟读懂智慧农业的新玩法?
查看>>
sqlRestriction的使用
查看>>
C 程序解决实际文件案例
查看>>
QuickBI助你成为分析师-邮件定时推送
查看>>
python 爬预警没解析前的
查看>>
2018-07-30笔记(shell)
查看>>
怎样制作个性的产品二维码
查看>>
linux下用wget下载文件
查看>>
讨教大学:2018通信工程师考试什么时候考,通信工程师证有用吗?
查看>>
基于Kafka构建事件溯源模式的微服务
查看>>
資源回收筒刪除檔案救回方法
查看>>
Openstack no valid hot
查看>>
linux运维学习路线,linux运维需要掌握什么知识?
查看>>
通过Dos命令行实现ftp下载和解压
查看>>