前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL注入学习总结

SQL注入学习总结

作者头像
光明SAMA
发布2020-03-06 09:19:08
8630
发布2020-03-06 09:19:08
举报

最近系统性的重新学习了一下SQL注入,做个总结让印象更加深刻。

一,什么是SQL注入

个人总结为:通过WEB系统中提供的数据输入入口,利用构造特殊字符串将原SQL语句拼接成实现其他功能的SQL语句,从而实现对原不可见的数据进行操作的目的。

二,SQL注入能做什么

1,在数据库中查询WEB系统本不允许查询的内容

2,在权限允许之外,对数据库内容进行增,删,改,查等

3,通过调用系统函数实现对目标主机的控制和操纵

4,向目标主机写入文件或读取目标主机的特定文件内容

三,SQL注入实现方法

基本思路包括:“管中窥豹”,“断章取义”,“移花接木”,“抛砖引玉”,“无中生有”。

管中窥豹

“窥一斑而知全豹”,通过WEB页面功能,结合输入特殊字符从而猜测出后台SQL语句的内容。

上图中,通过在id=1后面加一个引号,引起报错,从而猜测出SQL语句大概为SELECT * FROM table WHERE id='' LIMIT 0,1。

断章取义

将原本的SQL语句通过单引号,双引号,括号,注释符和制表符等特殊符号进行分割,从而改变原来的意义。

上图中的SQL语句,id为输入参数,可以在输入字符串中填入“ 1’ --+ ”,通过输入的引号将原来的引号闭合,加上--+将后面内容注释掉,成功修改了原语句。

移花接木

通过在SQL语句中接上其他内容,从而实现特定目的。如在上面例子,将输入内容改为“ ?id=-1' union select 1,database(),user() --+ ”,在页面回显的内容里可以知当前数据库名和用户名。

抛砖引玉

在页面无法将所查询内容返回,只返回数据库查询语句错误时,可以通过故意构造错误语法,将想得到的内容通过报错信息返回。下图的例子中,不论id的值是多少,返回的内容都一样,可见显示内容不是来自于查询结果,所以不能直接将构造好的语句查询结果返回。

但当SQL语句出现错误时会有报错。

通过使用Extractvalue()函数,故意引起报错来返回想要的结果。将输入内容改为“ ?id=1' union select 1,2,(extractvalue('s',concat('~',database()))) --+ ”得到了当前数据库名。

无中生有

对于既不返回数据,又不返回错误的WEB,可以通过其反回的成功以及失败的结果判断查询内容是否存在。这种方法业内叫做“盲注”

盲注大体上分为布朗型盲注和时间盲注。

布朗型盲注的特点是WEB页面有返回值,但只返回成功或失败。比如网站登录页面,只会返回登录成功或登录失败。

如下图中的例子,当id值存时,页面显示一个固定的字符串。当id值不存在或语法错误时,什么内容都不显示,这种情况就适合盲注。

时间盲注的特点是页面无返回,但可以在语句中拼接出sleep()函数,假设语句查询有结果则执行sleep,而查询无结果则不执行sleep,根据页面相应时间的不同可以将没有返回值的页面变成布朗型。

盲注只能返回语句执行结果,那么怎么获得数据库中的内容呢?

盲注需要依赖合理的猜测和穷举,例如,我们可以肯定数据库中的内容是字符串,那么由于ASCII码是有范围的,所以可以通过穷举法爆破出内容。但如果对数据库的内容毫无头绪,就没有办法确定爆破所用字典的内容,也就无法成功获得想要的信息了。

盲注的最大意义在于#漏洞存在的更加隐蔽#很容易存在于现有的系统中,如果同时环境中存在着其他不当的配置(如数据库用户权限过大,目录存在写权限等),利用盲注的漏洞将很容易拿到服务器的shell。

总结

学习SQL注入不要被网上的各种分类搞晕,不能只关注方法,学习大神们思路才是真谛,漏洞找不找得到,全看脑洞够不够大。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 吾生也有涯IT也无涯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档