misc
一系列的流量分析,得到的附件去010查看得知,这是一个压缩包
所以更改文件名,后缀是.zip的,就可以解压缩文件了
解压缩得到流量包
1
我们需要的是流量包的信息,那么就需要照找到哪里看
在菜单栏的<统计>,选择<捕获文件属性>查看该流量包的详细信息
在信息中看到时间,需要的是秒数,那么就计算
2
同样是在那个信息中查看,
3
找受害者的ip,那么前面两道的那个页面的信息就无用了。ip我们得先看看什么协议,查看一下http协议
仅有两个不同的ip,那么我们都试一下就可以了
法2
但是其实我们不需要去试,通过一些有显示状态码的去看就能知道
那些状态码是被访问的返回给访问的,那么这里的source就是该题的被攻击者的ip了
4
操作系统,含在流量包的server这条信息中,所以我们就搜索server
5
所以就是nmap工具
6
7
这里找的是登录点,我们试试搜搜admin,因为这是常见的用户名(虽然不确定会不会有用户名的输入),这次很有幸,搜到了并且在同一条信息中我们看到了第8的答案
8
法2
搜索password,但是需要扫描到很多条才能到答案
web
ez_rce
开启环境,看到php代码大致就是:post传参a,b,get传参num;num需要等于123456,但是又不能是数字;a,b的值不等,但是a,b的md5加密后的值强比较相等。经过如上两个绕过才会输出successful。那么就传入参数
绕过成功,然后我们用php伪协议获得
f11111ag.php的源码,并且是post传入参数file
base64解码
得到源码,过滤成功就直接访问这个php文件进行下一层的操作
<?php
error_reporting(0);
function no($txt) {
if(!preg_match("/cat|more|less|head|tac|tail|nl|od|vim|uniq|system|exec|printf|passthru|proc_open|shell_exec|eval|popen|f/i", $txt)) {
return $txt;
} else {
die("what's up");
}
}
$e = $_POST['e'];
if (isset($_GET['m']) && isset($_GET['n']) && isset($_POST['e'])) {
$param1 = no($_GET['m']);
$param2 = no($_GET['n']);
if (function_exists($e)) {
call_user_func($e, $param1, $param2);
} else {
die("Function not allowed.");
}
} else {
echo "nonono";
}
?>
根据题目提示“写一句话木马”,先简单解析一下源码:
一个no函数,定义了一堆黑名单;需要传入post参数e,get参数m,n;一个call_user_func()函数使e成为一个函数,m,n是e这个函数的参数
所以开始进行传参。e传入参数file_put_contents
使用 file_put_contents 函数时,可以指定文件名、要写入的数据以及其他可选标志。例如,向文件写入字符串的基本用法如下:
<?php
$file = 'example.txt';
$data = '这是一些文本';
file_put_contents($file, $data);
?>
如果没有example.txt,那么该段代码的作用就是写了一句话给参数data,将文件名给参数file。最后我们得到一个文件名为example.txt、文件内容为‘这是一些文本’的文件。
然后m传入自己想要的文件名,n传入一句话木马(注意参数m,n中不能含有黑名单的内容。传入成功,然后进行连接
直接查看根目录,ls /
看到了一个flag的形式的文件,cat它
ez_upload
我们首先看到了灯泡,点亮后可以上传随便上传一个一句话木马有弹窗
前端禁用js,
再上传没了弹窗,但是显示bad
然后试试其他文件,最后尝试出phtml可以
蚁剑连接成功
找到flag文件
得到flag
ez_ssrf
从一文中了解SSRF的各种绕过姿势及攻击思路_ssrf绕过-优快云博客
开启环境,看源码
<?php
highlight_file(__FILE__);
//flag在/flag路由中
if (isset($_GET['url'])){
$url = $_GET['url'];
if (strpos($url, 'http://127.0.0.1') !== 0){
echo json_encode(["error" => "Only http://127.0.0.1 URLs are allowed"]);
exit;
}
$host = parse_url($url, PHP_URL_HOST);
$ip = gethostbyname($host);
$forbidden_ips = ['127.0.0.1', '::1'];
if (in_array($ip, $forbidden_ips)){
echo json_encode(["error" => "Access to localhost or 127.0.0.1 is forbidden"]);
exit;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'curl/7.68.0');
$response = curl_exec($ch);
if (curl_errno($ch)){
echo json_encode(["error" => curl_error($ch)]);
} else {
echo $response;
}
curl_close($ch);
} else {
echo json_encode(["error" => "Please provide a 'url' parameter"]);
}
?>
大致分析:get传参传入url,如果没有这个参数就会返回“error”“Please provide a 'url' parameter”
传入的url参数如果不是http://127.0.0.1开头,就会显示“error” "Only http://127.0.0.1 URLs are allowed"
然后识别端口,如果是127.0.0.1或者::1(ipv6的本地地址)就显示“error”"Access to localhost or 127.0.0.1 is forbidden"
直接访问flag,是不能行
用@分隔开,这里可以看到我们是到达了127.0.0.1,所以这样能行但是仍然是不能直接访问的
但是在linux中0.0.0.0也表示127.0.0.1所以我们吧@后的更改