写出SQL注入的方法和联合查询数据库所用到的SQL语句

写出SQL注入的方法和联合查询数据库所用到的SQL语句,第1张

注入方法:

a)寻找注入点,构造特殊的语句

传入SQL语句可控参数分为两类 

1 数字类型,参数不用被引号括起来,如id=1 

2 其他类型,参数要被引号扩起来,如name="phone"

b)用户构造SQL语句(如:'or 1=1#;admin'#(这个注入又称PHP的万能密码,是已知用户名的情况下,可绕过输入密码)以后再做解释)

c)将SQL语句发送给DBMS数据库

d)DBMS收到返回的结果,并将该请求解释成机器代码指令,执行必要得到 *** 作

e)DBMS接受返回结果,处理后,返回给用户

因为用户构造了特殊的SQL语句,必定返回特殊的结果(只要你的SQL语句够灵活)

字数限制,剩下的你自己去教学网站看一下吧。

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.\x0d\防护\x0d\归纳一下,主要有以下几点:\x0d\1永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和\x0d\双"-"进行转换等。\x0d\2永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。\x0d\3永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。\x0d\4不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。\x0d\5应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装\x0d\6sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。

第一步:SQL注入点探测。探测SQL注入点是关键的第一步,通过适当的分析应用程序,可以判断什么地方存在SQL注入点。通常只要带有输入提交的动态网页,并且动态网页访问数据库,就可能存在SQL注入漏洞。如果程序员信息安全意识不强,采用动态构造SQL语句访问数据库,并且对用户输入未进行有效验证,则存在SQL注入漏洞的可能性很大。一般通过页面的报错信息来确定是否存在SQL注入漏洞。

第二步:收集后台数据库信息。不同数据库的注入方法、函数都不尽相同,因此在注入之前,我们先要判断一下数据库的类型。判断数据库类型的方法有很多,可以输入特殊字符,如单引号,让程序返回错误信息,我们根据错误信息提示进行判断,还可以使用特定函数来判断。

第三步:猜解用户名和密码。数据库中的表和字段命名一般都是有规律的,通过构造特殊的SQL语句在数据库中依次猜解出表名、字段名、字段数、用户名和密码。

第四步:查找Web后台管理入口。Web后台管理通常不对普通用户开放,要找到后台管理的登录网址,可以利用Web目录扫描工具快速搜索到可能的登录地址,然后逐一尝试,便可以找到后台管理平台的登录网址。

第五步:入侵和破坏。一般后台管理具有较高权限和较多的功能,使用前面已破译的用户名、密码成功登录后台管理平台后,就可以任意进行破坏,比如上传木马、篡改网页、修改和窃取信息等,还可以进一步提权,入侵Web服务器和数据库服务器。

一、经常出现漏洞的sql语句 用户名和密码 一起同时查询。

select from users where username=‘abc’ and passwd=‘123’ or 1=‘1’

12

二、正确的sql语句先查询数据库根据用户名查询密码,如果存在改用户名,再看密码是否相同。

"select passwd from users where username='" + name + "' limit 1";1

正确代码如下:

String name = reqgetParameter("username");

String pwd = reqgetParameter("pwd");

Connection conn = null;

Statement statement = null;

ResultSet resultSet = null;

try {

// 加载数据库驱动

String driver = "commysqljdbcDriver";

ClassforName(driver);

// 得到数据库连接

String url = "jdbc:mysql://localhost:3306/student";

String user = "root";

String password = "tianyejun6";

conn = DriverManagergetConnection(url, user, password);

// 创建statement

statement = conncreateStatement();

//sql语句

String sql = "select passwd from users where username='" + name + "' limit 1";

Systemoutprintln(sql);

resultSet = statementexecuteQuery(sql);

if (resultSetnext()) {

// 说明用户真实存在

String passwd = resultSetgetString(1);

if (passwdequals(pwd)) {// 说明用户真合法,密码相同

>

以上就是关于写出SQL注入的方法和联合查询数据库所用到的SQL语句全部的内容,包括:写出SQL注入的方法和联合查询数据库所用到的SQL语句、什么是SQL注入,如何防止SQL注入、求教谁给讲讲SQL注入攻击的步骤等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10190477.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存