笔记(第五天)

一、SQl注入漏洞

1.漏洞原理


web页面源代码对用户提交的参数没有做出任何过滤限制,直接扔到SQL语句中去执行,导致特殊字符改变了SQL语句原来的功能和逻辑。黑客利用此漏洞执行恶意的SQL语句,如查询数据、下载数据,写webshell、执行系统命令以此来绕过登录权限限制等

2.漏洞产生的威胁

1.猜解后台数据库数据,盗取数据库中存储的敏感信息

2.绕过验证,绕过验证登录网站后台

3.注入可以借助数据库存储过程进行提权等操作

3.漏洞分类

3.1根据输入的 「参数」类型

「数值型」注入:前台页面输入的参数是「数字」

「字符型」注入:前台页面输入的参数是「字符串」

3.2根据数据的「提交方式」分类

GET注入:使用get请求提交数据,比如 xxx.php?id=1.
POST注入:使用post请求提交数据,比如表单。
Cookie注入:使用Cookie的某个字段提交数据,比如在Cookie中保存用户信息。
HTTP Header注入:使用请求头提交数据,比如检测HTTP中的源地址、主机IP等。

3.3根据页面「是否回显」分类

显注:前端页面可以回显用户信息,比如 联合注入、报错注入。

盲注:前端页面不能回显用户信息,比如 布尔盲注、时间盲注。

4.SQL注入常用函数及含义

4.1 substr()函数

substr()函数,意为substr(string,start,length) 对于给定的字符串string,从start位开始截取,截取length的长度。

4.2 ascii()函数

ascii()就是返回字符的ascii码

4.3 exp()数字函数

用于计算e的x次方的函数。e为底数,x为指数。

4.4 extractvalue()函数

extractvalue()函数,extractvalue(XML_document, XPath_string),XML_document是String格式,为XML文档对象的名称;
XPath_string(Xpath格式的字符串),注入时可操作的地方。

5.SQL注入防御手段

1.使用预编译语句(Prepared Statements)和参数化查询:这是预防SQL注入的最有效方法之一,通过这种方式,可以确保SQL语句的结构在编译时就确定下来,之后传入的参数不会改变语句的结构,因此可以避免注入攻击。

2.使用存储过程:存储过程也可以像预编译语句一样防止SQL注入,因为它们同样使用参数化查询。

3.使用ORM(对象关系映射)工具:许多现代编程框架提供了ORM工具,它们可以自动进行参数化查询,从而降低直接编写SQL语句的风险。

4.验证用户输入:对所有用户输入进行验证,拒绝不符合预期格式的输入,可以减少注入攻击的风险。

5.使用适当的错误处理机制:不要在错误信息中透露敏感信息,以免给攻击者提供攻击线索。

6.限制数据库权限:为应用程序使用的数据库账户只赋予必要的权限,避免使用具有高级权限的账户,这样即使发生注入攻击,攻击者能做的也非常有限。

7.定期更新和打补丁:保持数据库管理系统(DBMS)更新到最新,修补已知的安全漏洞。

8.使用Web应用防火墙(WAF):WAF可以帮助识别和阻挡SQL注入攻击。

9.定期进行安全审计和代码审查:检查潜在的安全漏洞,及时修复。

10.使用参数化查询:无论何时,只要可能都应该使用参数化查询,而不是拼接SQL字符串。

6.SQL注入常用绕过waf的方法

1.变换大小写

2.编码

3.利用注释符

4.重写

5.比较操作符替换

6.同功能函数替换

7.SQLi的手工注入的步骤

1.判断是否存在注入点

可能的地方:
登录 注册 留⾔ 验证⽤户身份所属 查询某⽇xx信息 订单操作

2. 判断字段数量

在注⼊点后⾯添加语句【 order by int】,int的值可以是任意数字,但是⼀个数据表的字段数量通常不超过10,若传的int值⼩于等于字段数量则正常回显,若⼤于字段数量,则⽆法正常回显

3.判断字段前端回显位置

在链接后⾯添加语句【 union select 1,2,3,4,5,6,7,8,9,10,#】进⾏联合查询来暴露可查询的字段号,看哪些字段是可以返回给我们前端进⾏渲染的,不进⾏返回的字段我们⽆法利⽤

4.判断数据库信息

5.查找数据库名

6.查找数据库表名

union select group_concat(table_name) from information_schema.tables where
table_schema=database()--+

7.查找列名

-1' union select 1,(select group_concat(column_name) from information_schem
a.columns where table_name='biaoming'),3,4#

8.查数据

-1' union select 1,(select columnsname from tablename),3,4#

8.攻击靶场

第一关:

先加入参数id

加单引号判断闭合,发现为字符型注入

 使用order by 判断数据库有几列:3列回显正常,4列出现报错,说明只有3列。

使用联合查询union select 判断回显位置

发现2,3的回显,判断数据库名称

查询到库名后查询库下所有表

判断users表中下的字段名称

查询字段中的数据

第二关:

加入参数id,加入单引号判断闭合错误,数字型注入

则为数字型注入

使用order by 判断数据库有几列

使用联合查询union select 判断回显位置

判断数据库名称

user表

数据

第三关:

加入参数,判断属于那种类型

通过报错信息可以发现是以单引号和括号进行闭合的

order by 判断数据库有几列

所以说三列,继续判断回显位置,找数据库,找表,找数据

第四关:

先加入参数并判断属于那种类型

判断长度,回显位置

注入攻击

第五关:

加入参数判断类型

爆库名

爆表名

发现只有1列 加入参数

爆列名

爆数据

9.使用sqlmap验证第一关

安装成功

判断是否注入点

存在注入

获取数据库

获取数据库中的表名

获取字段名

获取字段内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值