前言

一些情况下,我们需要通过并发来发现验证漏洞,而在服务端有拦截策略的情况下,使用单台服务器进行并发是不可取的

image-20221124104656915

因此我们需要多台服务器来同时实现并发,此处抛开axiom不谈,主要记录一下我快速实现多台服务器同时并发的思路(不用复杂编程语言,仅依赖于服务器shell,做到最简化)。

第一版

我能想到的,最简单的,就是直接写shell来实现

  • 发起请求用curl
  • 实现并发用for循环+nohup
  • 多台服务器同时启动,写个while true,然后用if判断是否超过某个时间(需要保证服务器都在同一时区)
  • 结果可以在nohup.out中查看

demo如下:

while true; do
    if [[ `date +%s` -gt 10位时间戳 ]];then
        for i in {1..6}
        do
            nohup curl语句 &
        done
        break
    fi
done

效果如下:

先用date +%s看一下当前的时间戳,然后手动+30秒

image-20221124110425713

代码如下:

while true; do
    if [[ `date +%s` -gt 1669259050 ]];then
        for i in {1..6}
        do
            nohup curl xxx.com &
        done
        break
    fi
done

实现如下:

image-20221124110805744

从肉眼来看,确实都是一瞬间发起的请求,并发也就完成了。

第二版

上面虽然从肉眼来看,都是同一瞬间发起的请求,但理想很丰满,现实很骨感

实际使用中漏洞验证效果不好,本来一个IP能并发成功5次的,用了这个,反而一共只能成功2-3次了。。。

分析一下原因,刚才的流程如下:

  • 发起请求用curl
  • 实现并发用for循环+nohup
    • 问题:for循环,也有一定的微小延时,实质上并不是同一时间发出去的
  • 多台服务器同时启动,写个while true,然后用if判断是否超过某个时间(需要保证服务器都在同一时区)
  • 结果可以在nohup.out中查看

所以,分析后的想法,就是把时间判断和curl单独提取出来,每一个请求都单独判断是否启动,不用for循环一个一个启动,到点直接curl,从而实现并发。

demo如下:

  • a.sh
while true; do
    if [[ `date +%s` -gt 时间戳 ]];then
        curl语句
        break
    fi
done
  • 终端运行代码
for i in {1..6}
    do
        nohup bash a.sh &
    done

实现如下:

image-20221124114027721

总结

主要思路还是三步

  1. 能发起请求
  2. 能并发发起请求
  3. 能在多台服务器上同时并发请求
Copyright © d4m1ts 2023 all right reserved,powered by Gitbook该文章修订时间: 2022-11-24 14:58:40

results matching ""

    No results matching ""