为您找到资讯结果约 27
(开个玩笑) 如果说大家对CTF有了解的话,其实应该知道CTF是一个什么类型的比赛,这个比赛涉及的范围和影响有多大,自然是不言而喻的。
白名单和上一节讲的黑名单的区别在哪里? 黑名单是未经许可非法用户禁止入内,我禁止某些人入内,大部分人是可以进去的。白名单是未经允许禁止入内,只有允许的人才能进入,对应的只有合法文件才能上传。 解析的时候我们为什么要文件合法?因为中间件能够解析,只允许不能被解释的文件且只符合当前业务的文件才能够上传。比如头像png、jpg、gif,不需要其他的文件名,做好限制极大地杜绝安全问题。 从规则上来讲白名单是比较难突破的,除非类似%00截断,而且这种截断也要看具体代码逻辑才能够实现,从代码层面去做突破略难。简单的题目有配合Apache的解析漏洞以及其他漏洞。像多层压缩包嵌套、或者本身有缺陷产生的文件上传问题等等后面都会分享,本次内容为配合Apache的解析缺陷。 我使用的环境一般是放在Linux下Apache用的比较多,包括nginx和IIS 都存在这种解析漏洞的。所以白名单突破需要配合的就是中间件的缺陷。 具体环境操作如下: 上传.php禁用js,非法文件禁止上传。开启burp suite 那么去传一个 jpg文件, 提示非法文件禁止上传。 服务端校验——文件内容头校验 内容头校验涉及到一些函数,例如对图像处理的函数。比如getimagesize获取图像大小。 如果不是指定的图像、有效的图像,就会产生一条false,这个函数可以判断这个文件是不是一个图片。 新建一个文件: 很多文件有对应的文件格式: 这些函数是通过文件头来做判断的。如果可以把这个文件头给伪造出来,基本可以对它实现欺骗成功绕过。 竞争上传 竞争上传是逻辑上的错误文件上传成功后,正常逻辑是后端代码一直在运行检测,合法就可以保存,不合法直接删掉。 在远程服务器上写入a.php 过5秒钟就删掉,会形成产生一个临时文件的,趁临时文件没有被删掉赶紧访问。这种题目对服务器的性能影响比较大。 举栗子 上传php 文件,进行访问,显示查不到。 我们可以考虑让刚上传的文件去生成一个新的文件产生新的需要。  第一个是文件名,下面是文件的内容,可以content写入文件。
常见文件包含情况以及zip、phar相关问题。 Include  stdio.h Import  request 很多网站的admin(管理员)入口和user(用户)入口是分开的,登陆过程所调用的函数可能都是同一个函数,最后操作的表不同。如果调用的是同一个函数,网站一般分开两个文件存储:admin目录和user目录。在不同文件中,如果没有使用“文件包含”这个操作,同一个函数就会出现在两个文件中增加重复工作的工作量。但是如果使用“文件包含”操作,直接调用函数就可以了。 如果不用文件包含需要重复写,所有的内容都写在一个文件里面,文件会非常大,维护起来也非常难。 文件包含产生了之后,相应的漏洞也是在特定几个条件下才会产生。为了代码灵活将包含的文件设置成一个变量进行动态调用,但却导致用户可以去恶意调用,造成了文件包含漏洞。 比如说index.php?page=aaa&func=bbb调用.php?page=aaa中的func=bbb函数。   相关函数 不一定要去包含这种php文件,只要里头包含完整的块就可以。我们可以控制被包含文件的内容,比如插入一段php代码, 或者压缩包,压缩包需要配合一些伪协议。 本地文件包含 具体场景——上传的可控文件 验证一下包含的效果: 远程文件包含 ?在请求过程中作为一个参数传递给aaa.com/1.txt?a.php,1.txt只要请求的东西不被这个参数影响,后面传什么参数进去,其实都没有关系。 如果是远程文件包含就可以做绕过,但你要注意到远程包含的时候,如果说你要去包含远程文件,http中支持的协议就是http https ftp这三个,问号绕过和之前%00截断的道理是有点类似的。HTTP中文件包含用的最多的还是伪协议,比如说file重点看一下。 具体场景——伪协议 举栗子 up load看起来像一个文件名的前缀: 它就会返回一个目录,这个目录的区包含文件,它支持伪协议,那可以用这个形式去试一下,后面跟上一个井号,这里存在一个编码问题,实际传的就是.php,要把他本来带的这个.php给去掉,再去这样执行,你就会发现它执行成功了,里面的文件换成一个我需要的后门就可以了,打包和部署可以免去大量的麻烦。 配合phar协议来,我们把zip换成phar这样来试试看,发现执行成功。 这就是phar的一个作用,如果说你在一个点上能够上传phar包,但是你又不知道如何去构造phar包,你就可以直接找个压缩包,改了后缀名改成phar上传,再配合phar伪协议就可以了。 创立了一个phpinfor.php,然后把它压缩,压缩之后再改成jpg,上传这个文件后它属于哪种文件类型呢? 还是可以成功的。  
位运算符 我们都知道常规的注入,比如id=100这种类型可以查询出一篇文章,如果把100换成99+1它一样可以查出,因为它会做计算。order_by 去判断列数的时候,如果把id=4换成3+1去执行,出来的结果并没有做计算,所以这个运算效果没有意义。         运算符如何运算呢? 位运算是将每一个值转化成一个二进制字符串。 按位的“and”或“or”,假设2 | 3,转成字符串就是3。     ORDER BY 常规去使用order by的时候它后面会跟一个数字,通过它来判断列数,但实际上后面的参数应该是什么呢? 参数第一个位置必须是列名,可以用数字来代替,代表某一列。但是实际上后面还有还可以带一个可选参数,比如说ASC和DESC,意思是正序还是倒序升序还是降序,后面括号有个N在里头,它其实后面还可以跟好几列。   先根据ID先做排序,如果排完之后存在同面同变量的,它就会根据你设置的第二个参数进行排序了。   思考: 实际操作中如果能够控制代入ASC和 DESC,是不是也可以做一个注入呢?(大家可以思考操作试一下)     order by 与bool型盲注结合     举栗子 这是国外的某个网站上的一道题目,这道题目如果要访问地快可以使用VPN。   可以发现  这里变成了倒序:   为什么返回的顺序是7356呢?   按位或,假设它是3236,那么它的原来结果是1234是。 和2去做一个“或”,结果全部计算之后再做排序。   假设正则表达式是以A字母为开头去和结果进行匹配,会发现正则表达式和它是不匹配的,返回值就是0。它的返回值就是和1进行“或”的结果。   如果换成是字母B开头,它去匹配返回结果是1,按位2“或”拿到就是2的页面。   脚本整理分享给大家:    
具体场景——伪装协议 利用php流 如果要实现文件包含漏洞,前提是非可执行文件,例如网站的源码都是可执行文件,拿php来说,大部分情况下都是.php文件,如果包含就没有意义了,因为直接包含相当于把代码拿来做执行,不可执行代码包进来没有任何反应,所以把文件变成不可执行代码就可以了。 举栗子 执行过程中会发现时间变慢了,接下来它的页面会不停的输出asdf,这样会消耗它的内存,结束之后它的内容就会输出来。 拿到这个页面index.php其实是没有用的,要考虑存在包含,如果能够读源码可能会有一定的作用。 输出一串base64编码,这时候我们已经读到base64文件,给他做个解码,最后就有一串字符串,就是flag的内容。 Php://input 类似于传递文件的作用。 打开空白页面,什么都没有,去看看他的源代码,还是什么都没有,那就去考虑扫后台。扫完之后会发现存在着这么个文件,可以看到一个源代码,我直接把它复制出来,再把它退回去。 我们需要理解这段代码的逻辑, 先去定义变量flag,有值非空,接下来的函数需要注意一下,从数据中变量导到当前符号表,通过这个函数会变成一些变量,相当于把传进去的值变成变量。 具体场景——日志文件 具体场景——系统环境 具体场景——session cookie是放在我们自己这边,session是放在服务器端,session中包含你的一些信息比如用户名密码账号,用户名是非常高的一个关联性。 会发现路径下存在字开头是sess的文件,我们再来看sess里面的文件和它没有关联性。 定义的信息中要首先有内容可以影响到session才能做包含。其次要知道session的路径,默认情况下会存在一个在目录下,可以通过读到的内容来获取路径,或者自己设置也可以。
随着CTF(夺旗)比赛越来越受人们欢迎,以及在这个领域里像Dragon Sector这样的波兰队伍的卓越表现,我认为用一些使它难以被破解和分析的技巧来演示一个简单的CrackMe结构将会很有趣。
另一个函数SUBSTING这个函数其实也是类似的: (在这里我做一个演示,如果大家想看可以到安全牛课堂的视频里看动手操作   CTF从入门到提升   课时3:15分41秒) 我们可以看一下例子:
具体场景——session PHP默认生成的session文件往往存放在/tmp目录下 举栗子 题目内容:看看我的notebooktips; tips:文件包含phpinfo是不是有新的发现   用给到的内容去做题目。 我们可以看一下这道题目,进来之后首页找到url。 如果把php删掉,会发现登录入口不存在,初步推断php是后缀名会自动拼接到URL后面登。 我们注册用户来看一下,线索已经用完了,我们要发掘新的线索新的功能,有管理员账号可以进去看源代码会不会有提示 比如admin账号和密码去爆破,或者注入,扫后台扫备份文件,我们会看到一个phpinfo文件,因为题目中的提示提到了文件包含,它必然是一个非常重要的点,那就需要我们考虑它到底有什么用。 我们可以包含这个文件试一下,按照刚才的文件名后缀发现可以读出文件。 只有访问以上两个目录才能够被读取。 如果file读取文件换成index.php会怎样呢?发现它能够回来然后又跳转到URL。 具体场景——远古魔法 举栗子 get去传一个配置的值,然后去包含下面的一文件名,配合.php为后缀名进行截断,不停的敲点或者点杠。 具体场景——phpinfo 文件上传无论后台有没有接受我传上的文件这个功能它都是会有文件先传上去的这个步骤,文件上传的函数代码逻辑是形成一个临时文件,然后把临时文件移过来。所以我们对php文件去做上传操作都会产生临时文件,后台如果没有这些函数,临时文件生成后又会被删掉,如果过手速够快,是有办法能够访问到临时文件的,用文件包含的操作去包含它,会触发临时文件中的代码,能拿到临时文件就可以getshell,但是难点在于临时文件的文件名我们不知道,也不知道在哪个路径下。 演示: