手工注入完成SQL注入漏洞

上次说到工具注入的天花板,burpsuite和sqlmap联动注入SQL漏洞。

用burpsuite和sql联动工具注入漏洞_mammal7的博客-CSDN博客

但是工具注入并不是万能的,并且,只使用工具注入的话,会被称为“脚本小子”,当然这是一个贬义词。 工具注入的缺点还是很多的,例如:大部分目标网站会开启安全设备,会禁ping,禁扫描,封ip等。网站都进不去就别提注入了。

那么,手工注入就是我们的必要手段。可以避开抓包等繁琐的中间过程,直接注入漏洞。

首先,我们要了解SQL注入漏洞是对网站的数据库进行读取。那么就要针对网站的数据库写相应的语句。(以获取dvwa靶场中,admin,password为例)

主要步骤如下:

1.找交互点

启动phpstudy,保证Apache和Mysql处于绿灯状态。打开firefox浏览器,输入127.0.0,1/dvwa.master,进入dvwa靶场。

 进入DVWA Security,将安全等级改为low等级。

在SQL injection的左下角检查安全等级是否为low。

 在User ID中输入1,观察url的回显结果。

发现?id=1请求,说明这是一个交互点。

2.找注入点 

User ID 或者顶部栏中,1后面加一个',观察回显结果。

页面显示error,在1后,说明id=1是一个注入点。

3.判断类型(int 类型,char 类型) 

两个类型决定了后续语句的写法,至关重要。

输入语句1 and 1=1(这个结果为真)

输入语句1 and 1=2(这个结果为假)

 

分别观察两个网页的回显结果。发现这两个url的回显结果是一样的。判断出注入类型为char类型。那么后续的所有手工注入语句要在int类型的基础上,输入‘闭合 #注释

4.判断列数(order by 语句)

输入语句:1'order by **#  (由于不知道列数,采用二分法可大大提高效率)

输入语句1' order by 1#,观察回显结果。

 发现页面正常显示,说明存在一个列。

接着输入语句1' order by 10#,观察回显结果。

这里显示不存在,说明列数没有10个,用二分法查找order by 5。

 

这里依然显示不存在,说明列数没有5个。以此类推,用二分法继续查找,直到页面正常显示。

在用二分法反复尝试后,发现3列不存在,2列正常显示,说明网站存在2个列。 

5.看回显位置(union select)

用联合查找语句获取对应列的位置,观察回显结果。

输入语句:1' and 1=2 union select 1,2#

and 1=2:防止原网站显示,对信息的获取产生干扰,令原网站为假。

发现两个列对应位置。猜测admin 和 password在2列中。

6.读取数据库的名称(database())

输入语句:1' and 1=2 union select 1,database()#    观察回显结果。

读取到surname中数据库名称为dvwa,那接下去就好办了,数据表,数据列,读取数据逐个击破。 

7.读取数据表的名称 (table_name)

输入语句:1' and 1=2 union select 1,table_name from information_schema.tables where table_schema='dvwa'#     观察回显结果。

Information_schema:数据库名,所有网站的数据库都在里面,tables是其中的一张表(存储着所有网站的数据表名称),用.来列出。

table_shcema=’dvwa’表示获取table_schema数据库中dvwa的数据表名,也就是我们要的。

获取到两个表名,guestbook和users。猜测admin 和 password在users中。

8.读取数据列的名称(column_name)

语句与table_name 类似。输入语句:1' and 1=2 union select 1,column_name from information_schema.columns where table_name='users'#   观察回显结果。

可以查到对应列的名称。猜测admin 和 password在user 和 password列中。

9. 读取数据 (concat)

最后一步当然是读取数据啦。输入语句:1' and 1=2 union select 1,concat(user,password) from users#

concat:连接两个要查找的列。

 

这里会看到一长串数字和字母,无法判断admin和password。这里可以在concat中加一个字符隔开。例如(user,'        ',password),这样就能很清楚的区分admin和password啦。

 

将读到的数据用md5解密后,就可以获取到明文的账号密码了。怎么样,手工注入SQL漏洞是不是很酷呢!

另外声明一下,这个靶场是char类型的,如果判断出是int类型的话,只需将语句中' 和# 删除,其他语句一摸一样。

 

 

 

 

        

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值