当前位置:网站首页>SQL注入基础
SQL注入基础
2022-08-10 23:35:00 【抱小猫】
目录
什么是SQL注入?
攻击者利用Web应用程序对用户输入验证上的疏忽,在输入的数据中包含对某些数据库系统有特殊意义的符号或命令,让攻击者有机会直接对后台数据库系统下达指令,进而实现对后台数据库乃至整个应用系统的入侵。
由于服务端不安全、不完整的过滤,导致不应该非法的数据被带入,比如单双引号等导致前面语句闭合,后面就可以随意写恶意语句。
(1)SQL注入原理
服务端没有过滤用户输入的恶意数据,直接把用户输入的数据当做SQL语句执行,从而影响数据库安全和平台安全。
(2)注入的两个条件
- 用户能够控制输入
- 原本程序要执行的SQL语句,拼接了用户输入的恶意数据
(3)MySQL中的注释
- - #号-->一般需要进行编码=%23
- - -->
- - /* */
(4)SQL注入的过程
- 攻击者访问有SQL注入漏洞的网站,寻找注入点
- 构造注入语句,将注入语句和程序中的SQL语句结合生成新的SQL语句
- 提交生成的新SQL语句到服务器的数据库中
- 数据库指向有注入语句的SQL语句,引发SQL注入攻击
(5)SQL注入带来的危害
- 绕过登录验证:使用万能密码登录网站后台等
- 获取敏感数据:获取网站管理员帐号、密码等
- 文件系统操作:列目录,读取、写入文件等
- 注册表操作:读取、写入、删除注册表等
- 执行系统命令:远程执行命令
- 最重要的危害:数据丢失
(6)万能密码的原理
- 通过在用户名处传入参数'or 1=1 --进行万能密码登录
- 实际查询语句:SELECT * FROM users WHERE username = **" or 1=1 --** AND password = 'anything';
- 使用or连接两个条件,无论前一个条件对不对,只要保证后面的条件恒为真时,就能正常执行查询语句
- 相当于:SELECT * FROM users ;
(7)判断是否存在SQL注入
?id=1 and 1=1(确保and前后条件都为真)
?id=1 '(加单双引号)
数据库函数(布尔盲注/时间盲注)sleep((3),0) 若为真则暂停3
length()函数判断
SQL注入的类型
(1)字符型
传过来的数据使用单双引号包裹起来,所以需要进行单双引号闭合。
案例sqli-labs第一关:在源码中可以看出id没有任何过滤,使用单引号闭合
(2)数字型
传过来的数据没有使用单双引号包裹,查询时就无需在id传输的数据上单双引号
案例sqli-labs第二关:源码中可以看出传入的数据id没有使用单双引号包裹,且无任何过滤,我们使用updatexml进行报错注入输出root
(3)布尔盲注
true/false,传入的数据放入字符串中,不依赖时间,可以直接判断传入的数据真或假,传入数据为真时有显示,数据为假时不显示
案例sqli-labs第八关:当数据为真时有输出显示
当数据为假时没有显示
(4)时间盲注
只能依靠时间判断真假,真假显示一个结果
案例sqli-labs第九关:当数据正确时暂停3秒,若数据不正确则不暂停
(5)报错注入
会将错误信息输出到屏幕上,对的不会显示数据,所以我们需要依靠mysql_error()函数报出我们需要的数据
案例sqli-labs第五关:使用各种报错注入函数进行报错注入
- ST_LatFromGeoHash() (mysql>=5.7.x)
ST_LongFromGeoHash (mysql>=5.7.x)、使用方法与ST_LatFromGeoHash()相同(不加concat函数仅能识别系统的命令,不能使用select查询语句)
GTID (MysQL >= 5.6.X-显错<=200)
floor (8.x>mysql>5.0)、全版本支持
ST_Pointfromgeohash((select语句),1) (mysql>=5.7) 或:ST_Pointfromgeohash(系统参数,1)(两个参数都要写)
updatexml : 接受三个参数(1,concat('~',(select查询语句),'~'),1)/ updatexml函数最多容纳32位,超过32位以后数据就无法显示。
extractvalue : extractvalue函数接收两个字符串参数,一个属xml标记片段和xpath表达式xpath expr ,第一个参数就是为了上传一个xml文档,第二个参数就是用xpath路径法查找路径,而extractvalue报错注入就是通过再函数中写如不符合语法格式的xpath达到报错的目的,并且通过拼接sql注入语句从而通过报错查询并显示我们想要查询的内容;
(6)联合查询注入
会报错、使用union一次查询多个select语句
(7)堆查询注入
同时执行多条语句的注入
SQL注入漏洞形成原因?
(1)动态字符串构建引起
- 不正确的处理转义字符(宽字节注入)
- 不正确的处理错误(报错泄露信息)
- 不正确的处理联合查询
- 不正确的处理多次提交(二次注入)
(2)后台无过滤
- 后台没有过滤或编码用户数据
- 数据库可以拼接用户传递的恶意代码
(3)错误处理不当
- 详细的错误消息返回给了用户
- 错误信息会给攻击者提供下一步帮助
(4)不安全的数据库配置
- 在连接文件中使用root用户和密码
边栏推荐
猜你喜欢
随机推荐
CSDN21天学习挑战赛之折半查找
大厂社招:Android 高级工程师的面试题,你知道多少?
C语言篇,操作符之 移位运算符(>>、<<)详解
Microsoft: Into Focus with Scott Guthrie Scott Hanselman Rajesh Jha and Kevin Scott | KEY11
安科瑞为工业能效行动计划提供EMS解决方案-Susie 周
性能不够,机器来凑;jvm调优实战操作详解
【C语言】初识指针
ROS Experiment Notes - Validation of UZH-FPV Dataset
promise详解
Talk预告 | 中国科学技术大学和微软亚洲研究院联合培养博士生冷燚冲:语音识别的快速纠错模型FastCorrect
怼不过产品经理?因为你不懂DDD领域建模与架构设计
缓存知识总结
【ORACLE】什么时候ROWNUM等于0和ROWNUM小于0,两个条件不等价?
三栏布局实现
Kubernetes 维护技术分享
鲜花线上销售管理系统的设计与实现
Excel English automatic translation into Chinese tutorial
HGAME 2022 Week2 writeup
22年全国程序员1月薪资出炉,才知道年薪 40 万以上的有这么多?
C194铜合金C19400铁铜合金