资源描述:
《基于python的自动化代码审计》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、基于Python的自动化代码审计逢魔安全实验室-xfkxfk自我介绍~$iduid=0(xfkxfk@formsec)gid=0(web安全研究员,工控安全研究员)groups=0(FormSec)内容简介常规漏洞静态分析动态分析自动化应用Python常规漏洞常规漏洞defgetuser(request):username=request.POST.get('username')query='select*fromuserswhereusername=%s'%usernameSQL注入connection=psycopg2.connect
2、(dbname,user,host,password)curs=connection.cursor()curs.execute(query)res=curs.fetchall()connection.clouse()returnres常规漏洞defgetuser(request):username=request.POST.get('username')query='select*fromuserswhereusername=%s'注入防御connection=psycopg2.connect(dbname,user,host,passw
3、ord)curs=connection.cursor()curs.execute(query,[username])res=curs.fetchall()connection.clouse()returnres常规漏洞defstore_uploaded_file(request):uploaded_file=request.POST.get('filename')upload_dir_path="static/uploads“命令执行ifnotos.path.exists(upload_dir_path):os.makedirs(uplo
4、ad_dir_path)cmd="mv"+uploaded_file+""+"%s"%upload_dir_pathos.system(cmd)return'static/uploads/%s'%uploaded_file常规漏洞defstore_uploaded_file(request):uploaded_file=request.POST.get('filename')upload_dir_path="static/uploads"执行防御ifnotos.path.exists(upload_dir_path):os.makedir
5、s(upload_dir_path)cmd="mv"+uploaded_file+""+"%s"%upload_dir_pathsubprocess.Popen(cmd,shell=False)return'static/uploads/%s'%uploaded_file其他漏洞……XSSXXECSRFSSRFSSTI代码注入目录穿越越权操作其他…静态分析备注静态分析fromtaskMnager.formsimportPorjectFileFormdefgetproj(request,project_id):requestifreques
6、t.mothod=“POST”:username=request.POST.get(„name‟,False)curs=connection.cursor()usernamesql=“select*fromprowherename=„%s‟”%usernamecurs.execute(sql)else:form=ProjectFileForm()executereturnrender(request,„index.html‟,{„form‟:form})备注静态分析可控数据(参数)通过系统处理最后进入危险函数可控参数列表危险函数列表静态分
7、析查找可控参数新的变量=初始参数经过一系列处理后新变量可控直接赋值属性赋值字符串拼接函数处理分片取值列表解析式字符串操作函数未过滤函数备注静态分析将py文件通过ast解析为tree并递归解析导入模块{‘body’:[{},{},{},…],‘filename’:‘/django.nV/taskManager/views.py’,‘type’:‘Module’}静态分析获取body中的函数体内容fromtaskMnager.formsimportPorjectFileForm{Body[0]‘_fields’:[],defgetproj(r
8、equest,project_id):‘args’:{request,project_id},ifrequest.mothod=“POST”:‘body’:[{},{}],name=reque