一、说明

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

二、安装

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

pip install slowloris

三、使用

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

slowloris 192.168.1.1

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

(pytest) C:\Users\ls>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

Python3+slowloris安装使用教程的更多相关文章

  1. 2018超详细sublime text3+python3.x安装配置教程(附常用插件安装教程)

    导读 本文是关于2018年7月最新版sublime text3+pythin3.x下载及安装配置教程,sublime text3版本为3176,python版本为3.7,安装环境是基于windows1 ...

  2. Python3+Flask安装使用教程

    一.环境配置 当前我的开发环境是Miniconda3+PyCharm.开发环境其实无所谓,自己使用Python3+Nodepad都可以.安装Flask库: pip install Flask 二.第一 ...

  3. Python3+Appium安装使用教程

    一.安装 我们知道selenium是桌面浏览器自动化操作工具(Web Browser Automation) appium是继承selenium自动化思想旨在使手机app操作也能自动化的工具(Mobi ...

  4. Python3+mitmproxy安装使用教程(Windows)

    一.安装 1.1 安装mitmproxy 直接使用pip安装即可 pip install mitmproxy pip本质上会一是安装mitmproxy库的相关代码,二是安装mitmproxy.exe/ ...

  5. Python3+Scapy安装使用教程

    一.说明 之前写DoS程序的时候(见"拒绝服务(DoS)理解.防御与实现"),数据包完全是自己构造的,这其中的难处一是要清楚各层协议的字段.字段长度.字段是数值还是字符.大头还是小 ...

  6. Python3+mitmproxy安装使用教程(Windows)(转载)

    mitmproxy 是用于MITM的proxy,MITM中间人攻击.说白了就是服务器和客户机中间通讯多增加了一层.跟Fiddler和Charles最大的不同就是,mitmproxy可以进行二次开发,尤 ...

  7. Python3 turtle安装和使用教程

    Python3 turtle安装和使用教程   Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数 ...

  8. Python3.x安装教程及环境变量配置

    python3.x安装 1.直接到官网https://www.python.org/下载,安装就可以了. 2.安装比较简单,点exe文件一直下一步就可以了(注意:安装的时候有个选择是否添加环境变量,这 ...

  9. [No00004B]Windows 下面为Python3.5安装NoteBook

    python3.5安装NoteBook,网上搜了一下教程,几乎很多转帖,或者是2.x版本的,很少有直接可以用的.自己琢磨了一下午,终于搞定了,现在贴出来.希望大家以后转帖什么的都先测试一下,互联网时代 ...

随机推荐

  1. es6中的模块化

    在之前的javascript中是没有模块化概念的.如果要进行模块化操作,需要引入第三方的类库.随着技术的发展,前后端分离,前端的业务变的越来越复杂化.直至ES6带来了模块化,才让javascript第 ...

  2. 《CSS世界》读书笔记(十二)

    <!-- <CSS世界>张鑫旭著 --> 正确看待 CSS 世界里的 margin 合并 什么是 margin 合并 块元素的上外边距(margin-top)与下外边距(mar ...

  3. Got error -1 from storage engine

    有个小朋友修复从库,但是start slave 后,报错信息如下 Could not execute Write_rows event on table hsfdssdb.mf_textannounc ...

  4. APScheduler

    目录 APScheduler简介 支持的后端存储作业 集成的Python框架 APScheduler下载安装 APScheduler组件 各组件简介 调度器 作业存储器 执行器 触发器 使用 添加作业 ...

  5. 【题解】Luogu P3674 小清新人渣的本愿

    原题传送门 这题还算简单(我记得我刚学oi时就来写这题,然后暴力都爆零了) 看见无修改,那么这题应该是莫队 维护两个bitset,第二个是第一个的反串,bitset内维护每个数字是否出现过 第一种操作 ...

  6. mysql 数据库的设计三范式

    三范式 1NF:字段不可分; 2NF:有主键,非主键字段依赖主键; 3NF:非主键字段不能相互依赖; 解释: 1NF:原子性 字段不可再分,否则就不是关系数据库; 2NF:唯一性 一个表只说明一个事物 ...

  7. opencv检错:程序运行过程正常,当跳出函数时出现断言错误(Debug Assertion Failed)

    转载http://blog.csdn.net/u012327581/article/details/51351780 1.问题描述 在VS2015下配置好Opencv后,程序在函数运行过程中正常,调试 ...

  8. Oracle错误——tablespace 'XXXX' does not exist

    错误 在使用IMP命令导入Oracle数据的时候,因为导出数据的数据库表空间和导入数据的数据库表空间不同,导致导入数据失败,出现:tablespace 'XXXX' does not exist 在网 ...

  9. 王之泰《面向对象程序设计(java)》课程学习总结

    第一部分:理论知识学习部分 总复习纲要 1. Java语言特点与开发环境配置(第1章.第2章) 2. Java基本程序结构(第3章) 3. Java面向对象程序结构(第4章.第5章.第6章) 4. 类 ...

  10. AI_群组行为

    using System.Collections.Generic; using UnityEngine; public class CrowAI : MonoBehaviour { //当前速度 ; ...