sql注入语句学习

说明

注入漏洞作为登顶过web十大漏洞多次的漏洞,危害性不言而喻,其中sql注入就是注入漏洞常用的手段。其形成的原因是由于web在接收传参数据时,对数据的过滤不够严格,将其带入到数据库查询中,导致用户可以通过传参一些sql语句来对数据库进行查询,修改等操作。传参的sql语句通过拼接后执行。

这边看了一个博客,结合他的办法实际验证一下拼接的方式,我们用sqli---labs来实验,先修改一下第一关的源码,显示出执行的sql语句

我们输入id=1看看执行的sql语句是什么

可以看到一个sql语句被执行了,尝试一下id=2

可以看到爆出来了一个账号密码,可以继续去尝试id=3、4、5....会发现由不同的账号密码,现在我们尝试单引号闭合

可以看到报错了,去看sql语句可以看到1后面有一个单引号落空了,在sql语句中单双引号都是要成对出现的,所以这边报错了,验证一下我们传参id=1''

没有报错,为了方便理解我们再加上一组对比,传参id

那么现在可以清楚的知道了他的拼接情况。

最后是注释和恒真假效果

复制代码
?id=1' and 1=1--+

1=1恒真也可以写成2=2或a=a等类似格式,其作用是确保注入后的 SQL 语句逻辑成立,从而验证注入点或绕过某些防护规则,可测试注入是否成功(若页面正常显示,则存在注入漏洞)。也有1=2恒假条件,可以通过这个判断是否有注入漏洞,但不能直接获取数据,需要加上其他的回显手段来获取数据。

--+这是一种闭合手段,也有其他的闭合手段例如#等等可以用于其他的注入情境,这边就不多说了,--+中--是注释符号,+在url是空格的编码被编译成空格,确保注释符号生效。添加注释符号的目的是将后面自带的语句注释掉,确保我们传参的语句语法格式正确。

整个sql语句SELECT * FROM users WHERE id='2' -- ' LIMIT 0,1如果没有加注释的话是从users表中选取id2的记录,不过只返回符合条件的第一条记录,所以我们加上注释符可以显示users表中所有id为2的记录,limit 0,1的作用是从行号0开始往下面搜索,只返还一条id=2的数据。

总之sql注入的目的是为了获取一些数据或者修改数据库的一些数据等等,是针对数据库的一种攻击手段,我们通过传参sql语句确保它绕过验证,执行成功。

相关推荐
要一起看日出1 小时前
MVCC-多版本并发控制
数据库·mysql·mvcc
Hx__1 小时前
MySQL InnoDB 的 MVCC 机制
数据库·mysql
速易达网络1 小时前
ASP.NET MVC 连接 MySQL 数据库查询示例
数据库·asp.net·mvc
T1an-11 小时前
Axum web框架【实习】
学习·rust
知识分享小能手1 小时前
React学习教程,从入门到精通, React 新创建组件语法知识点及案例代码(11)
前端·javascript·学习·react.js·架构·前端框架·react
玉衡子2 小时前
MySQL基础架构全面解析
数据库·后端
梦中的天之酒壶2 小时前
Redis Stack扩展功能
数据库·redis·bootstrap
emma羊羊2 小时前
【 SQL注入漏洞靶场】第二关文件读写
sql·网络安全·靶场·sql注入
GreatSQL2 小时前
GreatSQL分页查询优化案例实战
数据库
Leo.yuan2 小时前
不同数据仓库模型有什么不同?企业如何选择适合的数据仓库模型?
大数据·数据库·数据仓库·信息可视化·spark