DVWA靶机学习——总结

这个系列是学习DVWA靶机的,本篇是最后一篇,小小总结。后面开启新系列,将以前到现在安全方面的学习笔记搬上来。

Posted by K4ys0n on November 25, 2020

0x00 总结

这一章是对前面14个章节的小总结,对各种防御机制进行了一下归类梳理,分为以下几类:

  • 用户输入控制
  • 用户访问控制
  • 代码逻辑设计
  • 服务端配置
  • 客户端安全

经过这段时间学习,算是把DVWA这个靶机刷完了,接下来准备开启新的系列,把以前到现在学的Web和PWN二进制的一些知识和笔记整理分享出来。另外还有一个工具的使用系列也准备同步进行。继续加油吧!!!

0x01 用户输入控制

  • 使用黑名单过滤关键词,如SQL注入关键词select、union等,XSS关键词script、onerror等,命令执行关键词“|”、“\&”等,一些js、php敏感危险函数,最好都大小写全匹配。
  • 过滤用户输入,如addslashes转义、strip_tags剥离HTML标签、preg_replace黑名单匹配、htmlspecialchars转HTML实体等过滤用户输入,入库前、出库后最好都做处理,防止存储型XSS、反射型XSS等。
  • 使用mysqli_real_escape_string等函数转义用户输入,对\x00,\n,\r,\,’,”,\x1a等字符进行转义,防止SQL注入。
  • 采用更安全的PDO(PHP Data Object)机制、Sqlparameter等,预编译SQL语句,防止SQL注入。
  • 特殊的输入如输入访问ip地址的,就要利用正则完全匹配格式,严格控制输入,防止命令执行。
  • 校验类型,如果输入部分是整数类型等,可以用is_numeric等强制转换后检验,防止命令执行、SQL注入、XSS等。
  • 包含文件或上传文件的地方,白名单检查文件后缀、MIME,检查文件内容格式,按照文件内容格式重新生成文件,限制大小等,防止文件包含、文件上传漏洞等。
  • 上传的文件重命名,如利用时间、旧文件名等加盐哈希(md5、sha1、sha256等),防止绕过%00截断构成任意文件包含、任意文件上传等。
  • 不能白名单的就设置黑名单过滤(尽可能全)http:// 、..\、../等符号,防止文件上传、文件包含等。
  • 使用OWASP等安全的SQL处理API、XSS处理API。

0x02 用户访问控制

  • 使用CSRF token,防止CSRF攻击。

  • 设置延时和登录失败锁定等,防止弱口令爆破。如连续登录最多3次,3次后失败锁定15分钟。
  • 检查HTTP头,包括Referer、Cookie、X-Forwarded-For、client等,防止CSRF攻击或HTTP头SQL注入等。

0x03 代码逻辑设计

  • 用户设置的密码最好是唯一的,确保密码能匹配唯一一个用户,方便后续通过密码去查询用户。

  • 有些敏感操作需要用户输入密码,并且后台代码应该通过密码去查询出用户,以此判断是否为当前用户的操作,防止客户端传过来的用户名被篡改而导致CSRF。
  • 使用随机的Session ID,如时间戳、随机种子、加盐的字符串拼接作为输入,利用sha1等复杂的哈希算法生成Session ID,防止被Session ID被破解利用。
  • 限定cookie使用范围,包括有效期、能访问的域名或主机、能访问的网站路径,防止Session或Cookie被利用。
  • 设置Cookie打开secure、httponly属性,防止XSS攻击。
  • 利用CSP内容安全策略,限定外部资源的来源范围,能不给用户输入的就尽量不要给,特别是一些敏感数据操作时,尽量不要留有用户执行函数的机会,防止XSS攻击、命令执行等。
  • 修改密码时一定要设计让用户输入旧密码,验证旧密码,防止CSRF攻击。
  • 验证码尽量使用图形验证码等,并且图形验证码还需要带点混淆,防止图像识别破解,然后进行爆破攻击。
  • 后端验证逻辑尽量不要嵌套太多参数判断,以减少逻辑漏洞的可能性,防止绕过代码逻辑进行攻击。

0x04 服务端配置

  • 如果没有必要就关闭allow_url_fopen与allow_url_include,防止文件包含。

0x05 客户端安全

  • 客户端浏览器自身启动XSS Filter功能,防止XSS攻击。