zoukankan      html  css  js  c++  java
  • Python3+slowloris安装使用教程

    一、说明

    今天提到slowloris,这东西看着很眼熟,应该是以前局方打算用来刷竞赛积分的工具。我总觉得DoS没什么意思,但记不得怎么用了所以还是研究一下。

    二、安装

    slowloris就是一个python库直接用pip安装就可以了。但要使用slowloris命令注意要么切换到当前python环境的Scripts目录,要么将该目录加入到环境变量。

    pip install slowloris

    三、使用

    最简单的,直接slowloris后加ip或域名即可,如:

    slowloris 192.168.1.1

    但是默认是150个连接效果可能不明显,可以使用-s参数指定连接数,如1000。具体参数说明如下:

    (pytest) C:Usersls>slowloris -h
    usage: slowloris.exe [-h] [-p PORT] [-s SOCKETS] [-v] [-ua] [-x]
                         [--proxy-host PROXY_HOST] [--proxy-port PROXY_PORT]
                         [--https]
                         [host]
    
    Slowloris, low bandwidth stress test tool for websites
    
    positional arguments:
      host                  Host to perform stress test on
    
    optional arguments:
      -h, --help            show this help message and exit
      -p PORT, --port PORT  Port of webserver, usually 80
      -s SOCKETS, --sockets SOCKETS
                            Number of sockets to use in the test
      -v, --verbose         Increases logging
      -ua, --randuseragents
                            Randomizes user-agents with each request
      -x, --useproxy        Use a SOCKS5 proxy for connecting
      --proxy-host PROXY_HOST
                            SOCKS5 proxy host
      --proxy-port PROXY_PORT
                            SOCKS5 proxy port
      --https               Use HTTPS for the requests

    四、原理探究

    4.1 DoS原理说明

    slowloris本质就只是一个简短的python程序,要弄清原理直接看源代码即可。

    代码地址:https://github.com/gkbrk/slowloris/blob/master/slowloris.py

    首先是随便请求一个不存在的url建立socket连接:

    然后最关键的是如下片段:向所有建立好的socket发送一个”X-a:“的消息,保证socket不被服务器因空闲超时而关闭;有多少个socket不可用就重新创多少个socket;每15秒执行一轮。

     很多文章说slowloris原理是发一个很长的body然后半天没给服务器发完,通过这种形式占用服务器连接。但从代码上看并非如此,slowloris就只是一个tcp全连接的DoS(除非上边的代码不是所说的slowloris)

    而且测试中发现,slowloris试图通过”X-a:“存活链接的愿望并没有实现,服务器在响应完之后直接把端口给关闭了。(不知是否取决于所用web服务器)

    如下图是上图数据流对应的数据包,当slowloris试图向服务端发送”X-a:“时,服务端直接表示RST。

    虽然存活不成功,但slowloris还是能DoS的,因为有”有多少个socket不可用就重新创多少个socket“的机制,slowloris仍能占用服务器资源。

    (整个分析过程应该是没问题的,但如果是这样slowloris和tcp全连接DoS有什么区别呢,为什么很多人都夸他这不应该啊,不懂哪里出了问题)

    4.2 slowloris能建立的连接很少浏览器却能成功访问、仿佛DoS失效问题探究

    昨天同事反映说建立不了连接,自己看了一下连接还是可以建的,但是一直都是几个;这边建不了更多连接数据包发送很少很慢,但浏览器却可以访问页面,这就很神奇了。

    直接下载源代码进行调试,源代码:https://github.com/gkbrk/slowloris/blob/master/slowloris.py

    开始一直以为是目标网站启用了https,而该工具对ssl连接建立处理有问题。但一方面从代码上看不出有什么问题,另一方面从wireshark抓取到的数据包看,http内容是成功发送了的,即上图中的3个6个连接是成功建立了的。没理由同样的代码,一些连接ssl处理有问题一些没有问题,即问题不应该与是http还是https有关系。

    继续调试发现在循环建立几个连接之后就抛出异常,抛出异常之后就break,break之后就sleep。抛出异常的原因是SSL连接建立过程中被服务器RST掉了,建立一部分连接后就不允许新建,这种现像明显是服务器端设置了连接个数限制。问题分析到这就比较明白了。

    建立连接的个数很少的原因是:循环建立连接过程中,只要出现异常,就不会继续建了。

    出现工具建不了新连接浏览器却可以访问的原因是:sleep时间段内工具建立的连接悉数被关闭,就腾出了连接使得浏览器能够成功访问;具体内言浏览器在工具出现except时间前后也是不能访问的,只有在sleep一段时间后(连接被腾出后)浏览器才能成功访问。

    总而言之,“DoS失效”这个问题有两个成因,一是服务端做了连接个数限制,二是默认sleep 15秒太长了;前者我们做为客户端无能为力,但可通过后者缩短休眼时间来解决(新版的有--sleeptime参数可直接配置休眼时间,旧版的没有)。

    参考:

    https://github.com/gkbrk/slowloris

  • 相关阅读:
    linux驱动开发学习一:创建一个字符设备
    如何高效的对有序数组去重
    找到缺失的第一个正整数
    .NET不可变集合已经正式发布
    中国人唯一不认可的成功——就是家庭的和睦,人生的平淡【转】
    自己动手搭建 MongoDB 环境,并建立一个 .NET HelloWorld 程序测试
    ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误
    自己动手搭建 Redis 环境,并建立一个 .NET HelloWorld 程序测试
    ServiceStack 介绍
    一步一步实战扩展 ASP.NET Route,实现小写 URL、个性化 URL
  • 原文地址:https://www.cnblogs.com/lsdb/p/10443875.html
Copyright © 2011-2022 走看看