Обход капчи, С# + ringzer0team.com

Admin

Original poster
Administrator
Сообщения
916
Реакции
753
Посетить сайт
Решая задачи на ringzer0team.com(Существует с 2014 г, на данный момент содержит около двухсот челленджей на любой вкус.
Примеры тематик: Binaries (Windows / Linux), Cryptography, SQL Injection, JavaScript, Shellcoding), наткнулся на интересную тему!
h_1474531854_7786571_44766b7e67.png

Вообщем нужно в течение 2-х секунд залогиниться на сайте, перейти в тему, распознать капчу и перейти по URL с текстом капчи и только после этого
мы получаем FLAG за который нам дают 6 баллов!

Алгоритм решения проблемы:
Берем Cookies из браузера(FireFox >> Исследовать элемент >> Сеть >> Ищем POST запрос >> Выбираем Куки) и с помощью их будем идти POSTом на сайт, парсить картинку(Хранится она виде строки Base64 формата png) и сохранять ее на диск D, нам нужно распознать текст с картинки где будем использовать библиотеку tessnet2 хабр, получаем текст и идем постом на URL с текстом, в ответ мы получаем HTML страницу с нашим флагом! все очень просто..

Для реализации этой проблемы я буду использовать язык программирования С#.

Начнем кодить..

Для начало нужно добавить в проект либу tessnet2(x64, x86)!

Нам нужно залогиниться и с парсить картинку. Для этого пишем метод POST запроса!

Код:
public string POST(string Url, string Data)//URL и параметры
{
  System.Net.WebRequest req = System.Net.WebRequest.Create(Url);
  req.Method = "POST";
  req.Timeout = 1000000;
  req.ContentType = "application/x-www-form-urlencoded";
  // Мои cookies, перейдя по ссылке, мы сразу будем залогинены!
  req.Headers.Add("Cookie: _ga=GA1.2.1730485327.1473256666;    PHPSESSID=p597jsrhddns0a4vg35mq5ltm5"); //Найти их можно в браузере

  byte[] sentData = Encoding.GetEncoding(1251).GetBytes(Data);
  req.ContentLength = sentData.Length;
  System.IO.Stream sendStream = req.GetRequestStream();
  sendStream.Write(sentData, 0, sentData.Length);
  sendStream.Close();
  System.Net.WebResponse res = req.GetResponse();
  System.IO.Stream ReceiveStream = res.GetResponseStream();
  System.IO.StreamReader sr = new System.IO.StreamReader(ReceiveStream, Encoding.UTF8);

  //Кодировка указывается в зависимости от кодировки ответа сервера

  Char[] read = new Char[256];
  int count = sr.Read(read, 0, 256);
  string Out = String.Empty;
  while (count > 0)
  {
     String str = new String(read, 0, count);
     Out += str;
     count = sr.Read(read, 0, 256);
  }
  return Out;
}
Теперь нужно написать метод для распознания текста с картинки

Код:
 public string anticaptcha()
 {

 Bitmap bmp = new Bitmap(@"D:\1.png"); // на диске D будем будем считывать картинку, которую чуть позже мы ее с парсим с сайта
 pictureBoxInput.Image = (Bitmap)bmp.Clone();// загружаем ее в pictureBox
 Color c;

 for (int x = 0; x < bmp.Width; x++)//Проверяем каждый пиксель
    {
        for (int y = 0; y < bmp.Height; y++)
        {
           c = bmp.GetPixel(x, y);
 //Если пиксель не равен белому цвету, ты мы его закрашиваем черным, т.к. у нас текст на картинке белый!
           if ((c.A == 255) && (c.B == 255) && (c.G == 255) && (c.R == 255))
           { }
           else
    {
           bmp.SetPixel(x, y, Color.Black);
           pictureBoxInput.Image = bmp; // возвращаем картинку в pictureBox
           }
        }
// Теперь у нас получалась картинка с черным фоном и белым текстом, это все для упрощения распознания текста(либой tessnet2)
}
Ocr ocr = new Ocr();

tessnet2.Tesseract tessocr = new tessnet2.Tesseract();
tessocr.SetVariable("tessedit_char_whitelist", "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm0123456789");
tessocr.Init(null, "eng", true);
List<tessnet2.Word> text = ocr.DoOCRNormal((Bitmap)pictureBoxInput.Image, "eng");
string sd = text[0].Text;
text = ocr.DoOCRNormal((Bitmap)pictureBox1.Image, "eng");
pictureBoxInput.Image = null;
return sd;
}


// создаем класс для работы c tessnet2
public class Ocr
{
   public List<tessnet2.Word> DoOCRNormal(Bitmap image, string lang)
   {
     tessnet2.Tesseract ocr = new tessnet2.Tesseract();
     ocr.Init(null, lang, false);
     List<tessnet2.Word> result = ocr.DoOCR(image, Rectangle.Empty);
     return result;
   }
}
И вот финишная прямая...
Кидаем button на форму и в его событии button1_Click вызываем наши методы.
Так как на сайте captcha хранится в строке base64 формата png, нам нужно с парсить данной строку!

Код:
private void button1_Click(object sender, EventArgs e)
{
    string imageBase64 = "";//Тут будем хранить строку Base64
    //так мы использовали куки в методе POST идем постом сразу в тему и ответ мы получаем html страницу!
    textBox1.Text = POST("https://ringzer0team.com/challenges/17", "");
    //очищаем html код от нашего base64!
    textBox1.Text = textBox1.Text.Replace("  ", "");
    textBox1.Text = textBox1.Text.Replace("<br />", "");
    //Получаем Base64
    imageBase64 = return_string(textBox1.Text, "data:image/png;base64,", "<h4>Submit flag</h4>");
  
    //ковертируем засовывыем получаный base64 в байты!
    byte[] byte_image = System.Convert.FromBase64String(imageBase64);
    //сохраняем файл на диске D
    using (FileStream fs = new FileStream(@"D:\1.png", FileMode.Create))
    {
       fs.Write(byte_image, 0, byte_image.Length);
       fs.Close();
              
    }
       textBoxInput.Text = anticaptcha();//получаем текст с картинки
//отправляем текст по URL
       textBox1.Text = POST("https://ringzer0team.com/challenges/17/" + textBoxInput.Text, "");
//и в ответ получаем html страницу, в который будет FLAG, в таком виде FLAG-sdfJSDoweijreri23SDFsdf
}

//Функция для очистки текста от мусора!
public string return_string(string text, string tag1, string tag2)
{
    int sim1 = text.IndexOf(tag1) + tag1.Length;
    int sim2 = text.IndexOf(tag2);
    int sim_length = sim2 - sim1;
    return text.Substring(sim1, sim_length - 33);
}
Вот собственно весь код:

Код:
//--------- C# ---------------

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace FillBitmap
{
   public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();
       }

       private void button1_Click(object sender, EventArgs e)
       {
           string imageBase64 = "";

           textBox1.Text = POST("https://ringzer0team.com/challenges/17", "");
           textBox1.Text = textBox1.Text.Replace("  ", "");
           textBox1.Text = textBox1.Text.Replace("<br />", "");
           imageBase64 = return_string(textBox1.Text, "data:image/png;base64,", "<h4>Submit flag</h4>");

           byte[] byte_image = System.Convert.FromBase64String(imageBase64);

           using (FileStream fs = new FileStream(@"D:\1.png", FileMode.Create))
           {
               fs.Write(byte_image, 0, byte_image.Length);
               fs.Close();
           }

           textBoxInput.Text = anticaptcha();
           textBox1.Text = POST("https://ringzer0team.com/challenges/17/" + textBoxInput.Text, "");
       }

       public string POST(string Url, string Data)
       {
           System.Net.WebRequest req = System.Net.WebRequest.Create(Url);
           req.Method = "POST";
           req.Timeout = 1000000;
           req.ContentType = "application/x-www-form-urlencoded";

           req.Headers.Add("Cookie: _ga=GA1.2.1730485327.1473256666; PHPSESSID=p597jsrhddns0a4vg35mq5ltm5");

           byte[] sentData = Encoding.GetEncoding(1251).GetBytes(Data);
           req.ContentLength = sentData.Length;
           System.IO.Stream sendStream = req.GetRequestStream();
           sendStream.Write(sentData, 0, sentData.Length);
           sendStream.Close();
           System.Net.WebResponse res = req.GetResponse();
           System.IO.Stream ReceiveStream = res.GetResponseStream();
           System.IO.StreamReader sr = new System.IO.StreamReader(ReceiveStream, Encoding.UTF8);

           //Кодировка указывается в зависимости от кодировки ответа сервера

           Char[] read = new Char[256];
           int count = sr.Read(read, 0, 256);
           string Out = String.Empty;
           while (count > 0)
           {
               String str = new String(read, 0, count);
               Out += str;
               count = sr.Read(read, 0, 256);
           }
           return Out;
       }
       public string return_string(string text, string tag1, string tag2)
       {
           int sim1 = text.IndexOf(tag1) + tag1.Length;
           int sim2 = text.IndexOf(tag2);
           int sim_length = sim2 - sim1;
           return text.Substring(sim1, sim_length - 33);
       }

       public string anticaptcha()
       {

           Bitmap bmp = new Bitmap(@"D:\1.png");
           pictureBoxInput.Image = (Bitmap)bmp.Clone();
           Color c;

           for (int x = 0; x < bmp.Width; x++)
           {
               for (int y = 0; y < bmp.Height; y++)
               {
                   c = bmp.GetPixel(x, y);

                   if ((c.A == 255) && (c.B == 255) && (c.G == 255) && (c.R == 255))
                   { }
                   else
     {
                       bmp.SetPixel(x, y, Color.Black);
                       pictureBoxInput.Image = bmp;
                   }
               }
           }
           Ocr ocr = new Ocr();
           tessnet2.Tesseract tessocr = new tessnet2.Tesseract();
    //символо которые будут присутствовать на картинке
           tessocr.SetVariable("tessedit_char_whitelist", "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm0123456789");
           tessocr.Init(null, "eng", true);
           List<tessnet2.Word> text = ocr.DoOCRNormal((Bitmap)pictureBoxInput.Image, "eng");
           string sd = text[0].Text;
           text = ocr.DoOCRNormal((Bitmap)pictureBox1.Image, "eng");
           pictureBoxInput.Image = null;
           return sd;
       }
   }

   public class Ocr
   {
       public List<tessnet2.Word> DoOCRNormal(Bitmap image, string lang)
       {
           tessnet2.Tesseract ocr = new tessnet2.Tesseract();
           ocr.Init(null, lang, false);
           List<tessnet2.Word> result = ocr.DoOCR(image, Rectangle.Empty);
           return result;
       }
   }
}
 
  • Like
Реакции: /intactdev
B

brainpoverty

Спасибо . Я шарпы плохо знаю, сам Java изучаю , но вроде как все грамотно расписано Надеюсь вскоре нарастить скилл и уметь реализовать подобное
 
Название темы
Автор Заголовок Раздел Ответы Дата
X Интересно [P.K] coinsbit.io B&C [Обход капчи] Проекты Private Keeper 4
S ScrapingBypass Web Scraping API Обход Cloudflare Captcha Корзина 0
B Обход защиты Предоставляю работу. Ищу специалиста. 0
NickelBlack HatCloud - Обход Cloudflare Spam/DDOS/Malware 3
ㅤ ㅤㅤㅤ Интересно Обход CloudFlare Уязвимости и взлом 1
C Интересно Обход/снятие 2fa, вывод денег без валид почты, работа с API-KEY крипто-бирж Ищу работу. Предлагаю свои услуги. 1
АнАлЬнАя ЧуПаКаБрА INLINE Обход клауда с капчей[CLOUDFLARE] Проекты Private Keeper 3
W Обход блокировки доменов VK Полезные статьи 1
grilder DDoS услуги | Обход DDoS Guard + CloudFlare + Captcha Ищу работу. Предлагаю свои услуги. 1
АнАлЬнАя ЧуПаКаБрА INLINE Обход CloudFlare Проекты Private Keeper 0
E Nulling Service || DDoS || Обход защит || Устранение конкурентов Спам / Флуд / Ддос 2
S Обход recaptcha 2 Полезные статьи 1
K Обход 2FA (Google Authenticator, SMS) Уязвимости и взлом 0
G Сниффинг для начинающих [Sniffing for beginners] Обход VLAN Полезные статьи 0
G Обход антивируса с помощью зашифрованных Payload, используя VENOM Kali Linux 0
АнАлЬнАя ЧуПаКаБрА INLINE Обход CloudFlare PK&UBC [Node.JS] Проекты Private Keeper 0
E Обход UAC Win 7/8/8.1/10 Полезные статьи 0
A Обход антивирусов, антиэмуляция. Часть III Другие ЯП 2
A Обход антивирусов, антиэмуляция. Часть II Другие ЯП 0
A Обход антивирусов, антиэмуляция. Часть I Другие ЯП 0
А Обход авторизации Wi-Fi Полезные статьи 19
4 Обход пароля Windows. Полезные статьи 17
WhiteYarik Обход мобилы на мыле Другое 2
Admin Детект и Обход анонимайзера Анонимность и приватность 1

Название темы