渗透学习之数据库注入原理与方法
0x01 数据库注入原理
SQL注入可能是目前互联网上存在的最丰富的编程缺陷。 这是未经授权的人可以访问各种关键和私人数据的漏洞。 SQL注入不是Web或数据库服务器中的缺陷,而是由于编程实践较差且缺乏经验而导致的。 它是从远程位置执行的最致命和最容易的攻击之一。由用户输入的参数会被PHP/JSP语言等认为是代码去翻译并执行。
在SQL注入中,我们使用各种命令与DB服务器交互,并从中获取各种数据。在本文章中,我会记录 如何访问机密数据。
0x02 mysql 注入流程
判断是否存在注入点
- AND 验证注入点
输入MYSQL ‘AND 1=1’ 或者 ‘AND 1=0’ 语句后界面是否产生错误的显示信息,如果产生了错误的显示信息,那么这里八九不离十就存在数据库注入点。
- 闭合验证
在数据库中,很多语句都存在闭合规则,如 select * from table_user where user_name=‘admin’ , updata table_user set user_name=‘myname’,password=‘123456’ where user_name=‘admin’ ,这里都存在大量的闭合规则,我们可以验证一下编程者是否在这里做了过滤操作。输入参数 ’ 或者 " 看界面是否产生错误的显示信息。
- <srcipt>alert(1)</srcipt> 验证
一般后台处理编程语言都能解析这条语句,这条语句的作用就是弹一个显示’1’的窗口。如果这里操作正常,那么证明了数据库对用户输入数据当作了正常的字符串处理
- 匹配字段 ‘order by’
我们可以利用 order by 语句来验证字段数量, 假如用户输入 123,后台执行代码 select * from table_user where user_name=‘123’,那么我们输入 ’ OR 1=1 order by 1/2/3 来验证界面是否显示正常来确认该表返回的字段数
- 利用内置函数暴数据库信息
在mysql5以上的版本,我们能通过mysql内置函数来暴库,具体代码如下:
// version() >> 返回服务器数据库版本号
// database() >> 返回当前操作的库名
// user() >> 返回当前登录的用户信息
select version(),database(),user(