郑重声明:
本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用课程中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。
1SQLInjection概述服务器端程序将用户输入参数作为查询条件,直接拼接SQL语句,并将查询结果返回给客户端浏览器;
SQLInjection主要危害有:
榨取数据;
执行系统命令;
向数据库插入代码;
绕过登录验证。
2环境准备2.1下载靶机metasploitable-linux-2.0.0.zip
2.2安装靶机此处忽略,自行百度:虚拟机安装Metasploitable2系统教程
2.3修改dvwa下的login.php文件//修改if条件语句如下:if(isset(_POST[Login])){//user=_POST[username];user=stripslashes(user);user=mysql_real_escape_string(user);pass=_POST[password];/*注释以下内容pass=stripslashes(pass);//stripslashes()函数删除反斜杠pass=mysql_real_escape_string(pass);//mysql_real_escape_string()函数转义SQL语句中使用的字符串中的特殊字符。//受影响字符:\x00,\n,\r,\,,",\x1a//如果成功,则该函数返回被转义的字符串。如果失败,则返回false。pass=md5(pass);//md5()函数计算字符串的MD5散列。*/qry="SELECT*FROM`users`WHEREuser=userANDpassword=pass;";result=
mysql_query(qry)ordie(pre.mysql_error()./pre);//if(resultmysql_num_rows(result)==1){//LoginSuccessful...//注释以上内容并复制,修改如下://mysql_num_rows(result)!=0执行登陆绕过时,sql结果为真,将打印出所有表内数据,此时行数可能会大于1。if(resultmysql_num_rows(result)!=0){//LoginSuccessful...dvwaMessagePush("Youhaveloggedinas".user."");dvwaLogin(user);dvwaRedirect(index.php);}//Loginfailed1dvwaMessagePush("Loginfailed");dvwaRedirect(login.php);}3SQLInjection绕过登陆验证测试在不知道用户名或密码的情况下,通过SQLInjection绕过登陆验证。直接在密码输入框中写入以下内容(用户名可写可不写):
OR1=14low等级下SQLInjection检测方法测试
将DVWASecurity等级修改为:low
通过上面SQLInjection绕过登陆验证测试进入DVWA主界面下后,选择SQLInjection菜单
4.1正常数据查询在UserID下输入1,测试查询UserID为1的数据,输出如下:
ID:1Firstname:adminSurname:admin
观察:此时浏览器URL变为: