SQL注入之注入点的寻找

注入点的判断

判断一个链接是否存在注入漏洞,可以通过对其传入的参数(但不仅仅只限于参数,还有cookie注入,HTTP头注入等) 进行构造,然后对服务器返回的内容进行判断来查看是否存在注入点。

注入点的种类

1.按注入点参数的类型分类

(1)数字型注入

例如id=1这种类型,向数据库传入的是数字,参数不需要被引号括起来。

(2)字符型注入

例如name=admin这种类型,像数据库传入的是字符串,参数需要被引号括起来。

2.按照数据请求方式来分类

(1)GET注入

HTTP请求方式为get,注入点一般在get传入的参数部分,例如?id=1,id便是一个注入点。

(2)POST注入

HTTP请求方式为post,注入点一般为提交的HTML表单, 即post传入的数据内容。

(3)HTTP头注入

HTTP的请求头存在注入点,例如XFF头,cookie,Host这些都是常见的注入点。

3.按照语句的执行效果来分类

(1)报错注入

页面会返回错误信息,或者将语句的查询结果直接返回到页面(这是最常见的一种注入,一般手注就可搞定)

(2)基于布尔的盲注

盲注的意思就是你无法直接通过页面的返回内容来获取信息,页面只会返回真假,你需要对一个个字符进行测试,相对于报错注入,盲注的工作量比较庞大,一般写脚本或者用工具跑。

(3)基于时间的盲注

页面无法直接返回真假,需要构造条件语句查看时间延迟的语句是否成功执行(观察页面的返回时间的长短)来进行判断。

(4)联合查询注入

通过union来将多条语句的结果组合到一个结果中

(5)宽字节注入

宽字节注入是由编码不统一引起的,一般是在PHP+MySQL中出现

(6)堆查询注入

堆叠查询可以构造执行多条语句

(7)二次注入

将攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。

注入类型的判断

(1)数字型注入

判断步骤

1.首先在参数后加个单引号,URL:www.3333.com/text.php?id=1’ 对应的sql:select * from table where id=3’ 这时sql语句出错,程序无法正常从数据库中查询出数据,就会抛出异常;

2.在参数后加 and 1=1  www.33333.com/text.php?id=1 and 1=1 对应的sql:select * from table where id=3’ and 1=1 该语句前后都为真,语句执行正常,与原始页面无任何差异;

3.在参数后加 and 1=2  www.33333.com/text.php?id=1 and 1=2 对应的sql:select * from table where id=3’ and 1=2 该语句为假,所以无法返回结果,返回异常。

一般满足以上三点就可以认定该注入点的类型为数字型注入。

(2)字符型注入

判断步骤

1.加单引号:select * from table where name=’admin’’ 由于加单引号后变成三个单引号,则无法执行,程序会报错;

2.加 ’and 1=1 此时sql 语句为:select * from table where name=’admin’ and 1=1’ ,也无法进行注入,还需要通过注释符号将其绕过;(MySQL常用的注释符号有#   -- (后面还有个空格) /* */)

构造语句为:select * from table where name =’admin’ and 1=1#’ 可成功执行返回结果正确;

3.加and 1=2— 此时sql语句为:select * from table where name=’admin’ and 1=2 –’则会报错。

如果满足以上三点的话,基本可以认定为字符型注入。

原文地址:https://www.cnblogs.com/lzlzzzzzz/p/11794713.html

时间: 2024-10-11 21:55:00

SQL注入之注入点的寻找的相关文章

Spring属性注入、构造方法注入、工厂注入以及注入参数(转)

Spring 是一个开源框架. Spring 为简化企业级应用开发而生(对比EJB2.0来说). 使用 Spring 可以使简单的 JavaBean 实现以前只有 EJB 才能实现的功能.Spring 是一个 IOC(DI) 和 AOP 容器框架. 具体描述 Spring:轻量级:Spring 是非侵入性的 - 基于 Spring 开发的应用中的对象可以不依赖于 Spring 的 API控制反转(依赖注入) (IOC----inverse of control .DI --- dependenc

常见注入手法第四讲,SetWindowsHookEx全局钩子注入.以及注入QQ32位实战.

常见注入手法第四讲,SetWindowsHookEx全局钩子注入.以及注入QQ32位实战. PS:上面是操作.最后是原理 一丶需要了解的API 使用全局钩子注入.我们需要了解几个WindowsAPI. 不需要太多. 1. 设置钩子API HHOOK WINAPI SetWindowsHookEx( _In_ int idHook, 设置钩子的类型.意思就是我要设置的钩子是什么钩子. 可以是监视窗口过程.可以是监视消息队列. _In_ HOOKPROC lpfn, 根据钩子类型.设置不同的回调函数

SpringFramework|@Qualifier 设值注入&构造注入

@Qualifier 设值注入&构造注入 前述 Java: 1.8 Maven: 3 SpringFramework版本以及各组件成员: 5.1.1.RELEASE spring-context spring-core spring-beans 可能会有这样一种情况,当你创建多个具有相同类型的 bean 时,并且想要用一个属性只为它们其中的一个进行装配,在这种情况下,你可以使用 @Qualifier 注释和 @Autowired 注释通过指定哪一个真正的 bean 将会被装配来消除混乱. 示例(

ASP.NET Core依赖注入——依赖注入最佳实践

在这篇文章中,我们将深入研究.NET Core和ASP.NET Core MVC中的依赖注入,将介绍几乎所有可能的选项,依赖注入是ASP.Net Core的核心,我将分享在ASP.Net Core应用中使用依赖注入的一些经验和建议,并且将会讨论这些原则背后的动机是什么: (1)有效地设计服务及其依赖关系. (2)防止多线程问题. (3)防止内存泄漏. (4)防止潜在的错误. 在讨论该话题之前,了解什么是服务是生命周期至关重要,当组件通过依赖注入请求另一个组件时,它接收的实例是否对该组件实例是唯一

别人的渗透测试(三)--SQL显错注入

续上一章. 安全狗拦下7成的人,过狗是门学问,偷笑.jpg.很感谢和https://home.cnblogs.com/u/xishaonian/ 博主能一起研究过狗. 说多了,言归正传SQL注入大显错.只适用MYSQL,其它数据库没学呢... 1.count,rand,floor 2.updatexml()[最大长度限制32位] 3.extractvalue()[最大长度限制32位] 4.geometrycollection() 5.multipoint() 6.polygon() 7.mult

sql回显注入-笔记

拼接sql命令查询数据 注释 常用于sql注入 # 井号 单行注释 注意:URL编码 %23 -- 两个减号加空格 单行注释 /*  */    注释一个区域 注意!在sql注入遇到单引号被转译的情况可以使用 HEX编码 绕过单引号的使用 注入测试poc 1 or 1=1 1' or '1=1 1" or "1=1 sql注入用法 查看表单字段数(列数) 使用二分法   order by 列数   排序 确定回显点 XXX' union select 1,2; http://192.1

【分享】SQL中的注入漏洞

例:假设一个账户密码的输入在数据库中是这样进行判断的. SELECT (FPASSWORD = '123456' ) AS PWDCORRECT FROM T_USER WHERE FUSER= 'GUEST' 如果输入: SELECT (FPASSWORD='1' OR '1'='1') AS PWDCORRECT FROM T_USER WHERE FUSER='ABC' 因为 ‘1’=‘1’ 永远返回的是true 所以 这就造成了SQL 的注入漏洞. 解决办法: ①:过滤敏感字符 if(u

SQL防漏洞注入攻击小结

3///   4/// 判断字符串中是否有SQL攻击代码  5///   6/// 传入用户提交数据  7/// true-安全:false-有注入攻击现有:  8public bool ProcessSqlStr(string inputString)  9{ 10    string SqlStr = @"and|or|exec|execute|insert|select|delete|update|alter|create|drop|count|\*|chr|char|asc|mid|su

SQL报错注入结合sqli lab和百度杯CTF VId

0x00 背景 学习记录一下报错型的注入,经各方整理和自己总结形成. 所有的注入原理都是一样,即用户输入被拼接执行.但后台数据库执行语句产生错误并回显到页面时即可能存在报错注入. 0x01概念 报错型注入的利用大概有以下3种方式: 1:?id=2' and (select 1 from (select count(*),concat( floor(rand(0)*2),(select (select (查询语句)) from information_schema.tables limit 0,1