天道酬勤

asp.net webservice soap漏洞修复

前言

最近用户那边一直进行安全漏洞扫描,这边部署的一个老的mvc,webservice接口不幸中招,需要修复

这里记录下修复过程。

正文

漏洞详情:

1 asmx页面可以打开,接口定义全部泄露

2 接口调用可以正常调用,泄露系统线上数据

如下图:

 修复过程

正对asmx页面的显示,通过web.config 配置,去掉页面显示,接口不影响

<webServices>
            <protocols>
                <!-- 保留必须的协议,移除 Documentation -->
                <remove name="Documentation"/>
                <!-- 可选:移除测试协议 Post/HttpGet -->
                <remove name="HttpPost"/>
                <remove name="HttpGet"/>
                <!-- 保留 SOAP 协议以保证服务可用 -->
                <add name="HttpSoap"/>
            </protocols>
    </webServices>

  

这样配置完毕后,asmx页面不会显示,但接口正常,用postman测试如下:

 

asmx页面虽然隐藏,但接口还是可以随意调用,这里通过soap 的header,将账号密码配置到header中,然后接口验证信息

这里先定义 soapheader

public class MySoapHeader:SoapHeader
    {
        public int UserID;
        public string UserName;
    }

  然后asmx的后台方法获取header,再进行简单的认证

[WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 
    // [System.Web.Script.Services.ScriptService]
    public class HelloWorld : System.Web.Services.WebService
    {
        public MySoapHeader mySoapHeader;

        [WebMethod]
        [System.Web.Services.Protocols.SoapHeader("mySoapHeader")]
        public string HelloWorld1()
        {
            if (!Authenticate())
                throw new SoapException("身份验证失败",
                    SoapException.ClientFaultCode,
                    "");

            return "Hello World";
        }

        private bool Authenticate()
        {
            if (mySoapHeader == null 
                || string.IsNullOrWhiteSpace(mySoapHeader.UserName) )
                return false;

            if(mySoapHeader.UserName!="admin")
            {
                return false;
            }

            // 实际应用中应该验证令牌的有效性
            return true;
        }
    }

  最后就是 通过postman调用进行测试

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
 <soap:Header>
    <MySoapHeader xmlns="http://tempuri.org/">
      <UserID>111</UserID>
      <UserName>admin</UserName>
    </MySoapHeader>
    
  </soap:Header>
  <soap:Body>
    <HelloWorld1 xmlns="http://tempuri.org/" />
  </soap:Body>
</soap:Envelope>

  结尾

以上就是 soap漏洞的修复过程。

posted @ 2025-07-14 16:01  JulyLuo  阅读(115)  评论(0)    收藏  举报