0x00
依旧是测试后端组件这一章,这两天在忙实验室纳新。。每天基本没怎么看书,一天也就复现了一道题。。继续努力吧,争取在期末前看完这本书。。
0x01
注入XML解释器
1:注入XML外部实体
在今天的Web应用程序中,XML常用于从客户端向服务器提交数据。然后,服务器端应用程序将处理这些数据,并且可能会返回一个包含XML或任何其它格式数据的响应。在使用异步请求在后台进行通信的基于Ajax的应用程序中,这种行为最为常见。浏览器扩展组件和其他客户端技术也可能会用到XML。
XML格式允许在XML文档中定义定制实体。这些实体在文档开始部分的可选DOCTYPE元素中定义。
eg:<!DOCTYPE foo [ <!ENTITY testref "testrefvalue">]>
如果文档中包含以上定义,解析器将用testrevalue这个已定义的值替代文档中出现的任何&testref;实体引用。
此外。XML规范允许使用外部引用来定义实体,XML解析器将动态提取这些实体的值。这些外部实体定义采用URL格式,并可以引用外部Web URL或本地文件系统上的资源。
XML解析器将提取指定URL或文件的内容,并将其作为已定义实体的值。
注
除使用file:协议来指定本地文件系统上的资源外,攻击者还可以使用http://等协议让服务器通过网络提取资源。
①:攻击者可以将应用程序作为代理服务器使用,从应用程序能够访问的任何Web服务器上检索敏感内容,包括那些在组织内部的专用非路由地址空间运行的内容。
②:攻击者可以利用后端Web应用程序中的漏洞,只要这些漏洞可以通过URL加以利用。
③:攻击者可以通过攻击大量IP地址和端口号,对后端系统上的开放端口进行测试。在某些情况下。可以使用时间性差异来推断所请求的端口的状态。
最后,如果应用程序检索外部实体,但并不在响应中返回实体,则攻击者仍然可以通过无限期地读取某个文件流,从而实施拒绝服务攻击。
<!DOCTYPE foo [<! ENTITY xxe SYSTEM "file:///dev/random">]>
0X02注入SOAP
什么是 SOAP?
SOAP 指简易对象访问协议
SOAP 是一种通信协议SOAP 用于应用程序之间的通信
SOAP 是一种用于发送消息的格式SOAP 被设计用来通过因特网进行通信SOAP 独立于平台
SOAP 独立于语言
SOAP 基于 XML
SOAP 很简单并可扩展
SOAP 允许您绕过防火墙
SOAP 将被作为 W3C 标准来发展
防止SOAP注入
在用户提交的数据被插入SOAP消息中的任何位置实施边界确认过滤,以防止SOAP注入。
对用户输入中的任何XML元字符进行HTML编码。
0x03注入后端HTTP请求
1:服务器端HTTP重定向
2:****HTTP参数注入(HPI)****
服务器端HTTP重定向
如果应用程序接受用户可控制的输入,并将其合并到使用后端HTTP请求检索的URL中,这种行为就会导致服务器端重定向漏洞。
攻击者可以利用服务器端HTTP重定向漏洞,将易受攻击的应用程序作为开放的HTTP代理服务器,以实施各种攻击。
①:攻击者可以将该代理服务器用于攻击互联网上的第三方系统。
②:攻击者可以将该代理服务器用于连接到组织内部网络中的任意主机,从而访问无法通过因特网直接访问的目标。
③:攻击者可以将该代理服务器用于反向连接在应用程序服务器本身上运行的其他服务,从而突破防火墙的限制,并利用信任关系来避开身份验证。
④:攻击者可以通过使用应用程序在响应中包含受控的内容,利用代理功能实现跨站点脚本攻击。
HTTP参数注入(HPI)
如果用户提交的参数被用作后端HTTP请求中的参数,这时就会导致HTTP参数注入。
eg:资金清算类可以抓包修改
HTTP参数污染
HTTP参数污染注入源于网站对于提交的相同的参数的不同处理方式导致。
www.xx.com/a?key=123&key=aaa
如果服务端返回输入key的值,可能会有
123
aaa
123aaa
有时甚至会导致SQL注入
eg:
发送index.jsp?id=1&id=2请求
SMTP注入
和广为人知的诸如SQL注入、XPath注入等技术类似,邮件服务器注入技术也是通过一个对用户提供的数据没有严格检查的webmail应用程序将IMAP命令或者SMTP命令注入到邮件服务器。要向邮件服务器注入命令,前提条件是允许用户通过webmail应用程序访问其端口25(SMTP)和143(IMAP)。
方式:
1. CC/BCC注入
2. 参数注射
3. 邮件主题注入
4. 改变消息的主体body
应用:
可成功劫持密码找回等信息
可成功发送垃圾邮件
防止SMTP注入
对用户提交的数据进行严格的确认检查,就可以防止SMTP注入漏洞。
应根据一个适当的正则表达式检查电子邮件地址。(拒绝换行符)
2:消息主题不得包含任何换行符,并应实施适当的长度限制。
如果消息内容被一个SMTP会话直接使用,那么应进制使用仅包含一个点字符的消息行。