ctfshow——萌新web3


题目如下:

 源码分析:

通过id可以传入一个参数,对id的值进行了过滤,这里是正则匹配过滤,内容分析:or,-,\,*,<,>,!,x,hex,+。最外面的i是同时匹配过滤内容的大小写。在正则里面加入‘\’是为了防止转义。调用了intval函数判断id是否大于999。通常绕过intval函数方法将整数转换成字符串。

 之后把id代入进行sql查询,题目下方也提示了flag在id=1000哪里,所以构造payload如下:

 这里成功是不是能推出,在数据库查询中,字符串类型的整数和整数都能查询到同样结果?这应该和数据库的特性有关。

 

相关