前沿:刚刚结束了NJCTF,做出来的题目很少。

1,----非常简单的misc , check QQ ,直接在QQ群可以看到发布的flag.

2,konck----hint:韩琛截获了一张纸条,突然记起来记录到房间里有人敲桌子,先下载附件,我们解压可以看到两个txt文件夹,刚看到这个题目的时候,受到题目的影响,以为是摩斯密码,后来试了好几遍都失败了,所以不是摩斯密码,后来又对比着看,发现这个一个txt文件(...._....._.._...._..._....._...._..._..._...._...._......._._...._....._.._...._..._..._...._...._..._..._...._.._..._......._..................

)中的.和另一个txt文件(zjqzhexjzmooqrssaidaiynlebnzjovosltahzjerhorrqxoeironlobdozavoouzjovosqfqsltahmqnqrrjotoerzjohorrqxoebooqydrztyqqojolx

)中的字母是一样的,试着替换了一下,结果是:zjqz_hexjz_mo_oqrs_sai_daiyn_lebn_zjo_vos_ltah_zjer_horrqxo_e_iron_lobdo_za_voou_zjo_vos_qfqs_ltah_mqn_qrr_joto_er_zjo_horrqxo_ebooqydrztyqqojolx然后在线解密(http://quipqiup.com/)得到:that_ might_ be_ easy_ you_ could_ find_ the_ key_ from_ this_ message_ i_ used_ fence_ to_ keep_ the_ key_ away_ from_ bad_ as s_here_ is_ the_ message_ in e e alcs tr laaeh e f g,然后意思是说key在这段话里面,感觉是后面的,然后把后面的空格去掉,试了好几次,证明后面十八位然后栅栏密码得到下面图所示:然后提交即可。

3,login----我首先登陆了进去,然后看到admin才能get the flag ,因为我不是admin,所以失败,然后想到用mysql数据库的数据类型长度截断的性质,如果数据超过了长度会被截断,所以注册的时候可以这样构造:admin                                 a,中间一大串空格,然后再登陆,登陆的时候直接用admin登陆就行了,然后输入刚刚注册时候的密码,进去之后就得到了flag。

4,getflag----这个题是文件读取,使用Linux命令,我们可以构造语句,我们输入xxx%26ls ../../,这里的xxx是胡乱输的,%26是&,用&链接命令,但是&不行,所以转一下%26,ls是linux下的指令,ls ../把网站目录向上走,然后源码是base64,解密就行了,输入xxx%26ls ../../结果可以看到flag文件,用cat读文件就得到flag了。

5,Wallet (这个题得到了P师傅的循循教导,不然可能做不出来)----首先把网站扫了一下,结果扫出来个www.zip压缩包,但是加密了,官方提示密码是弱口令,试了好几遍,后来njctf2017成功了,里面是admin.php,打开之后是乱码,然后找个网站解了一下密(http://tool.lu/php/用phpjm解密),得到了admin.php的php代码,首先我们分析一下,

if ($auth)                                         
    {                                                  
        if(isset($_GET['query']))

我们首先得让$auth等于1,那么我们看上面,

else if (sha1((string)$hsh) == md5((string)$auth))
        {
            $auth = 1;
        }

所以我们知道sha1((string)$hsh和md5((string)$auth相等的时候才能让$auth = 1;这个是==(  ===是恒等计算符   同时检查表达式的值与类型

==是比较运算符号  不会检查条件式的表达式的类型   ),不是绝对等于,相关知识不会的百度,所以我们需要找相关的字符串,往上面都有,我找了两个,其中s878926199a    md5后是0e545993274517709034328855841020,10932435112  sha1加密后是0e07766915004133176347055865026311692244(详情请看我上一篇0e开头MD5值小结),所以这两个就可以绕过if ($auth) ,接下来是query,$_GET['query'],看代码队伍说感觉是注入,首先我们先下载cookie管理器(火狐,这里我用bp没整出来flag你们可以试试,整出来了麻烦给我留言,谢谢),把题目的地址Refresh,然后收到cookie,我们把收到的auth和hsh都换成对应的s878926199a和10932435112,然后我们去注入,我们在admin.php后面输入 ?query=1,结果显示数字,所以存在注入,我们用union注,我刚开始猜的是flag,所以我刚开始输入了?query=1 and 1=2 union select flag from flag(注意这个后面不需要加#,用了反而会出错),结果是错误的,后来我又试了id,输入?query=1 and 1=2 union select id from flag结果flag出现了,这里我就不多说了,你们可以按照常规的来,当然就是你们的事情了,任重而道远。

6,这个是队友做出来的,下面的是  easy_crypto  的writeup。
easy_crypto的附件是一个压缩包。包中有四个文件,Cipher.txt encrypt.c flag.txt plain.txt。其中Cipher.txt是plain.txt加密后的文件。
加密算法是encrypt.c。而flag.txt是明文加密后的文件,只要我们解密出来这个文件即可得出flag。
下面给出加密算法:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
if (argc != 3)
{
printf("USAGE: %s input_file output_file\n", argv[0]);
return 0;
}
FILE* input_file = fopen(argv[1], "rb");
FILE* output_file = fopen(argv[2], "wb");
if (!input_file || !output_file)
{
printf("Error\n");
return 0;
}
char key[] = "XXXXXXXXXXXX";
char p, t, c = 0;
int i = 0;
while ((p = fgetc(input_file)) != EOF)
{ c = ((key[i % strlen(key)] ^ t) + (p-t) + i*i ) & 0xff;
t = p;
i++;
fputc(c, output_file);
}
return 0;
}

但是观察得出key不知道是多少?这时候,题目给的Cipher.txt ,plain.txt就起到作用了,通过这两个文件来得出key。
下面给出代码。

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include<iostream>
using namespace std; int main()
{
FILE* input_file = fopen("plain.txt", "rb");
FILE* output_file = fopen("cipher.txt", "rb");
char key[100];
char p, t, c = 0;
int i = 0;
while ((p = fgetc(input_file)) != EOF&&(c = fgetc(output_file))!=EOF)
{
key[i]=(c -((p-t) + i*i ))^t;
t = p;
i++;
}
cout<<key<<endl;
return 0;
}

字符串如下:
OKIWILLLETYOUKNOWWHATTHEKEYIS
OKIWILLLETYOUKNOWWHATTHEKEYIS
OKIWILLLETYOUKNOWWHATTHEKEYIS
OKIW
从这上面我们可以得出:
key数组就是OKIWILLLETYOUKNOWWHATTHEKEYIS。
得到key之后,我们就要解密密文,还要写出算法:

#pragma once
#pragma execution_character_set("utf-8")
#include <stdlib.h>
#include<ctype.h>
#include <stdio.h>
#include <cstring>
#include<iostream>
using namespace std; int main()
{
FILE* input_file = fopen("flag.txt", "rb");
char key[] = "OKIWILLLETYOUKNOWWHATTHEKEYIS";
char flag[100] = "";
char p,t,c;
p = t = c = 0;
int i = 0;
while ((c = fgetc(input_file)) != EOF)
{
p = c - i*i + t - (key[i % strlen(key)] ^ t);
flag[i] = p;
t = p;
i++;
}
cout << flag << endl;
return 0;
}

于是Flag:NJCTF{N0w_You90t_Th1sC4s3}。

上面就是所以做出来的题目,任重而道远,还需要更加努力!

NJCTF 极少部分wp的更多相关文章

  1. WaitForSingleObject与WaitForMultipleObjects用法详解(好用,而且进入一个非常高效沉睡状态,只占用极少的CPU时间片)

    在多线程下面,有时候会希望等待某一线程完成了再继续做其他事情,要实现这个目的,可以使用Windows API函数WaitForSingleObject,或者WaitForMultipleObjects ...

  2. 莫队初探(不带修/例题极少)By cellur925

    因为今天考到莫队裸题了嘤嘤嘤...而我这样的蒟蒻肯定不会这样的高端算法啊QAQ.于是暴力水了40分qwq. 正如上文所说,我实在太菜了,于是学习莫队也只是学习了最简单的不带修普通莫队,如果我能苟到省选 ...

  3. ajax异步提交 有时会出现无bug的数据处理异常-----debug没有问题,正常运行却数据处理不正确,极少机会会出现正常的处理结果

    ajax  被使用时,常默认的就使用了异步处理. 当遇到后面的代码对同样的数据进行处理 或 要依赖前面ajax处理的结果时,就会导致数据处理结果不正确,未达到预期值. 且,debug时却能正常完成功能 ...

  4. 前端上将字符串用语音读出来只能在IE上运行 其他不行 代码极少

    先保存保存自己的笔记 有高手看到求指点 <script type="text/javascript"> var VoiceObj; try { VoiceObj = n ...

  5. 谷歌扩展程序设置ajax请求允许跨域(极少人知道的解决方案)

    前言: 跨域问题一直是个老生常谈的问题,在实际开发过程中,跨域的问题常常会让开发者非常的头疼. 常用的几种跨域解决方案: 1.代理 2.XHR2 HTML5中提供的XMLHTTPREQUEST Lev ...

  6. Dynamics 365中显示格式为URL的字段极少部分URL值录入了不显示怎么回事?

    微软动态CRM专家罗勇 ,回复318或者20190315可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 对于如下类型的字段, ...

  7. Telegram传奇:俄罗斯富豪、黑客高手、极权和阴谋…

    说了很久要写Telegram的故事,一直拖延没有写.在我拖延的这段时间里面,Telegarm继续快速增长,前几天,在旧金山的TechCrunch Disrupt活动上,创始人Durov说现在Teleg ...

  8. 国产CPU走到十字路口:谁来取代英特尔芯片?(少写了一个OpenPower)

    国内的几支CPU研发力量各自选择的指令体系都有自己的优点和问题,选择其中的哪一支都会有对应的成本和风险.最终谁能担大任,且拭目以待. 文 | 瞭望智库特约科技观察员 王强 用上内置国产CPU的个人电脑 ...

  9. 极简的Android RecyclerView Adapter(使用DataBinding)

    阅读本篇文章需要读者对Android Databinding和RecyclerView有一定的了解. 简介 我们知道,DataBinding的核心理念是数据驱动.数据驱动驱动的目标就是View,使用D ...

随机推荐

  1. Pycharm小技巧--使用正则进行查找和批量替换

    分享一个Pycharm中使用正则的分组匹配来进行批量替换的小技巧 例如,我现在需要把HTML文件中的静态文件得到路径全部替换为django模板引用路径的格式 修改为类似这样的格式: {% static ...

  2. (转)Python爬虫利器一之Requests库的用法

    官方文档 以下内容大多来自于官方文档,本文进行了一些修改和总结.要了解更多可以参考 官方文档 安装 利用 pip 安装 $ pip install requests 或者利用 easy_install ...

  3. Install Ubuntu On Windows10(win10上安装linux系统)

    一.准备: 硬件:U盘 软件:ultraiso.Ubuntu镜像文件 二.安装linux: 1.Ubuntu官网(http://www.ubuntu.org.cn/download/alternati ...

  4. day38(增强类的实现)

    定义一个接口 package com.baidu.test; public interface Person { public abstract void eat(); public abstract ...

  5. SQL数据库的基础操作

    一,认识SQL数据库 美国Microsoft公司推出的一种关系型数据库系统.SQLServer是一个可扩展的.高性能的.为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有 ...

  6. 基于zookeeper的Swarm集群搭建

    简介 Swarm:docker原生的集群管理工具,将一组docker主机作为一个虚拟的docker主机来管理. 对客户端而言,Swarm集群就像是另一台普通的docker主机. Swarm集群中的每台 ...

  7. 常用Linux操作命令

    查看物理CPU个数:cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l 查看每个物理CPU中的核数:cat /proc ...

  8. java如何调用接口方式二

    java如何调用接口 在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适,所以,问题来了,java如何调用接口?很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对 ...

  9. NIO FileChannel

    NIO提供了比传统的文件访问更好的访问方法,NIO有两个优化的方法:一个是 FIleChannel.transferTo FileChannel.transferFrom,另一个是FileChanne ...

  10. Ajax.Nodejs.跨域访问

    使用环境: 客户端: jQuery 服务器: Node.js 在通过Ajax调用非本域的链接/接口时, 一般是不能成功的, 就算是同一个IP下不同的端口也被认作跨域访问 解决办法记录如下: 客户端: ...