[网鼎杯2018]Unfinish
[网鼎杯2018]Unfinish
考点
insert中的盲注
MySQL的弱比较
wp
扫描存在register.php,随便注册登录进去是一张图片。有注册也有登录,可以试试注入
在注册处用户名填\'select-,发现返回的用户名是'select-
如果注册处用户名是1234",会302跳转,如果是1234'就还会是注册页面,这说明是用'闭合语句的。并且如果语句执行失败会是注册页面。

可以猜出来后端代码
传入0'or 0 or '0,name返回的是0。传入0'or 1 or '0返回的是1。
先构造insert的报错注入,' or updatexml(1,concat(0x7e,database()),0) or ',结果返回nnnnoooo!!!

经过一番尝试,发现是过滤了,,那就不能用if语句盲注,可以用case when
payload
用ASCII码逐个爆破即可,可以得到数据库web,但是这里ban了information
还有一种方法是用sql的弱比较,会把'0'+119+'0'这种做加法运算,payload如下
0'+ascii(substr(database() from 1 for 1))+'0。这会在name处回显查询的值

小结
insert语句中可以使用
0'or 0 or '0根据返回结果判断盲注是否存在在substr函数的
,被过滤时,可以使用from 1 for 1在if被过滤时,可以使用case when。
0'or (select case ascii(substr(database() from 1 for 1)) when 119 then 1 else 0 end) or '0MySQL存在弱比较,会把
'0'+119+'0'做加法运算。0'+ascii(substr(database() from 1 for 1))+'0
最后更新于