Стучалки в скриптах

Статус
В этой теме нельзя размещать новые ответы.
Через ajax можно читать любой яваскрипт или json яваскриптовый объект через тэг <script> который не обращает внимания кроссзапрос это или нет, api так делаются, например если в скрипте используется jquery то можно поискать функцию getScript, getJSON, или доменное имя. Или ещё может быть какой нибудь php прокси файл через который яваскрипт данные (например имя домена) на другой домен отсылает.
Код:
<script language="JavaScript" src="js/proxy.php?nastuchat_na=example.com"></script>
Да и просто в html может быть ссылка на php файл типа яваскрипт:
Код:
<script language="JavaScript" src="http://example.com/stuchalka.php"></script>
 
Я делал так: ставил скрипт на локалке (денвер) на компе стоит KIS и в момент когда скрипт куда то что то передает KIS его ловит. Сообщение типа httpd.exe обращаеться к "адрес" по порту "порт". Брал адрес и искал его по очереди в скриптах и так находил нужный кусок кода.
 
Помогите советом, какую программы можете порекомендовать, к примеру сниффер для денвера, чтобы анализировать куда и что конектиться. И в последствии, найти и обезвредить, скажем так... :D

По запросу shell_exec, нашел один файл - PSpellShell.php:
PHP:
<?php
/**
 * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
 */

class PSpellShell extends SpellChecker {
 /**
  * Spellchecks an array of words.
  *
  * @param {String} $lang Language code like sv or en.
  * @param {Array} $words Array of words to spellcheck.
  * @return {Array} Array of misspelled words.
  */
 function &checkWords($lang, $words) {
  $cmd = $this->_getCMD($lang);

  if ($fh = fopen($this->_tmpfile, "w")) {
   fwrite($fh, "!\n");

   foreach($words as $key => $value)
    fwrite($fh, "^" . $value . "\n");

   fclose($fh);
  } else
   $this->throwError("PSpell support was not found.");

  $data = shell_exec($cmd);
  @unlink($this->_tmpfile);

  $returnData = array();
  $dataArr = preg_split("/[\r\n]/", $data, -1, PREG_SPLIT_NO_EMPTY);

  foreach ($dataArr as $dstr) {
   $matches = array();

   // Skip this line.
   if (strpos($dstr, "@") === 0)
    continue;

   preg_match("/\& ([^ ]+) .*/i", $dstr, $matches);

   if (!empty($matches[1]))
    $returnData[] = utf8_encode(trim($matches[1]));
  }

  return $returnData;
 }

 /**
  * Returns suggestions of for a specific word.
  *
  * @param {String} $lang Language code like sv or en.
  * @param {String} $word Specific word to get suggestions for.
  * @return {Array} Array of suggestions for the specified word.
  */
 function &getSuggestions($lang, $word) {
  $cmd = $this->_getCMD($lang);

        if (function_exists("mb_convert_encoding"))
            $word = mb_convert_encoding($word, "ISO-8859-1", mb_detect_encoding($word, "UTF-8"));
        else
            $word = utf8_encode($word);

  if ($fh = fopen($this->_tmpfile, "w")) {
   fwrite($fh, "!\n");
   fwrite($fh, "^$word\n");
   fclose($fh);
  } else
   $this->throwError("Error opening tmp file.");

  $data = shell_exec($cmd);
  @unlink($this->_tmpfile);

  $returnData = array();
  $dataArr = preg_split("/\n/", $data, -1, PREG_SPLIT_NO_EMPTY);

  foreach($dataArr as $dstr) {
   $matches = array();

   // Skip this line.
   if (strpos($dstr, "@") === 0)
    continue;

   preg_match("/\&[^:]+:(.*)/i", $dstr, $matches);

   if (!empty($matches[1])) {
    $words = array_slice(explode(',', $matches[1]), 0, 10);

    for ($i=0; $i<count($words); $i++)
     $words[$i] = trim($words[$i]);

    return $words;
   }
  }

  return array();
 }

 function _getCMD($lang) {
  $this->_tmpfile = tempnam($this->_config['PSpellShell.tmp'], "tinyspell");

  if(preg_match("#win#i", php_uname()))
   return $this->_config['PSpellShell.aspell'] . " -a --lang=". escapeshellarg($lang) . " --encoding=utf-8 -H < " . $this->_tmpfile . " 2>&1";

  return "cat ". $this->_tmpfile ." | " . $this->_config['PSpellShell.aspell'] . " -a --encoding=utf-8 -H --lang=". escapeshellarg($lang);
 }
}

?>
По запросу file_get_contents, нашел один файл - rpc.php
PHP:
<?php
/**
 * $Id: rpc.php 822 2008-04-28 13:45:03Z spocke $
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
 */
require_once("./includes/general.php");
// Set RPC response headers
header('Content-Type: text/plain');
header('Content-Encoding: UTF-8');
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
$raw = "";
// Try param
if (isset($_POST["json_data"]))
 $raw = getRequestParam("json_data");
// Try globals array
if (!$raw && isset($_GLOBALS) && isset($_GLOBALS["HTTP_RAW_POST_DATA"]))
 $raw = $_GLOBALS["HTTP_RAW_POST_DATA"];
// Try globals variable
if (!$raw && isset($HTTP_RAW_POST_DATA))
 $raw = $HTTP_RAW_POST_DATA;
// Try stream
if (!$raw) {
 if (!function_exists('file_get_contents')) {
  $fp = fopen("php://input", "r");
  if ($fp) {
   $raw = "";
   while (!feof($fp))
    $raw = fread($fp, 1024);
   fclose($fp);
  }
 } else
  $raw = "" . file_get_contents("php://input");
}
// No input data
if (!$raw)
 die('{"result":null,"id":null,"error":{"errstr":"Could not get raw post data.","errfile":"","errline":null,"errcontext":"","level":"FATAL"}}');
// Passthrough request to remote server
if (isset($config['general.remote_rpc_url'])) {
 $url = parse_url($config['general.remote_rpc_url']);
 // Setup request
 $req = "POST " . $url["path"] . " HTTP/1.0\r\n";
 $req .= "Connection: close\r\n";
 $req .= "Host: " . $url['host'] . "\r\n";
 $req .= "Content-Length: " . strlen($raw) . "\r\n";
 $req .= "\r\n" . $raw;
 if (!isset($url['port']) || !$url['port'])
  $url['port'] = 80;
 $errno = $errstr = "";
 $socket = fsockopen($url['host'], intval($url['port']), $errno, $errstr, 30);
 if ($socket) {
  // Send request headers
  fputs($socket, $req);
  // Read response headers and data
  $resp = "";
  while (!feof($socket))
    $resp .= fgets($socket, 4096);
  fclose($socket);
  // Split response header/data
  $resp = explode("\r\n\r\n", $resp);
  echo $resp[1]; // Output body
 }
 die();
}
// Get JSON data
$json = new Moxiecode_JSON();
$input = $json->decode($raw);
// Execute RPC
if (isset($config['general.engine'])) {
 $spellchecker = new $config['general.engine']($config);
 $result = call_user_func_array(array($spellchecker, $input['method']), $input['params']);
} else
 die('{"result":null,"id":null,"error":{"errstr":"You must choose an spellchecker engine in the config.php file.","errfile":"","errline":null,"errcontext":"","level":"FATAL"}}');
// Request and response id should always be the same
$output = array(
 "id" => $input->id,
 "result" => $result,
 "error" => null
);
// Return JSON encoded string
echo $json->encode($output);
?>
Насколько опасная функция этих команд в данных файлах, подскажите, или тут все хорошо? :)
 
Помогите советом, какую программы можете порекомендовать, к примеру сниффер для денвера, чтобы анализировать куда и что конектиться. И в последствии, найти и обезвредить, скажем так... :D
 
  • Заблокирован
  • #15
А есть ли прога, которая бы смотрела на какие ip и с какими запросами обращается именно указанный скрипт, а не весь траф?
 
Agnitum Outpost Firewall Pro
только покажет не скрипт, а httpd.exe
хотя если скрипт запущен один - не проблема
 
А есть ли прога, которая бы смотрела на какие ip и с какими запросами обращается именно указанный скрипт, а не весь траф?
HTTPAnalyzer группирует запросы по процессам. Вот например обращения пхп-скрипта:
 
+10 за HTTPAnalyzer. Раньше пользовал Wireshark и SocketSniff, но HTTPAnalyzer это оптимальное решение.
nistarella, ещё есть eval, base64 и т.д. в любом случае ручками надёжней будет:
PHP:
<?
$base64='cGhwaW5mbygpOw==';
$decode = 'b'.'a'.'s'.'e'.'6'.'4'.'_'.'d'.'e'.'c'.'o'.'d'.'e';
eval($decode($base64));
?>
 
Вот пример элементарной стучалки:
<img src="http://stuk.com/image.jpg" />
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху