web AWD 攻與防
CTF線下賽主要考察代碼審計能力及運維能力,代碼審計發現漏洞,python寫利用漏洞,運維發現可疑攻擊目標,異常流量,異常權限,重要業務備份與還原。用運維的知識加固系統與業務。當被人攻擊以后,不要慌。分出一個人查流量,另一個人繼續審計代碼,挖掘漏洞才是最重要的攻擊源。實在發現不了漏洞時,改變策略,把精力重心移到流量上來。
web的漏洞利用
你已經通過代碼審計定位到了這個漏洞,要去利用它。
一般都是通過特定的URL去觸發這個漏洞。所有的web漏洞都是這樣子的。
這個時候,怎么用python去寫呢?
比如挖出了一個web利用攝像頭的漏洞:發一個特定的URL,通過URL的返回,在它的cookies里面能夠查到它的一個明文賬號密碼。
構造這個特殊的URL
怎么知道這個特殊的URL是什么呢?這需要在挖漏洞里下功夫了,這里是一個文件包含漏洞,這個地址把賬號密碼傳到一個文件里面做認證,把認證的結果又返回給這個URL。
攝像頭頁面是這個公司寫的,而做密碼驗證的是另一個公司寫的。攝像頭公司的人以為把賬號密碼發給另一個公司就可以做驗證了,而另一個公司不僅把密碼驗證了,還把真正的密碼給返回給攝像頭的公司。在兩個公司的交互過程中,漏洞就發生了。我們知道這個大前提,再配合挖掘漏洞的知識,這個特殊的URL就被我們構造出來了。
大部分都是怎么構造一個request請求包,解析返回包。
細節代碼需要自己去收集攻擊框架。比如,全場開火腳本:exploit_all.py
token(自己隊伍的標識):你打了別人,拿到了flag,主辦方怎么知道是誰提交的flag呢?把flag和token做一個運算。
全場攻擊的host和port從哪里來?
讀取targets文件來的,文件里面的格式為 IP:端口
比賽環境
linux運維
運維流程-SSH
如果主辦方沒有給私鑰,盡量嘗試配公私鑰登錄
禁止密碼登錄并配置公私鑰登錄(沒絕對把握,僅把密碼改了就可以,不用配置禁止密碼登錄,修改密碼用passwd 用戶名)
密鑰登錄
編輯sshd_config文件
vi /etc/ssh/sshd_config
禁用密碼驗證
PasswordAuthentication no
啟用密鑰驗證
RSAAuthentication yes
PubkeyAuthentication yes
指定公鑰數據庫文件
AuthorsizedKeysFile .ssh/authorized_keys
也可以這樣改
重啟SSH服務前建議多保留一個會話以防不測。
linux很難出現遠程溢出漏洞,很少有人掌握這個漏洞,非常少見。能進來的大多數要靠暴力猜解。
因為我們現實中,大多數使用一個SSH管理工具(SecureCRT)的一個小軟件來連接linux業務環境進行工作的。
如果控了他windows機器,通過對windows攻擊(如木馬)就可以拿到linux業務管理環境的密碼。
我們如何防止木馬拿到密碼呢?這個時候就可以配公私鑰,用私鑰去登錄。你監聽吧,咱不輸入密碼了。嘿嘿。
主機右鍵--去掉其他鉤,留下私鑰認證--加載私鑰文件。這種登錄方式是非常安全的。如果你使用這種方式登錄,別人不可能拿到你的私鑰的。私鑰是與本地綁定的,送給他都沒關系,不要怕。
細節可以直接搜索: SSH公鑰登錄
私鑰長什么樣子的呢?來,親。你慢慢去猜解密碼吧。
公鑰批量寫入
nmap掃描22
hydra SSH爆破 -user 用戶名文件 密碼文件 -p
字典生成工具 crunch
web源碼備份
crontab -l 查看計劃任務 crontab -e 編輯
ctl+o保存 ctl+x退出
人家給你加一個網馬,加一個哈希值,你知道有網馬但是找不到。
1.初始化 2.對比,哪些文件是新增的
數據庫備份
虛擬機的快照是直接把內存 dump下來了
不要把3306留在網上,不要遠程去維護,關掉遠程維護的配置
不管用VPN也要其他的也罷,只要你的數據庫留在網上,端口爆出來。VPN只是傳輸安全,但是人家用你的密碼去登陸也是一樣的。你知道VPN相對安全,但你不知道自己的電腦是否有問題。另外,不管是VPN還是什么,它們都會被別人遠程爆破掉。
網線拔掉,電源關掉的電腦最安全,其他的地方你不能這樣做,但是數據庫你可以這樣做,沒有任何遠程管理的需求。
數據庫降權
你的數據庫沒有開遠程,但是別人通過其他端口進入了你的系統,把你的數據庫給爆出來了,而你壓根就用不上那么高的權限,運行數據庫的時候,難道要給它一個root權限嗎?這個時候就要降權,把賬號也綁定到只能本地登陸。這個時候,別人怎么樣都無法通過遠程來訪問你的數據庫了。
這里的dog是在調戲別人,別人在攻擊你的數據庫時會掃描數據庫的名字。他看見你的數據庫名字是dog,密碼是123456,也進不來,只能本地登陸。
本地:不是說到機房,是不把數據庫的端口給外面提供。在虛擬機可以登陸數據庫,而母體機無法登陸數據庫。通過SSH連到虛擬機里面,再去登陸數據庫。也算是本地登陸。假設綁定的為linux登陸數據庫,那么我們用SSH遠程連接linux就可以了。而連接linux的又是公私鑰的方式,還是本地綁定的。你種木馬也沒用,爆破更不可能。完美。
linux服務器權限管理
權限配置
對于非必須可寫的目錄
權限設置755,擁有者設為非www-data用戶;從而防止文件被篡改/刪除
對于必須可寫的目錄
根據服務器類型,上一個.htaccess,或者修改nginx的目錄配置文件,去除此路徑的腳本執行權限
防御腳本 都是用python寫的 python做安全運維很有優勢
waf
文件監控 watch python 腳本
監控到別人上傳的Helloworld文件
我們發現這時,如果把監控記錄重定向文件里面,就變成監控日志了。保護好這個監控日志。
通過一句話給自己一個apache的權限,因為別人在攻克你服務器的時候,拿到的權限也是apache的權限,自己把自己的程序殺掉。如果你用比較低的權限去運維,你連別人運行的木馬都殺不掉。
這也是為什么,你用的windows系統中,刪除不了文件的原因,你的權限不夠。最高的權限是system權限,不是admin。
網絡拓撲掃描
如果你是防御的,你要查看一下內網中其他機器的防御機制;如果你是做攻擊的,你要查看一下其他機器的薄弱點。
如果你隊友的機器很薄弱,可以屏蔽了他,別人從他那里下手無法攻擊到你這邊。攻擊者會尋找最薄弱的地方,當成一個跳板機來對你下手。
為什么外網端口強,內網就不強了呢?有些端口會開放到外網上,有些端口會開放到內網中。如內部的FTP,SMB等。外部端口一般漏洞少,內部端口往往存在大量漏洞。