客户喊帮忙弄一个防守手册,故有了这篇文章,后续考虑继续完善Attack。
注意事项
1、认真阅读比赛手册!!!
2、查看SSH的用户名和密码是否相同,如果是弱口令一般情况下都相同,如果很复杂那就不同。
3、检查网站登录后是否有FLAG,如果有可以让队友写好相应脚本。
4、修改相关密码(SSH、数据库、后台(最好讲登录功能破坏))
5、⭐️⭐️⭐️最关键的是!!!代码层的漏洞修复⭐️⭐️⭐️
6、大胆去问!有些时候靶场无故扣分或者出现什么问题一定要及时向旁边的工作人员提出疑问,例如判断你宕机扣分,也真的宕机了,你可以快速恢复然后找来巡视的人员跟他狡辩。然后看比赛扣分情况,有些时候被攻击一次才扣十分,然后宕机恢复扣一次200分,不要随意喊工作人员给你恢复,这就很有必要去偷奸耍滑了。
比赛除了比技术也比手段,例如某些情况下,能联网请外援也不是不可以,靶机被叛宕机偷奸耍滑也是一种技巧。某种意义上说,这些都是线下赛不成文的操作手段。
密码相关
修改密码环节尤为关键弱口令总的来说又有三部分:SSH、WEB、DATABASE,
Ssh:可以通过msf中的auxiliary/scanner/ssh/ssh_login模块进行批量自动化利用。
Web:一般情况下web都是弱口令,如果不是弱口令密码基本也一致,部分会出现成功登录后台,后台就有Flag的情况。
Database:要看数据库支不支持远程连接,如果支持那弱口令也是很有用的。
修改SSH弱口令
输入passwd,然后输入新密码即可,输入新密码的时候是不可见的:
1 | root@VM-0-7-ubuntu:~# passwd |
修改Web后台弱口令
直接登录网站后台修改即可,后台密码基本是弱口令,admin或者123456啥的,即使不是也可以通过数据库进行查看。基本上大家的后台密码都是一样的。
修改数据库弱口令
方法1:
进入mysql了以后执行如下语句:
1 | use mysql; |
方法2:
使用mysqladmin,找到mysqladmin文件执行如下语句:
1 | mysqladmin -u 用户名 -p 旧密码 password 新密码 |
备份
一般web目录为/var/www/html
如果不是的话,查看nginx/apache的配置文件
/etc/apache2/apache2.conf
/etc/apache2/sites-available/000-default.conf
/etc/nginx/conf.d/nginx.conf
/etc/nginx/nginx.conf
web源码备份
可以通过xshell连接进入机器,然后执行如下命令打包网站源码
1 | tar czvf backup.tar.gz /var/www/html/* |
备份了以后通过xshell进行下载
备份下来了以后可以通过使用D顿进行扫描网站源码快速发现网站中存在的webshell后门。#扫描标红的可以直接把标红的代码删了,如下图的forward_static_call_array,直接找到该函数,删掉该函数即可。如文件名明显无意义可直接将文件删除。

也可以通过使用如下命令快速查找:
1 | find /var/www/html/ -name "*.php" |xargs egrep 'assert|phpspy|system|eval|\(gunerpress|\(base64_decoolcode|spider_bc|shell_exec|passthru|\(\$\_\POST\[|eval \(str_rot13|\.chr\(|\$\{\"\_P|eval\(\$\_R|file_put_contents\(\.\*\$\_|base64_decode' |
找到如下

类似的基本为后门,可以将该函数进行删除或者修改为其他随意字符串导致功能无法进行。
如果是x.php这种看着就很没意义的文件可以直接删除,删除命令:
1 | rm -f x.php |
数据库备份
备份指定库:
1 | mysqldump -u账号 -p密码 --socket=/var/run/mysqld/mysqld.sock --databases 要备份的数据库名称 > 保存的文件名称.sql |
备份全库:
1 | mysqldump -uroot -proot --all-databases > XXX.sql |
恢复:
1 | create database db3; |
代码层漏洞修复
官方后门
这个基本都会遇到
方法一:D盾查杀
D盾下载:链接: https://pan.baidu.com/s/1VMUA-8Ekvbitot9YOZM1fw 密码: atcr
方法二:命令行查杀
1 | find /var/www/html/ -name "*.php" |xargs egrep 'assert|phpspy|system|eval|\(gunerpress|\(base64_decoolcode|spider_bc|shell_exec|passthru|\(\$\_\POST\[|eval \(str_rot13|\.chr\(|\$\{\"\_P|eval\(\$\_R|file_put_contents\(\.\*\$\_|base64_decode' |
方法三:查看源代码中是否有可疑代码
举个例子:
如下图是使用D盾扫描出来的一个告警且级别为3(有些时候D盾是无法扫出来,但是又确实是有那么一段非常诡异的代码)

打开该文件(conn.php)以后代码如下所示:

拉到最底部,发现最底部有一段非常诡异的代码,这种代码基本是混淆的PHP后门,直接删除即可。但是不要删除整个conn.php,因为这个conn.php是连接数据库的,删了就会导致网站无法正常连接数据库可能会影响服务器,导致被检查的机器认为你服务器宕机了。所以只需要删除混淆的代码即可。当然如果有能力进行恢复那么就恢复,如果没有删除即可。
PHP反序列化漏洞
根据初赛来看网信杯出题方很喜欢考反序列化,同样可以执行如下命令:
1 | find /var/www/html/ -name "*.php" |xargs egrep 'unserialize' |
主要是查找unserialize这个反序列化函数,找到也是同样的破坏该函数,删除或修改即可。
如:
1 |
|
SQL注入
一般的SQL注入代码都大概跟下面的类似:
1 |
|
着重点在5行,基本SQL注入都跟上面代码内的大同小异
一般可以将第五行的变量删除或修改
如:
1 | $sql="SELECT * FROM users WHERE id='123' LIMIT 0,1"; |
将变量$id改写成123,这样就无法进行传参进行SQL注入。
文件上传漏洞
关于文件上传基本都会使用到move_uploaded_file这个函数,可以使用如下命令找到存在文件上传功能的地方进行破坏。
1 | find /var/www/html/ -name "*.php" |xargs egrep 'move_uploaded_file' |
找到以后直接将这个函数进行修改,比如随便改个”xxxxx“,即使存在漏洞,该函数已经不生效无法进行上传。故漏洞间接修复。
文件包含漏洞
同样的执行如下命令
1 | find /var/www/html/ -name "*.php" |xargs egrep 'include \$\_\POST|include \$\_\GET|' |
这样搜索出来可能会很多
着重关注诸如:
1 | include $_GET['file'] |
或
1 | include $_POST['file'] |
的代码,file是参数,所以是一个可控的变量,主要是要看有没有用过滤函数,如果用了过滤函数(例如:include filter($_GET[‘file’]))那就不用管。
当然如果说就是搜出来的那样,修补的方法也是可以将参数进行修改,例如原本是file参数,然后你修改成abc参数然后加@符号进行屏蔽报错,如下所示:
1 | include @$_POST['abc'] |
即使存在漏洞,他也不知道你的漏洞参数是什么。
脚本系列
文件监控脚本
1 | # -*- coding: utf-8 -*- |
WAF&日志记录
1 |
|
针对不死马
方法一:一直删除并且建同名文件夹
1 | while :; do rm -f .shell.php & mkdir .shell.php; done |
方法二:杀进程,需要www-data权限
1 | while :; do kill -9 `ps -auxf |grep .shell.php |grep www-data |awk '{print $2}'`; done |
方法三:竞争写入
1 |
|
最后
攻击的收益大于防守,但往往认真防守,苟到最后的队伍也能取不错的名次。