Sql注入获取管理员账号密码

一、前言

  • SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作
  • SQL注入漏洞属于高危漏洞,用asp、.net、php、java、等程序语言编写的网站,都存在着sql注入的风险,一旦成功注入,轻者被暴库,整个网站被控制,重者服务器被攻陷,甚至突破到内网。
  • 互联网安全法规定,不经授权对其它网站进行漏洞扫描,渗透都是违法行为,所以我们的技术学习、验证都是自己搭建的目标靶机,或者使用一些安全网站的在线靶场(专门提供给学习渗透人员使用的模拟网站)

二、相关工具准备

  • sqlmap,sql注入常用的工具
  • 在线靶场,用于sql注入测试的在线网站,我们这次使用 http://59.63.200.79:8003/

三、流程方案简述

  • 检测网站是否存在sql注入漏洞,我们需要找到一个注入点,一般都是数据提交的地方,或者新闻资讯列表详情页,类似下面这种url后面接参数id的,而且参数id是动态变化的。
 http://www.xx.com/xxx.php?id=1
  • 如果存在注入漏洞,猜解数据库
  • 根据数据库,继续猜解表
  • 选择某个表(一般选择可能存储账号密码的表,比如user、admin、member等),继续猜解字段
  • 猜解关键字段(比如 username,password)的值,获取到用户名和密码

四、具体测试过程

1. 打开靶场网站,寻找注入点

  • 浏览器打开靶场网站,很容易就找到了注入点(为了方便测试,这个注入点也太明显了吧)


    image.png
http://59.63.200.79:8003/?id=1

  • 执行下面的命令,检测是否存在sql注入漏洞
sqlmap -u "http://59.63.200.79:8003/?id=1"
image.png
  • 的确是存在sql注入漏洞的,这个id参数存在布尔值注入漏洞,和延时注入漏洞,使用的是mysql数据库

2. 猜解数据库

  • 执行下面的命令,--dbs参数,表示猜解所有的数据库
sqlmap -u "http://59.63.200.79:8003/?id=1" --dbs
image.png
  • 如图所示,一共发现了三个数据库,根据网站的内容很容可以猜到我们的目标数据库是 maoshe

3. 继续猜解表

  • 执行下面的命令,--tables参数,表示猜解所有的表,-D指定数据库,注意大小写
sqlmap -u "http://59.63.200.79:8003/?id=1" --tables -D maoshe
image.png
  • 如图所示,我们发现数据maoshe中一共有4张表,根据经验一般,用户或者管理员信息在admin这个表中,当然如果不是,你只能一个个的去试了

4. 继续猜解表的字段

  • 执行下面的命令,--colunms参数,表示猜解所有字段,-T 指定表
sqlmap -u "http://59.63.200.79:8003/?id=1" --columns -T admin -D maoshe
image.png
  • 如图所示,我们发现这个admin表中有三个字段,很显然username 和password 就是对应的用户名和密码

5. 获取用户名和密码

  • 执行下面的命令,--colunms参数,表示猜解所有字段,-T 指定表
sqlmap -u "http://59.63.200.79:8003/?id=1"  --dump -C username,password  -T admin -D maoshe
image.png
  • 这样我们就拿到了账号admin和密码 hellohack

五、最后

  • 本次测试主要使用了sqlmap工具,此工具还有很多其他的功能,比如猜解的时候可以开启多线程,提高猜解的效率等,另外针对不同的语言编写的网站,以上执行的命令略有不同,这里我们演示的网站是php编写的。
  • 因为是靶场网站,所以数据库的数量,表的数量,字段的数量都很少,甚至注入点也很明显,因为我们的目的只是为了演示技术,而不是为了渗透别人的网站。真正的渗透测试环境肯定要比这个复杂的多。
  • 为了应对sql注入的风险,我们的网站要注意以下几点
  • 对用户的输入进行校验,限制输入、过滤一些特殊的敏感符号等
  • 不要使用动态拼装sql的方式,进行数据查询存取
  • 不要使用管理员权限的账号连接数据库,为每个应用的数据库分配有限权限的账号
  • 不要明文存储敏感信息,可以使用一些加密方法
  • 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装

你可能感兴趣的:(Sql注入获取管理员账号密码)