写在前面:
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出。欢迎各位前来交流。(部分材料来源网络,若有侵权,立即删除)
第一关
- 登入界面
- 输入参数id=1
-
输入2,3,4到12都是正常返回
-
12以后无返回
-
在后面添加一个单引号返回报错
-
所以可知闭合符为单引号
-
2-1正常输出1的返回值,所以为基于单引号数字型注入
-
1' order by 3 #
-
判断表的列数至4无法正常输出,则说明只有三列
-
?id=0 ' union select 1,2,3
-
判断显示位
-
得到2,3显示的位置
-
get it
第二关
- 界面效果如上
- 尝试发现,id可以一直尝试到12
- 尝试输入2-1 发现结果与2不同,与1相同
- 可以确定为整数型注入
- order by 到4发现报错
- 所以一共有三列
- 同上使用 union select 查询显示位置
- get it
第三关
- 输入2-1 与输入2结果相同
- 确定为字符型注入
- 尝试单引号
- 报错,注意报错内容和第一关的报错内容区别
- 显然不一样
- 说明第三关的闭合符不完全是单引号,且报错中有一个括号,添加尝试一下
?id=2%27)%23
- 在 ’) 后增加一个#,无报错,则说明闭合符猜测正确
- 继续order by 啥的
- get it
第四关
- 输入2-1与2无异
- 判断为字符型
- 所以下一把找闭合符
- 根据上一关以及经验猜测为 ” )
- 使用语句
?id=2-1")%23
返回正常查询值,说明闭合符号猜测正确 - get it
第五关
- 和前四关不同,输入1正常范围1-12返回值相同,都是 You are in…
- 但是不影响猜测闭合符
?id=1%27%23
- 使用这个代码可以发现闭合符为单引号
- 根据order by 到4出现错误可以确定列数
- 但是没有办法继续去注入显示位置
- 可以确定为单引号的布尔盲注
- 构造一个布尔表达式
?id=1%27%20and%201%23
- 所以当and后面的表达式为真时,正常返回,否则无返回结果
- 构造语句
ascii(substr(database(),2,1))>101%23
- database()为数据库名,也可以更换为其他的数据据库关于名字的参数
- substr(str,pos,len)
- 截取字符串str,从第pos截取len位
- ascii()转换成ascii码值,然后与给定值进行比大小,从而使用二分法分别确定字符串中的每一位
- 后续以字符串长度为例进行布尔盲注
- get it
第六关
- 比较麻烦的去应对第六关的报错与否
- 但是在尝试闭合符的时候尝试成功了
- 确认闭合符为双引号
- 不如尝试第五关的做法,发现做出来了
- get it
第七关
-
- 提示是使用外部文件
- 不急先判断闭合符
- 单引号报错无提示
- 尝试很久发现为闭合符为’))(其实是看别的大佬的wp)
- 但是发现尝试前面的布尔盲注的方法仍然可以得出结果
- 关于这个文件上传的思路与方法,后续会重点讨论
- get it
第八关
- 尝试了多种组合后发现’才是闭合符
- 所以可以确定为单引号的布尔盲注
?id=1%27%20and%20length(database())=8%20%23
- 按照前面的方法做出来了
- get it
第九关
- 很夸张的发现貌似报错不会返回
- 无论输入说明
- 查资料发现这种东西叫做时间盲注(挺吃饱了撑的)
- 所以可以构造函数根据返回时间来判断返回结果的成功与否
- 比如说sleep()函数
- 使用sleep函数来确定闭合符
?id=1%27%20and%20sleep(3)%23
- 如果闭合符猜测正确,则网页刷新时间应该为3s,很容易区分
- 所以可以确定闭合符为单引号
- 然后用时间盲注的方法去判断其他参数
- get it
第十关
- 返回结果和第九关类似
- 所以还是时间盲注吧
- 同第九关用sleep()函数来确定闭合符
- 成功确定闭合符为双引号
- 所以同第九题
- 确定数据库名字长度为例子
- get it
摸会鱼,马上继续
加油