asp sql查询过滤空格_SQL注入,get,post,cookie攻击怎么实战?

快,关注米兜Java,一起涨姿势~

b3af6f0650704b72904811c41b37f410.png

热点推荐

  • 深入浅出Nginx,如何做到高并发下的高效处理?如何做到热部署?
  • 推荐27个Mybatis-Plus优秀案例
  • foreach循环中为什么不要进行remove/add操作
  • 微服务架构如何保证安全性?
0a23ea6b37b352283e48f7e5d4f9574a.png

SQL注入,get,post,cookie攻击怎么实战?

01前言

在讲SQL注入,get,post,cookie攻击怎么实战?之前,我们先过一下SQL注入概念,然后从理论的角度简单分析一下get,post,cookie攻击,至于攻击的工具等更深入的东西只能大家各自去了解了。

sql注入(SQL Injection)_百度百科:

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击。

SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

02get|post攻击实战

以JSP+SQL Server环境为例,对于一个正常的登录表单,输入正确的账号和密码之后,JSP程序会查询数据库:如果存在此用户并且密码正确,将会成功登录;如果用户不存在或者密码不正确,则会提示账号或密码错误。

然而当输入用户名: ‘or 1=1–,密码为空时,却发现可以正常登录,显然数据库中不存在这样一个用户。

实际上,登录处最终调用代码如下:

public boolean findAdmin(Admin admin)

{

String sql = "select count(*) from admin where username='" + admin.getUsername() + "'and password='" + admin.getPassword() + "'" //SQL查询语句

try {

Resultset res = this.conn.creatStatement().executQuery(sql);

//执行sql语句

if(res.next())

{

int i = res.getInt(1);//获取第一列的值

if (i>0)

{return true;} //如果结果大于0,则返回true

}

} catch (Exception e) {

e.printStackTree();//打印异常信息

}

return false;

}

上面程序段的意义很清楚:在数据库中查询username=xxx and password=xxx的结果个数。如果结果个数大于0,表示存在这样的用户,返回true,代表登录成功,否则返回false,代表登录失败。

这段代码本身没有什么错误。正常情况下,当一个用户 username='test'且password='test'时,执行了sql语句

select count(*) from admin where username = 'test' and password = 'test'

但是当输入username="'or 1=1--"时,在java程序中String类型变量sql 为

" select count(*) from admin where username = ' 'or 1=1-- ' and password = ' ' "

这句sql语句在执行时,"--" 将"and"及之后的语句都注释掉了,相当于执行了

select count(*) from admin where username = ' 'or 1=1

而1=1是永远为true的,所以该语句的执行结果实际上是admin表的行数,而不是符合输入的username和password的行数,从而顺利通过验证。

这个例子中虽然注入的过程非常简单,但可能的危害却很大。如果在用户名处输入

"' or 1=1; drop table admin --"

由于SQL Server支持多语句执行,就可以把admin表drop掉了,后果不堪设想。

03cookie攻击实战

Cookie注入简单来说就是利用Cookie而发起的注入攻击。从本质上来讲,Cookie注入与传统的SQL注入并无不同,两者都是针对数据库的注入,只是表现形式上略有不同罢了。

要想深入了解Cookie注入的成因,必须要了解ASP脚本中的request对象。它被用来获取客户端提交的数据。先来看下ASP开发文档中对request对象的描述,如图1所示:

3ba82492289677b42ec7174a5036a38b.png

Request对象的使用方法一般是这样的:request.[集合名称](参数名称),比如获取从表单中提交的数据时可以这样写:request.form("参数名称"),但ASP中规定也可以省略集合名称,直接用这样的方式获取数据:request("参数名称"),当使用这样的方式获取数据时,ASP规定是按QueryString、Form、Cookies、ServerVariables的顺序来获取数据的。这样,当我们使用request("参数名称")方式获取客户端提交的数据,并且没有对使用request.cookies("参数名称")方式提交的数据进行过滤时,Cookie注入就产生了。

Cookie注入典型步骤

上面我们介绍了Cookie注入的相关知识,下面我们来看如何确定一个网站是否存在Cookie注入漏洞。

1.寻找形如“.asp?id=xx”类的带参数的URL。

2.去掉“id=xx”查看页面显示是否正常,如果不正常,说明参数在数据传递中是直接起作用的。

3.清空浏览器地址栏,输入“javascript:alert(document.cookie="id="+escape("xx"));”,按Enter键后弹出一个对话框,内容是“id=xx”,然后用原来的URL刷新页面,如果显示正常,说明应用是用Request("id")这种方式获取数据的。

4.重复上面的步骤,将常规SQL注入中的判断语句带入上面的URL:“javascript:alert(document.cookie="id="+escape("xx and 1=1"));”

“javascript:alert(document.cookie="id="+escape("xx and 1=2"));”。

和常规SQL注入一样,如果分别返回正常和不正常页面,则说明该应用存在注入漏洞,并可以进行cookie注入。

5.使用常规注入语句进行注入即可。

具体案例我就不举例了,好像网上都有。

04攻击工具

  • Havij
  • Pangolin
  • SQLmap

具体怎么玩,自行了解即可。

05注入总结

上面我们以攻击者的视角简单讲述了SQL注入攻击,但我们的目的不是为了去攻击别人,而且为了更好的防御。俗话说“知己知彼,百战不殆”,只有理解了攻击者是如何攻击的,我们才能更有效地防御。

请留下你指尖的温度

让太阳拥抱你

记得这是一个有温度的头条号

print_r('点个好看吧!');

var_dump('点个好看吧!');

NSLog(@"点个好看吧!");

System.out.println("点个好看吧!");

console.log("点个好看吧!");

print("点个好看吧!");

printf("点个好看吧!");

cout << "点个好看吧!" << endl;

Console.WriteLine("点个好看吧!");

fmt.Println("点个好看吧!");

Response.Write("点个好看吧!");

alert("点个好看吧!")

echo "点个好看吧!"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值