Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.IO;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
- using System.Threading;
- using System.Collections.Generic;
- namespace HttpProxy
- {
- class Program
- {
- static readonly List<string> maliciousPatterns = new List<string>
- {
- "SQLmap",
- "MaliciousHeader",
- "cmd=",
- "exec",
- "/etc/passwd",
- "base64",
- "select+from"
- };
- static void Main(string[] args)
- {
- int port = 8888;
- TcpListener listener = new TcpListener(IPAddress.Any, port);
- listener.Start();
- Console.WriteLine($"[+] Прокси-сервер запущен на порту {port}");
- while (true)
- {
- TcpClient client = listener.AcceptTcpClient();
- ThreadPool.QueueUserWorkItem(HandleClient, client);
- }
- }
- static void HandleClient(object obj)
- {
- TcpClient client = obj as TcpClient;
- try
- {
- NetworkStream clientStream = client.GetStream();
- StreamReader reader = new StreamReader(clientStream);
- StreamWriter writer = new StreamWriter(clientStream) { AutoFlush = true };
- string requestLine = reader.ReadLine();
- if (string.IsNullOrEmpty(requestLine)) return;
- Console.WriteLine($"\n[>] Запрос: {requestLine}");
- StringBuilder headers = new StringBuilder();
- string line;
- while (!string.IsNullOrEmpty(line = reader.ReadLine()))
- {
- headers.AppendLine(line);
- }
- string fullRequest = requestLine + "\n" + headers.ToString();
- foreach (string pattern in maliciousPatterns)
- {
- if (fullRequest.IndexOf(pattern, StringComparison.OrdinalIgnoreCase) >= 0)
- {
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine($"[!] Обнаружена угроза: {pattern}");
- Console.ResetColor();
- string forbiddenResponse = "HTTP/1.1 403 Forbidden\r\nContent-Length: 0\r\n\r\n";
- byte[] forbiddenBytes = Encoding.ASCII.GetBytes(forbiddenResponse);
- clientStream.Write(forbiddenBytes, 0, forbiddenBytes.Length);
- client.Close();
- return;
- }
- }
- string[] tokens = requestLine.Split(' ');
- if (tokens.Length < 2)
- {
- client.Close();
- return;
- }
- string method = tokens[0];
- string url = tokens[1];
- string hostLine = headers.ToString().Split(new[] { "Host: " }, StringSplitOptions.None)[1];
- string host = hostLine.Split('\n')[0].Trim();
- Uri uri = new Uri(url.StartsWith("http") ? url : "http://" + host + url);
- int port = uri.Port == -1 ? 80 : uri.Port;
- TcpClient server = new TcpClient(uri.Host, port);
- NetworkStream serverStream = server.GetStream();
- StreamWriter serverWriter = new StreamWriter(serverStream) { AutoFlush = true };
- serverWriter.WriteLine(requestLine);
- serverWriter.Write(headers.ToString() + "\r\n");
- byte[] buffer = new byte[8192];
- int bytesRead;
- while ((bytesRead = serverStream.Read(buffer, 0, buffer.Length)) > 0)
- {
- clientStream.Write(buffer, 0, bytesRead);
- }
- client.Close();
- server.Close();
- }
- catch (Exception ex)
- {
- Console.WriteLine($"[!] Ошибка: {ex.Message}");
- client?.Close();
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment