Python系统审计
运维安全
端口开放
1、自定义端口
2、通用端口
弱口令
1、数据库弱口令
2、redis&memcache
3、共享中间件
4、Nsf0cus!@#
debug开关
1、`\
2、django settings.py Debug=True
svn或git信息泄露
涉密存储传输
1、用base64加密码密码
2、私钥存储,权限
代码角度
XSS
1、属性动态内容
2、mark_safe,autoescape
3、dom类型
4、httpresponse返回动态内容
CSRF
1、CSRF中间件
2、表单csrf_token
3、相应view函数
命令注入<1>
1、os系列命令
2、commands系统命令
3、subprocess,shell=True
路径穿越
1、未考虑../
2、任意文件下载
3、任意文件删除
4、任意文件写入
文件上传
1、前端js控制不起作用
2、文件后缀白名单
3、文件大小控制,防dos
4、上传文件改名,rand()
5、注意上传过程中的条件竞争攻击
sql注入<1>
1、django raw,execute,extra方法where处
2、psycopy2等底层库
xml注入 原理类似sql
ldap注入
1、利用闭合ldap查询语句
(&(user=admin*)(objectClass=*))(|(objectClass=void)(passwd=passwd))
The rusult:
In [70]:import ldap
In [71]:I
=ldap.initialize('ldap://10.0.0.0:389')
In [76]:
I.bind('LADP_ROOTDN','LDAP_ROOTPW')
In [77]:
I.search_s('LDAP_ROOTDN',ldap.SCOPE_SUBTREE,'(cn=356*)')
Out [77]:
[('cn=35602d93-a8ab-3ba1-991a-74cfde8cb333,cn=xxlegend,o=customer',....
2、防御:
ldap.filter.escape_filter_chars转义,)(,*,\x00五个字符
xxe
1、lxml
%xxe;]>
2、利用xml 实体注入
3、libxml 2.9以下
4、XMLParser默认resolve_entity=True
ssrf
1、风险接口
<1>pycurl
c=pycurl.Curl()
c.setopt(c.URL,'file:///etc/passwd')
<2>urllib2
<3>requests
<4>对@符号识别:requests和pycurl可识别,urllib2不识别。
2、限定协议http或https
3、限定端口
4、限定返回结果
代码注入
<1>eval
利用代码:如
eval("__import__('os').system('uname')")
错误封装
如builtings置为空,利用代码
建议ast.literal_eval()
<2>pickle
利用代码:如
class Run(object):
...: def__reduce(self):
...: return (os.system,('uname'))
pickle.loads(pickle.dumps(run()))
建议json
<3>yaml
利用代码:如
exp="""!!python/object/apply:os.system args:['uname -a']
yaml.load(exp)
<4>marshal
功能角度
授权
认证
弱口令
传输
<1>明文传输,证书
<2>get请求
<3>SSL
存储
<1>base64编码存储
<2>Subtopic
防暴力
<1>验证码
普通验证码(直接返回;验证码不正确不更新;验证错误后xhr请求更新)
短信验证码
<2>错误次数
密码找回