• 学习笔记-.net安全


    0x00 简介

    本章内容:

    1.xss

    2.csrf

    3.文件上传

    0x01 XSS

    在asp.net中我们插入XSS代码经常会遇到一个错误A potentially dangerous Request.Form

    这是因为在aspx文件头一般会定义一句<%@ Page validateRequest="true" %> ,当然也可以在web.config中定义,值得注意的是validateRequest的值默认为true ,所以通常情况下asp.net基本上是不存在XSS的,除非程序员把他的值改变,如同这套源码的web.config

    1. <pages validateRequest="false" controlRenderingCompatibilityVersion="3.5" enableEventValidation="false">
    2. <controls>
    3. <add tagPrefix="pg" namespace="SiteUtils" assembly="DNHelper" />
    4. <add tagPrefix="pop" namespace="EeekSoft.Web" assembly="EeekSoft.Web.PopupWin" />
    5. <add tagPrefix="dnc" namespace="Dotnetcms.Controls" assembly="DNHelper" />
    6. <add tagPrefix="DayPilot" namespace="DayPilot.Web.Ui" assembly="DotnetControl" />
    7. </controls>
    8. </pages>

    简单的分析

    CK_New.aspx

    $.post("ajax/Out_Store_Handler.aspx" 确认提交,通过ajax传送到Out_Store_Handler.aspx

    Out_Store_Handler.aspx

    整个过程是把传入过来的数据进行替换、插入数据库并没有经行任何过滤。

    来到输入页面Purchase_AuditingList.aspx

    从上往下看 查询->输出也没有过滤,所以造成了XSS

    0x01 CSRF

    点击add_Click获取表单值后直接,传入UsersHelper.AddUser 函数最后由UsersHelper.AddUser函数插入数据库,整个过程没有验证CSRF。

    0x02 文件上传

    这套程序是最新版本所以任意文件不存在,只做粗略分析

    _uploadpic.ashx

    1. private void SaveFile()
    2. {
    3. string text = "../uploads/" + DateTime.Now.ToString("yyyy-MM") + "/";
    4. string text2 = HttpContext.Current.Server.MapPath(text);
    5. if (!Directory.Exists(text2))
    6. {
    7. Directory.CreateDirectory(text2);
    8. }
    9. HttpFileCollection files = HttpContext.Current.Request.Files;
    10. string fileName = Path.GetFileName(files[0].FileName);
    11. string extension = Path.GetExtension(files[0].FileName);
    12. string text3 = Helper.ReadConfigValue(Helper.ReadConfigXml("~/app_data/allow_ext.xml"), "allow_ext").ToString().ToLower();
    13. if (text3.Contains(extension.ToLower()))
    14. {
    15. string str = Guid.NewGuid().ToString() + extension;
    16. string filename = text2 + str;
    17. files[0].SaveAs(filename);
    18. string s = string.Concat(new string[]
    19. {
    20. "{\"jsonrpc\" : \"2.0\", \"result\" :\"",
    21. HttpContext.Current.Server.HtmlEncode(fileName),
    22. "\", \"id\" : \"",
    23. HttpContext.Current.Server.HtmlEncode(text + str),
    24. "\"}"
    25. });
    26. HttpContext.Current.Response.Write(s);
    27. }
    28. }

    文件名由uploads + DateTime.Now.ToString("yyyy-MM") + Guid.NewGuid().ToString() + extension (../uploads/2019-10/30777b5a-bd82-48eb-9104-24afffd97243.png) 所以能控制的只有extension,他由Path.GetExtension 直接获取文件后缀,但是ReadConfigXml读取~/app_data/allow_ext.xml的文件做比较,比较典型的白名单所以这里不存在任意文件上传。

    allow_ext.xml

    1. <?xml version="1.0" standalone="yes"?>
    2. <PItems>
    3. <PItem Name="allow_ext" Value=".rar.zip.jpg.png.gif.doc.docx.xls.xlsx.ppt.pptx.jpeg.pdf" />
    4. </PItems>

    0x03 文末

    其他以后遇到慢慢补充

    点击关注,共同学习!安全狗的自我修养

    github haidragon

    https://github.com/haidragon

  • 相关阅读:
    【虚幻引擎UE】UE5 材质动态修改的2种方法(含工程源码)
    2022年连锁酒店行业研究报告
    论文阅读NAM:Normalization-based Attention Module
    SD中的VAE,你不能不懂
    快手资讯 | 快手前CEO宿华业务助理彭佳瞳、商业算法策略负责人李勇保被曝离职
    SpringCloud Alibaba-Nacos
    算法训练营64-图论-深度优先优先搜索(dfs)-广度优先搜索(bfs)
    Selenium 是什么?简单了解Selenium
    02 - 分析一个Android程序以及日志工具的使用
    Docker快速入门【极速浏览版】
  • 原文地址:https://blog.csdn.net/sinat_35360663/article/details/127729208