SOAP注入

零基础学黑客,搜索公众号:白帽子左一

soap 注入简介

soap注入就是在webservice 的soap协议,连接web服务和客户端的接口处的注入,通过在发送的soap消息参数内添加注入语句来达到注入效果,常见的有sql注入,也有xml注入,代码注入

什么是soap

首先介绍webservice,webservice是一种跨平台,跨语言的规范,用于不同平台,不同语言间的交互,webservice有三要素,分别为soap,wsdl和uddl,uddl用于提供发布和查询webservice方法,wsdl是webservice服务描述语言,用于web服务说明,它是一个xml文档,用于说明一组soap消息如何访问接口,soap是简单对象访问协议,用于分布式环境的基于信息交换的同行协议,描述传递信息的格式和规范,它可以用于连接web服务和客户端之间的接口,是一个可以在不同操作系统上运行的不同语言编写的程序之间的传输通信协议,格式为xml,soap消息

soap协议又分为soap 1.1 和 soap 1.2 两个版本
这两个协议间的区别在于soap 1.1里存在soapAction请求头,而soap 1.2没有,soap 1.2里用了action来代替,两者的wsdl文件也不同,体现在命名空间和定义service差别里,不过这些对注入没有影响

soap SQL注入

SOAP sql注入原理
soap sql 注入就是攻击者修改发送的soap消息参数,达到发起SQL注入的效果,在服务提供端,soap信息被解析,参数在访问数据库前没有被检测,导致执行sql语句,造成sql注入

soap的消息格式
之前提到过soap的格式为xml的

<?xml version="1.0"?>
<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>
</soap:Header>
<soap:Body>
<soap:Fault>
</soap:Fault>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 Java 提供的 Handler 机制可以在客户端对 SOAP 请求包注入 Header。以下是一个示例代码: ```java // 创建一个 SOAP 消息处理程序 public class MySOAPHandler implements SOAPHandler<SOAPMessageContext> { @Override public boolean handleMessage(SOAPMessageContext context) { // 获取是否为请求消息 Boolean isRequest = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); if (isRequest) { try { // 获取 SOAP 消息 SOAPMessage soapMsg = context.getMessage(); // 获取 SOAP 头部 SOAPHeader header = soapMsg.getSOAPHeader(); if (header == null) { header = soapMsg.getSOAPPart().getEnvelope().addHeader(); } // 创建一个 SOAP 头部元素 QName qname = new QName("http://example.com", "MyHeader", "my"); SOAPHeaderElement headerElement = header.addHeaderElement(qname); // 设置 SOAP 头部元素的值 headerElement.setValue("MyHeaderValue"); } catch (SOAPException e) { // 异常处理 } } return true; } // 其他方法省略 } ``` 然后,在客户端调用 Web 服务时,将该处理程序添加到 Handler 链中: ```java // 创建一个服务 URL wsdlUrl = new URL("http://example.com/MyService?wsdl"); QName serviceName = new QName("http://example.com", "MyService"); Service service = Service.create(wsdlUrl, serviceName); // 获取服务端点 QName portName = new QName("http://example.com", "MyPort"); MyPortType port = service.getPort(portName, MyPortType.class); // 创建一个处理程序链 BindingProvider bp = (BindingProvider) port; List<Handler> handlerChain = bp.getBinding().getHandlerChain(); handlerChain.add(new MySOAPHandler()); bp.getBinding().setHandlerChain(handlerChain); // 调用 Web 服务 port.myMethod(); ``` 这样,在客户端调用 Web 服务时,SOAP 请求包就会自动添加一个名为 MyHeader 的 Header 元素,值为 MyHeaderValue。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值