SQL labs1-10
Less1:(基于错误的GET单引号字符型注入)
解题思路:
方法一,union 联合查询注入
1,首先判断是否存在注入 / ?id=1’ 回显错误,去掉 ‘ 发现回显正常,发现是单引号字符型注入
注意此时因为前面报错可以看到有limit 0,1我们可以知道此处如果需要输出我们union查询出的信息要将前面的位占了,即使前面的输出为不存在。可以看到我是将id的值写为负值,然后将输出的位置就让给了后面我们需要输出的信息,这个技巧在有输出限制的时候十分重要。
2,然后用 order by 判断有几列数据
1 |
|
回显正常,order by 4 的时候发现回显错误,说明有3 列
我们上面猜测出了字段数为3,但这里输出的只有2个,所以我们union查询要保证字段数一样,不足的补数字(只有mysql可以),或者null。然后第一个是没有输出的,所以我将需要输出的写在了后面两个。
3,将id=1改为一个数据库不存在的id值,如-1,使用union select 1,2,3联合查询语句查看页面是否有显示位。
发现页面先输出了2和3,说明页面有2个显示位
4,然后利用sql查询语句依次爆破出数据库内的数据库名,表名,列名,字段信息
(1) 爆数据库名:
1 |
|
上面的爆出全部的数据库名,\下面的爆当前的数据库名:****
1 |
|
(2) 爆表名:
1 |
|
(3)爆字段:
1 |
|
(4)爆内容:
1 |
|
0x3a 代表十六进制的 ‘ : ’
方法二:手动报错注入
通过报错回显查询信息
1,爆数据库名:
1 |
|
2,爆表:
1 |
|
3,4,直接将 extractvalue(1,concat(0x7e,(……) ) ) 内的内容修改即可。或者用 updatexml(1,concat(0x7e,(……),1)
Less 2:(GET型整型注入)
今天成功安装了hackbar的旧版本
链接地址为:https://github.com/HCTYMFF/hackbar2.1.3 (在火狐浏览器上使用)
先采用
?id=1 union select 1,2,3–+ 发现可行
与之前一样,又在1后加入了引号,出现语法报错
删掉分号,我们修改语句
1 |
|
查到关于数据库内部数据
接着修改
1 |
|
这里建议将security修改为16进制,0x开头,英文单词用hackbar里的工具转换为16进制数
之后修改为username
得到username和password字名
然后同第一关一样,我们需要让它出现所有的数据
慢慢来
1 |
|
同样这里的~使用十六进制,修改为0x7e
我们再加group_concat 函数得到
1 |
|
tip:这边加负号是使得id=1失去作用。
最后回显数据,得到链接为:http://localhost/Less-2/?id=-1221 union select 1,2,group_concat(concat_ws(0x7e,username,password))from security.users–+
Less-3 (基于错误的get单引号变形字符注入)
输入 id=1 正常,输入id=1’ # 回显错误 ,根据报错信息确定咱们输入的内容存放到一对单引号加圆括号中了,猜想一下咱们输入1在数据库语句中的位置,形如select … from … where id=(‘1’) …,在第一题中id=1‘的后面单引号加上),其它保持不变就行了
Less-4 (基于错误的get双引号字符型注入)
输入 id =1 回显正常 输入 id =1’ 回显正常 输入 id = 1” 回显错误 说明是 双引号闭合型
输入 id = 1” %23 回显错误 说明还有一个 单括号闭合
输入 id = 1”) …… 其他不变
Less-5(双注入get单引号字符型注入)
第五关与前四关不同,没有了明显的回显,经过资料查询为布尔盲注(bool)
与之前一样我们先利用基本语句,发现id=1’时报错,存在注入;
之后用order by语句查询到至多只有3行;
但是没有了明显的回显后,我们不能再使用union select 联合查询来寻找我们要的数据;
这个时候就使用新的语句 and left(( select database()),1) 进行试探,或是直接进入MySQL控制台使用语句进行查询更加直观
这是用sqlmap跑的数据图
最后的数据为‘security’
1 |
|
这里推荐函数链接::https://blog.csdn.net/qq_43573676/article/details/105774162
Less-6 (双注入get双引号字符型注入)
只用将less 5 中的单引号改为 双引号即可
Less-7 (导出文件get字符型注入)
1,补充:
@@basedir :mysql安装路径
@@datadir :数据库路径
load_file(file_name):读取文件并返回该文件的内容作为一个字符串
使用条件:必须有权限读取并且文件可读,必须指定文件完整的路径
2,由于我不是在本地搭载的环境,所以知道具体的数据存放路径,需要去获取绝对路径,
前面知道 本题是 单引号 加双括号 的闭合方式:
1 |
|
获取不了 路径
于是去前面的简单的题找个路径:
1 |
|
得到路经:
进行文件导入:(这里要用 \ )
1 |
|
需要注意的是:利用数据库file权限向操作系统写入文件时, 对于相同文件名的文件不能覆盖,所以如果第一次上传chao.php,下次在上传chao.php,就是无效命令了,也就是新的chao,php中的内容并不会覆盖,之前的chao.php
然后用菜刀进行连接
我自己在尝试第七关的时候,发生了很多次失败,导致sql靶场一度搁浅
现在想想错误应该是这几个:
1.没有//,因为遇到转义时需用//才能使得浏览器解析时为我们自己想要的。
2.格式没有完全对,之前借鉴的博客里可能有一些问题(无意冒犯一些大佬)。
3.对于什么是一句话木马没有一点了解,就连工具antsword也是装了很久才成功。
现在重新撸一下就ok了,记得一句话木马的时候引号会变成乱码,直接在post里写1就好
Less-8 (布尔型单引号GET盲注)
1,补充:
(1)盲注分为两类:
1.布尔盲注 布尔很明显Ture跟Fales,也就是说它只会根据 你的注入信息返回Ture跟Fales,也就没有了之前的报错信息。
2.时间盲注 界面返回值只有一种,true 无论输入任何值 返回情况都会按正常的来处理。加入特定的时间函数,通过查看web页面返回的时间差来判断注入的语句是否正确。
(2)
–batch : 让sqlmap自动输入
–dbms mysql :指定数据库系统为mysql绕过sqlmap的自动检测
-v 显示 等级(0-6)
方法一 :用sqlmap 按部就班的 来,最后一步的payload 为:
1 |
|
方法二: 用脚本进行 盲注
具体操作 参考 https://blog.csdn.net/wy_97/article/details/78169623 的详细操作
方法三: 完全可以按照之前方法慢慢来爆破
Less-9 (基于时间的GET单引号盲注)
脚本gogogo
1,补充:时间盲注 界面返回值只有一种,true 无论输入任何值 返回情况都会按正常的来处理。加入特定的时间函数,通过查看web页面返回的时间差来判断注入的语句是否正确。
2,手工注入实在是太麻烦,将手工注入整理一下写出一个脚本 让机器去注入
代码如下:
1 |
|
这个脚本你每次只能查询 一个内容,
需要不断改变 4,5,行中 limit x,1 的 x 的数字去查询,
也需要改变 database_payload 去查询不同的信息
Less-10 (基于时间的双引号盲注)
1,只用将第9题中的单引号改为双引号,其他用脚本注入就好
注意,在脚本的第 4,5中的所有的单引号都改为双引号
sqlmap post类型注入方法:
\方法一:(“-r txt ”方式注入)**
1,先用burp suite 抓包,保存为1.txt文件放在桌面上
2,打开sqlmap
查询数据库名:
1 |
|
注:-r表示加载一个文件,-p指定参数
之后对应选择输入 : Y N Y
得到:
之后查表:
1 |
|
查字段:
1 |
|
查内容:
1 |
|
此文大部分方法和内容转载于
- 本文作者:4v1d
- 本文链接:http://daweitech.github.io/2020/12/09/2021/sql/1-10/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!