狠狠撸
Submit Search
笔测迟丑辞苍安全编码
?
1 like
?
291 views
L
Leo Zhou
Follow
Pycon China 2015
Read less
Read more
1 of 31
Download now
Downloaded 12 times
More Related Content
笔测迟丑辞苍安全编码
1.
笔测迟丑辞苍安全编码&?自动审计 xxlegend
2.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! 对于我 ?? 廖新喜 ?? 绿盟科技安全研究员 ?? 专注于web安全,代码审计,安全产物的开发 ?? ??网名:xxlegend
3.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic!
4.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic!
5.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! ?? 常?见安全漏洞 (1)sql注?入 (2)命令注?入 (3)代码注?入 (4)XSS (5)CSRF (6)路径穿越 (7)?文件上传 (8)XXE (9)SSRF (10)不安全封装 ?? ?自动化审计 ??目录
6.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! Sql注?入 原因:直接拼接数据字段操作数据库 常?见注?入接?口: (1)django的raw()?方法,execute()?方法,extra()?方法where处 (2)直接调?用psycopg2或其他底层接?口 错误?示例:
7.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! 对策 (1)参数验证,如限定?用户名(a-zA-Z_0-9) (2)django的model API,如QuerySet (3)参数化查询
8.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! 命令注?入 ?? 命令注?入通常是因为调?用shell来实现?一些功能导致 ?? 常?见的易导致命令的接?口: os.system os.popen os.spaw* os.exec* os.open os.popen* commands.call, commands.getoutput, Popen* ?? ?示例:
9.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! 对策 ?? 封装命令执?行API,过滤所有shell元字符 ?? 使?用subprocess模块,同时确保shell为False,默认情况 是False
10.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! XSS ?? 原因:未对输?入输出做过滤或者框架中的?一些例外 ?? django常?见例外情形: (1)属性有动态内容,如<img alt={{foo}}> (2)使?用了mark_safe,autoescape (3)Dom类型xss (4)HttpResponse返回动态内容 ?? 错误?示例:
11.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! 对策 ?? 属性内容中加上双引号,如<img alt=“{{foo}}”> ?? 确保mark_safe,autoescape的内容是安全的 ?? HttpResponse不返回动态内容
12.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! CSRF ?? 在django中默认加?入了CSRF中间件 django.middleware.csrf.CsrfViewMiddleware ?? 在post表单中添加csrf_token,<form action="." method="post">{% csrf_token %} ?? 在相应的view函数中,引?入csrf或者加上csrf_protect装饰 器
13.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! 代码注?入 ?? 原因:eval和pickle.loads等接?口未过滤参数造成的 ?? 错误?示例: ?? 利?用:
14.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! 代码注?入 pickle.loads利?用代码:
15.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! 对策 ?? 严格验证参数,?非法字符直接返回 ?? 使?用ast.literal_eval() ?? 推荐使?用json格式
16.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! 路径穿越 ?? 原因:路径参数可控导致任意?文件下载,删除,写?入,覆 盖 ?? 错误?示例:
17.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! 对策 ?? 严格验证参数范围,?非法字符直接返回 ?? 过滤..和.字符 ?? ?示例:django.views.static?示范代码
18.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! 任意?文件上传 (1)只在js端判断,未在后端验证 (2)未限定后缀,或者后缀?黑名单,导致恶意?文件上传 (3)未给?文件重命名,导致上传?文件名可猜测 (4)未限定?大?小,导致dos
19.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! XXE ?? XXE:XML外部实体攻击(XML External Entity),通过xml 外部实体获取服务器中的数据 ?? 原因:libxml2.9以下默认导?入外部实体,lxml中默认采?用 XMLParser 注意两个关键参数,resolve_entities=True会导致解 析外部实体,no_network=True则限制不能将数据导 出到外部,会导致?一些ssrf问题。 ?? Xml.dom.minidom,xml.etree.ElementTree不受影响
20.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! XXE 错误?示例:
21.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! 对策 ?? 升级libxml为2.9或者以上 ?? 使?用XMLParser的过程中设置resolve_entities=False
22.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! SSRF ?? SSRF(Server-Side Request Forgery:服务器端请求伪造), 是由攻击者从服务端发起请求的漏洞 ?? 成因:服务端提供了从其他服务器应?用获取数据的功能 且没有对??目标地址做过滤与限制 ?? ?示例:
23.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! 对策 ?? 严格限定请求的协议,仅仅允许http和https ?? 过滤返回信息,验证远程服务器对请求的响应 ?? 限制请求的端?口为http常?用端?口
24.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! 不安全的封装 ?? eval封装不彻底,仅将__builtings__置为 空 ?? 原理:
25.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! 对策 尽量使?用owasp推荐的api接?口 封装全?面,过滤严格
26.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! ?自动审计 ?? 语法树:利?用python的静态分析模块ast ?? 基本原理:危险函数+可控参数 ?? 过程: (1)递归遍历语法树,分析每个函数执?行的语句,得到可控参数列表 (2)判断执?行的语句是否有危险函数 (3)如果有危险函数,分析其参数是否在可控列表之中 (4)符合这两个条件则认为是新的危险函数
27.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! ?自动审计 如何得到可控参数?
28.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! 演化过程 ?? 从ast到pysonar2 ?? 处理类及__init__函数 ?? 处理import语句 ?? 处理安全函数 ?? 判断语句中含危险函数 ?? 增加对os.remove类似识别不仅仅是 remove
29.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! 踩过的坑 ?? 从ast到pysonar2 ?? 对python语法结构了解不全,导致分析语 法树考虑不周 ?? 递归处理参数查找
30.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic! Q&A shengqi158@163.com https://github.com/shengqi158/pyvulhunter
31.
北京/上海/??广州 0xFF Life's
pathetic, go Pythonic!
Download