说明一下
打过了华中分区赛的AWD后就真的想写一片关于AWD的文章了
因为防御工程对AWD来说真的很重要,不仅能防御一些攻击,并且还能为web手提供流量来对其他队伍进行攻击,所以这里是分配了两个人来做,分为1
和2
,因为web手对这方面更加熟悉,所以如果时间紧的话web手也是能来做一下防御工程的
另外这里面涉及的密码都是团队密码,密码也与其他团队账号不相干,还请不要尝试登录什么的
再者就是里面涉及到的工具在某hub上都能找到资源,搜索关键词即可
先说明一下密码还是统一一下比较好,免得出现到处找密码的情况
xuantian2@321
备份任务
1:网站源码备份
先把网站备份再拖备份文件,这样下得快一些,这里给出两种方案:
tar -zvcf /var/tmp/web.tar.gz /var/www/html
tar -zvcf /tmp/web.tar.gz /var/www/html
第一个是怕别人再tmp目录下直接找到源码,所以备份到了另一个tmp目录下,酌情选择一个就行了,记得和队友说一声就行了
另外需要说明一点的是,最好一开始备份一份,然后等上了一些防御后然后再备份一下,不然等下恢复网站后什么防御都没有就白等着挨打
另外下面是网站的解压的命令,发现被删了,立马先恢复网站源码,再去找是否有木马文件遗留了下来,对应去删就行了
tar -zxvf /var/tmp/web.tar.gz -C / # 对应第一个
tar -zxvf /tmp/web.tar.gz -C / # 对应第二个
2:数据库备份
被连sql或者直接连shell删除数据库的可能性还是有的,所以还是需要备份一下sql数据库
mysqldump -u[数据库用户] -pxuantian2@321 [数据库名]>[备份文件名].sql
#这里的密码如果没改就用之前那个
如:
mysqldump -ucms -pxuantian2@321 cms > cms.sql
恢复:
直接使用命令
mysql -u[数据库用户] -pxuantian2@321 [需要恢复的数据库] < [备份的数据库]
如:
mysql -uroot -pxuantian2@321 cms < cms.sql
需要在数据库里面创建一个同名数据库
mysql -uroot -pxuantian2@321
mysql -uroot -proot
create DATABASE opensns;
exit
然后才能恢复
mysql -uroot -pxuantian2@321 opensns < opensns.sql
或者进入数据库后
source opensns.sql;
修改密码
后台密码交给web手去修改,另外需要去扫一下存活和找到web后台地址以及后台登录密码
1:SSH登录密码
因为不知道一开始是不是弱口令,而且不知道初始密码是否都是一样的,所以最好还是改一下吧
passwd
xuantian2@321
另外这里把md5值也放上来可能改数据库的时候会用到
daaac096cfc16ba28dc12e53ba190163
2:数据库密码
工作量可能会有点大,但熟悉的话就还好,另外需要先审计完代码之后才能进行数据库密码的修改
另外最需要注意的一点是:
再修改完数据库的密码后第一时间搜索原密码在对应的位置进行修改,不然网站可能会寄,一定要改全
数据库这里分为两种情况:
1、如果数据库能连的上数据库的话
连接数据库:
mysql -u[数据库用户] -p[数据库密码]
如:
mysql -uroot -proot
改密码:
update mysql.user set password=password('xuantian2@321') where user='cms';
刷新配置:(有时候没必要,检查一下数据库密码是否修改成功,没成功记得重新改一下并刷新下配置)
flush privilege;
另外,可能会有匿名用户,还是需要防护一下的,可以直接删除匿名用户,不放心的话可以去源码里面搜一下空字符串("")如果发现改处有sql的使用迹象就应该不能删除
delete from mysql.user where user='';
2、如果数据库连不上的话
mysqladmin -uroot -proot password xuantian2@321
mysqladmin -uroot -pxuantian2@321 password root
mysqladmin -ucms -pcms password xuantian2@321
源码审计
1、2:
因为一切都是根据源码来进行的,所以都得进行源码审计,审计内容最主要的为数据库密码
审到数据库密码之后就交给2去做数据库相关方面的操作了,记得在连上数据库之后把后门的用户和密码都告诉web手,另外也需要记一下这些用户和密码,以便于后面的删库操作
然后1就可以用D盾,河马等木马审计软件来查一下是否有明显后门,并删除,另外需要告诉web手这个后门的利用点,让web手知道这里可以打
上waf
这个因为比赛官方赛制的原因大概是不能使用的,但是还是有能用的地方的
1:watchbird
因为1的操作比较简单,所以交给1来做吧
phpwaf的话还是上这个比较好
把两个文件拖到网站目录里面,然后执行上waf的操作
先进行安装:
php ./watchbird.php --install /var/www/html
php ./watchbird/watchbird.php --install /var/www/html # 如果你拖的是文件夹就用这个
然后访问网站:
http://xx.xx.xx.xx/?watchbird=ui
如:
http://192-168-1-27.pvp2493.bugku.cn/?watchbird=ui
记得密码记得设置为xuantian2@321,登录好之后记得把网站发给队友一份
另外需要注意
如果不能用的话,可以把面板里面的防御看情况关掉一些(最坏的情况是全关)
然后把watchbird充当为一个流量监控的工具
如果能上waf,上面这个又没有上好的话,可以尝试使用下面这个awf,杀毒能力比较强,但是check八成是过不了,属于是下策:
把 phpwaf 拖到服务器中去,在重要文件中包含一下
<?php include_once("/var/www/html/ip_heimd.php"); ?>
<?php include_once("/var/www/html/phpwaf/awf.php"); ?>
或
include_once("/var/www/html/ip_heimd.php");
include_once("/var/www/html/phpwaf/awf.php");
如果胆子大的话可以尝试批量包含(但个人不建议,很容易寄):
find . -path ./phpwaf -prune -o -type f -name "*.php" -print | xargs sed -i "s/<?php/<?php include_once(\"\/var\/www\/html\/phpwaf\/ip_heimd.php\"); ?> <?php include_once(\"\/var\/www\/html\/phpwaf\/awf.php\"); ?> <?php/g"
批量下waf
find . -path ./phpwaf -prune -o -type f -name "*.php" -print | xargs sed -i "s/<?php include_once(\"\/var\/www\/html\/phpwaf\/ip_heimd.php\"); ?> <?php include_once(\"\/var\/www\/html\/phpwaf\/awf.php\"); ?> <?php/<?php/g"
单独批量包含黑名单(也不建议批量包含,把重要文件都包含一遍就行了,后期如果有时间没事干的话也可以补,另外这个效果不是特别好,似乎禁用不全)
find . -path ./phpwaf -prune -o -type f -name "*.php" -print | xargs sed -i "s/<?php/<?php include_once(\"\/var\/www\/html\/phpwaf\/ip_heimd.php\"); ?> <?php/g"
文件监控
2:jiank_py2_z
因为有check机制的原因,网站可能会检查文件上传功能是否可用,所以不建议使用这个,但如果能用的话还是放上去吧
把二进制文件jiank_py2_z
放到html的上一个目录,然后给与这个文件执行权限后执行:
chmod 777 jiank_py2_z
./jiank_py2_z
脚本监控位置:/var/www/html
备份文件位置位置:/tmp
这一步是随后执行的,因为如果执行了就文件就固定了,删不了也加不了文件
队友进行文件的上传、删除、修改的时候记得说一下
流量监控
这个属于是拓展吧,如果前面的watchbird流量监控觉得不好用的话可以使用这个,算是目前比较好用的了吧,用weblogger,另外,不要批量包含,也不要上太多地方,因为有可能会寄,用过一次不是特别好用
把文件拖进靶机,然后给与文件权限:
chmod -R 777 weblogger/
然后访问下面这个网站来安装文件监控:
http://10.12.146.65/weblogger/install.php
如:
http://10.12.146.65/weblogger/install.php
会出现两个地址
然后再index.php里面包含提示出来的地址
require_once('/tmp/1119df63496d8557db84c8b96df9bc9c/weblogpro.php')
<?php require_once('/tmp/1119df63496d8557db84c8b96df9bc9c/weblogpro.php')?>
最后再访问下面那个地址就行了
http://192-168-1-62.pvp2508.bugku.cn/5e798dc866de0815eb454ecbc94d1940/e1c4f1deba51528cfdf5d452cc91f9f8/managelog.php
然后再来一个下策:
log-record.php
log-record.php拖到根目录,然后在重要文件中包含
<?php include('/var/www/html/log-record.php'); ?>
这里的话网站防护基本操作就做完了,后面的操作需要时刻关注
Web防护
前面做的只是简单的删除后门操作,后面用工具或者被web手告知漏洞点之后需要对对应文件进行修改
另外curl命令也需要进行一下修改(似乎有个flag是跟curl命令有关的)
alias curl='echo fuckoff' 权限要求较低
chmod -x curl 权限要求较高
/usr/bin curl路径
关闭shell连接
输入下面这条命令可以看到已经登录进来的账号
who
会显示有哪个ip登录到了服务器,如果本身的ip不是这个的话就一定要把它踢掉
pkill -kill -t pts/4
踢掉之后记得立马改密码
查看进程
ls -la
删进程
ps -aux # 查看所有进程
或者
ps auxww
后面可跟过滤看是否有一些奇怪的进程
ps -aux | grep www
找到了可疑进程的话可疑将其进程id放在下面命令中去执行:
kill -9 [pid]
网站守护
查看新增文件,如果发现有不认识的文件,或者有不对劲的文件,立马删除
find /var/www/html -cmin -5
这里只监控了html文件夹的,想监控其他文件夹的话可以进入到当前文件夹然后
find ./ -cmin -20
删除不死马
在删除的同时创建一个和不死马一样名称的文件夹,但是这个不是很稳定
rm xxx.php | mkdir xxx.php
rm .include.php | mkdir .include.php
这一个要看不死马的强度,有可能不死马的生成速度会大于删除的速度,这样还是删不了只能算一个下策
vim killshell.sh
内容:
#!/bin/bash
while true
do
rm -rf xxx.php
done
chmod 777 killshell.sh
在后台不断的运行脚本
nohup ./killshell.sh &
还有一个就是执行另一段程序竞争写入,无效内容到不死马文件中
命名为kill.php,放到根目录,然后网站访问这个地址来激活
<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = '.index.php';
$code = 'Hello, world!'
while(true) {
file_put_contents($file, $code);
usleep(500);
}
?>
一定要注意usleep()的时间必须比不死马生成实践小,可以大概估摸一下,也不要太小,可能会导致内存爆满而引起的宕机
web网站删除不死马
因为是在网站里面上传的文件,所以权限是www-data的权限而不是本机用户的权限,这个时候就要自己也写一个一句话木马来删这个了,因为本机用户的权限不允许删掉
<?php @eval($_POST["xuantian2@321"]); ?>
xuantian2@321=system("rm -rf ./include/.index.php"); // 这里后面是后门的位置
xuantian2@321=system("rm -rf ./include/.index.php | mkdir .index.php");
日志审计
所有流量有新的就记录一下,和web手说,然后不止自己上的waf或流量监控中有日志可以审计,下面这两个也有日志,这个就是原始的日志,但有可能不能访问
/var/log/apache2/
/usr/local/apache2/logs
这次华中赛区分区赛就是因为我防御工程没有做到位,导致成绩不理想,所以防御真的很重要,一定不能马虎
例行公事的话这次就算了吧,期末没时间了,下一门考软工,还有20分钟开考,先跑了(溜)