常见漏洞
命令注入
切记不要用黑名单,因为你很难过滤完全,而且容易跟业务产生冲突。
python(linux防护措施)
欢迎来绕过:
import os
directory = "'/;touch /tmp/asdf"
directory = "'{}'".format(directory.replace("'", "'\\''"))
cmd = "ls {}".format(directory)
status = os.system(cmd)
golang
package main
import (
"fmt"
"os"
"gopkg.in/alessio/shellescape.v1"
)
func main() {
fmt.Printf("ls -l %s\n", shellescape.Quote(os.Args[1]))
}
https://github.com/alessio/shellescape/blob/master/shellescape.go
package shellescape
import (
"regexp"
"strings"
"unicode"
)
var pattern *regexp.Regexp
...
func Quote(s string) string {
if len(s) == 0 {
return "''"
}
if pattern.MatchString(s) {
return "'" + strings.ReplaceAll(s, "'", "'\"'\"'") + "'"
}
return s
}
...
php
PHP对于命令注入漏洞提供了escapeshellarg()和escapeshellcmd()两个函数来进行防御,当然两者针对的场景有区别。
escapeshellarg
主要是为了防止用户的输入逃逸出“参数值”的位置,变成一个“参数选项”。 处理过程:如果输入内容不包含单引号,则直接对输入的字符串添加一对单引号括起来;如果输入内容包含单引号,则先对该单引号进行转义,再对剩余部分字符串添加相应对数的单引号括起来。 场景功能:
1.确保用户只传递一个参数给命令 2.用户不能指定更多的参数一个 3.用户不能执行不同的命令
https://www.w3cschool.cn/doc_php/php-function-escapeshellarg.html
<?php
system('ls '.escapeshellarg($dir));
?>
escapeshellcmd
主要是防止用户利用shell的一些技巧(如分号、管道符、反引号等)来进行命令注入攻击。
处理过程:如果输入内容中
&#;`|*?~<>^()[]{}$\, \x0A 和 \xFF
等特殊字符会被反斜杠给转义掉;如果单引号和双引号不是成对出现时,会被转义掉。
其实此处我是有一个小疑问的,为什么感叹号! 不在里面,他也会造成命令注入的。
场景功能:
1.确保用户只执行一个命令 2.用户可以指定不限数量的参数 3.用户不能执行不同的命令
<?php
$command = './configure '.$_POST['configure_options'];
$escaped_command = escapeshellcmd($command);
system($escaped_command);
?>
禁止同时这样使用: escapeshellcmd(“xxxx”.escapeshellarg($arg).“xxxx”));
因为这样会被绕过。
<?php
$arg = "sth' -l ";
'\'' -l ' /tmp
system(escapeshellcmd("ls --ignore=".escapeshellarg($arg).' /tmp'));
?>
C&CPP
待补充
XSS
-
前端统一实体编码(不渲染)。(有木有前端大佬出来解释下,这个防xss,统一实体编码,不能搞个库,或者搞到框架里面么,不要让编码人员自己去保证?) -
后端过滤
- 尽量根据业务使用白名单
- 如果,非要使用黑名单,建议过滤
<>()"' ,(左右尖括号,左右圆括号,单双引号)
绕过样例:https://blog.csdn.net/Fly_hps/article/details/82944715
SQL注入
使用ORM
记住一句话,只要使用sql语句拼接,就会产生sql注入;除非你对不可靠输入做了完全正确的校验。
mongodb注入
绑定字段
如果你非得拼接,请对不可靠输入做白名单正则校验。
XXE
ini文件
过滤不可靠输入的\r\n 。
SSRF
敏感信息泄露
- 随意返回数据给前端
- 任意文件下载(可能是放置错误文件到web目录了,也能是目录穿越导致,也可能是nginx配置错误导致)
csrf( Cross Site Request Forgery:跨站请求伪造)
csrftoken
- cookie中带有一个csrftoken,header中可以设置一个csrftoken,后台校验时直接对比这两个值是否一致即可。
路径穿越
解释:不可靠输入作为文件路径(或者文件路径的一部分),然后业务逻辑中对此文件(或目录)进行对应操作。
同时满足以下两个条件:
- 限制不可靠输入的根路径(必须已某某目录开头)
- 目录中不可以包含
../ ,注意不要被这种字符串绕过\.\./ 、..\/
缓冲区溢出(也包含整数溢出)
任意url跳转
反序列化漏洞
逻辑漏洞
越权操作
未授权访问
通用防护框架
json-schema
2021-OWASP
失效的访问控制
加密机制失效
注入
- XSS
- SQL注入
- 路径穿越
- 命令注入
不安全的设计
安全配置错误
自带缺陷和过时的组件
身份识别和身份验证错误(无效的身份认证)
软件和数据完整性故障
安全日志和监控故障
服务端请求伪造(SSRF)
参考页面
http://blog.nsfocus.net/web-vulnerability-analysis-coding-security/ http://www.owasp.org.cn/OWASP-CHINA/owasp-project/OWASP-TOP10-2021%E4%B8%AD%E6%96%87%E7%89%88V1.0%E5%8F%91%E5%B8%83.pdf
|