Out Of Band 带外攻击的一点总结

在上周的HCTF中的boring website题目中才第一次接触到了sql中的带外攻击,在网上收集资料整理了一些,再加上之前零碎的一些记录,想想还是记录一下目前自己对带外攻击的理解与应用范畴吧,当然并不只限于sql中的应用

什么是带外攻击,应用场景有哪些?

在很多攻击中,可能我们无法直接看到攻击的回显,也许攻击行为的确产生了,但数据并不一定能够回显到攻击者的眼中,这时候我们可以借助网络请求,将回显结果发送到我们的服务器上,就可以看到回显了,这种方式就叫做带外攻击

比较常见的使用场景有这些,如果我们无法直接看到攻击的回显,就可以考虑使用带外攻击来通过网络请求拿到回显数据

  • 命令执行
  • sql注入
  • XXE

介绍几个常用的接收回显的网站

  • 火日师傅在github上开源的xss平台

    好处是搭在自己的vps上面,修改使用起来都十分方便,而且记录的参数十分详细,cookie,post,get的数据都能拿到,问题是没法获得基于dns方式的数据,而且链接限制在了http://ip/xss/这样,url形式不能修改,只能改变传输的参数

  • ceye平台

    应该是知道创宇的平台,为每个用户分配一个识别url,方便的地方是除了支持http链接接收,还可以通过dns方式接收回显,并且链接的形式比较随意,域名啊,后面的路径啊都随意,只要域名是基于为自己分配的指定url就可以。不太方便的地方就是貌似对http方式发送回显的接收结果中是看不到太详细的数据的。

带外攻击中两种回显信息发送方式

很常见的通过http方式发送,回显信息可以放在以下几个位置:

有一点要提醒的是,测试中看到,发送数据有换行的话,或多或少的都会有问题,因为建议将数据进行编码后再传输,比如在命令注入中可以使用cat /etc/passwd | base64来将回显结果进行编码

通过DNS解析方式来获得回显

这也是在HCTF中才知道的姿势(哎,感觉自己孤陋寡闻,真的好菜。。。)。大致原理是这样的,还是发送一个链接,我们将回显信息放到域名里去,大致就是http://xxxx.myip/这种形式,服务器对于这种链接会首先进行DNS解析来拿到对应域名的IP才能发送IP报文,而这种DNS报我们是可以拿到的,就是通过上面介绍到的ceye平台,可以查询DNS报,也就是某个域名的解析记录,这样我们就可以拿到了回显的数据

但是DNS回显是有限制的,因为回显字符作为域名的一部分,就要遵守域名的规则,根据规定,只能使用英文字符,数字,-,且-不能用作开头和结尾,域名长度也限制在了63,这样看来,DNS携带比较适用于携带hash后密码这些数据

讲道理这种方式很明显没有直接通过http发送数据来的方便,但的确在某些时候只能用这种方式来对外发送请求将数据传输出来,通过对HCTF中那道sql题目的测试,可以发现loadfile(‘\\\\vips\x\‘?id=123)在平台上是接收不到请求的,从sql执行结果上看执行时间是0s,看来没有发送网络请求,只有我们换一个域名,在不同域名的时候,sql执行结果才会显示花费了一定的时间,看来是用来进行DNS查询了,在这种sql的带外攻击中,loadfile函数只能配合DNS方式的回显才能做到

一些payload

可以直接参见ceye的网站,里面有各种攻击场景下的payload,还是很全的

http://ceye.io/payloads