代码审计分段讲解之29题,代码如下:
题目源自jarvisoj平台,环境在:http://web.jarvisoj.com:32794/
我们直接开始进行代码审计
包含config.php文件
使用GET方式传入table,赋值给table,默认为test
接着对table进行过滤
这里的Filter函数是我们不知道的,不过不影响代码审计
接着是
该行代码的意思为:
当mysqli_query()函数执行成功,则不调用Hacker()函数
当mysqli_query()函数执行失败,则调用Hacker()函数
对于mysqli_query函数的解释:
也就是说对链接的数据库执行desc 查询,我们又知道desc是用来查询表的结构的,如图:
又有:
从上图中可以看出来有:
desc xxx xxx;
desc `xxx``xxx`
desc 'xxx' 'xxx'
desc "xxx" "xxx"
语句一和语句二是同样的效果,能够正常执行
语句三河语句四是同样的效果,均无法正常执行,所以我们通过闭合反引号来进行SQL语句的注入。
反引号 ` 在mysql中是为了区分mysql中的保留字符与普通字符而引入的符号
例如,如果test表中存在一个 from 字段,,当我们查找内容时,就需要使用反引号,以防使用保留字符而报错
接下来的代码是一段SQL语句查询,并且输出第一个结果:
我们闭合反引号进行注入:
默认为:
查询数据库为:
得知数据库为:
获取表
得知表为
后面的注入不再赘述。
提一下这个部分:
这里的
关于中间的翻译好为什么没有影响到语句的执行,个人认为是因为两个反引号相当于了空格,后面的语句同理。
再提一下这个部分:
因为可以看到代码最后是:
因为只输出$ret[0],正常输出的话就是 flag{xxx},所以我们使用 limit 控制输出。
参考链接:
- http://yugod.xmutsec.com/index.php/2018/07/18/40.html
- https://saucer-man.com/information_security/101.html