网站注册,用户获取验证码失败,经过网站开发兄弟提醒,研究了下fsockopen()等函数,现摘要如下
Fsockopen()
(PHP4,PHP5)
用于打开一个网络链接或一个unix套接字链接。
也就是说,既然此函数会参与短信API收发,那么就有可能该函数打开了一个unix套接字链接,此时网站开发的兄弟亦证实了这点。
于是我马上想到很有可能是采用了三种套接字类型中的流套接字(sock_stream)。那么就会产生3次握手。于是用iptables命令发现,交互包被防火墙drop掉了。但是仅到此,问题才解决了一小部分而已,因为我们还要抓取端口,以便制定相应的防火墙规则。
我们先看下web服务器发送短信的流程
根据流程图,我们很容易看出有可能出现问题的地方,我们做下标记
因此我们在这两个地方抓包,首先是用户与web server交互之处,抓包情况如下
我们很轻易的就观测到,在用户申请验证码阶段,用的80端口,这对于web服务器来说,是不可能被drop掉的,此处排除。
接着,我们在服务器上抓包
发现,服务器访问短信网站API时候采用的是80端口,而服务器自己则是随机分配的一个端口,所以被防火墙drop掉了。因此需调试防火墙规则。
故障排除。
思考:由此我们是不是可以猜测,但凡此类短信注册网站是否都会有此bug。也许是我对iptables理解有限,据我目前所知,无论是定位源或目,或者再狠点,两者都一并限定了,都是会随之开放比较大的权限,相应的也会是网站防御的薄弱处之一。
若有思考有误,欢迎大家来吐槽!
END!
时间: 2024-11-01 00:35:36