PHP代码审计分段讲解(6)
14 intval函数四舍五入
<?php
if($_GET[id]) {
   mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
  mysql_select_db(SAE_MYSQL_DB);
  $id = intval($_GET[id]);
  $query = @mysql_fetch_array(mysql_query("select content from ctf2 where id='$id'"));
  if ($_GET[id]==1024) {
      echo "<p>no! try again</p>";
  }
  else{
    echo($query[content]);
  }
}
?>
使用GET方式传入id,连接数据库
使用 intval 函数获取变量id的整数值。
这里没有题目背景不是很清楚,但是看上去好像是需要传入的id不等于1024,但是数据库中需要查询出id=1024的值。
所以我们只需要输入一个小数即可,intval自动将其转换成整数,数据库正确查询,而又令
$_GET[id]==1024
不成立,输出查询结果。
15 strpos数组绕过NULL与ereg正则%00截断
<?php
$flag = "flag";
    if (isset ($_GET['nctf'])) {
        if (@ereg ("^[1-9]+$", $_GET['nctf']) === FALSE)
            echo '必须输入数字才行';
        else if (strpos ($_GET['nctf'], '#biubiubiu') !== FALSE)
            die('Flag: '.$flag);
        else
            echo '骚年,继续努力吧啊~';
    }
 ?>
使用GET方式传入 nctf 的值,变量数字判断
@ereg ("^[1-9]+$", $_GET['nctf']) === FALSE
如果全部是数字,还需要里面包含有字符串:#biubiubiu,输出flag
strpos ($_GET['nctf'], '#biubiubiu') !== FALSE
这个题目可以通过输入数组进行绕过获取flag,但我们使用截断的方式
首先nctf全部是数字是很容易满足的,在之前的题目中我们又了解到ereg函数是存在%00截断的,所以我们最终的payload为:
?nctf=123%00%23biubiubiu
注意#需要进行URL编码
16 SQL注入or绕过
<?php #GOAL: login as admin,then get the flag;
error_reporting(0);
require 'db.inc.php'; function clean($str){
if(get_magic_quotes_gpc()){ //get_magic_quotes_gpc — 获取当前 magic_quotes_gpc 的配置选项设置
$str=stripslashes($str); //返回一个去除转义反斜线后的字符串(\' 转换为 ' 等等)。双反斜线(\\)被转换为单个反斜线(\)。
}
return htmlentities($str, ENT_QUOTES);
} $username = @clean((string)$_GET['username']);
$password = @clean((string)$_GET['password']); //$query='SELECT * FROM users WHERE name=\''admin\'\' AND pass=\''or 1 #'\';'; $query='SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';';
$result=mysql_query($query);
if(!$result || mysql_num_rows($result) < 1){
die('Invalid password!');
} echo $flag; ?>
使用GET方式传入 username 和 password,将其使用函数clean清理,查看clean函数
function clean($str){
    if(get_magic_quotes_gpc()){ //get_magic_quotes_gpc — 获取当前 magic_quotes_gpc 的配置选项设置
        $str=stripslashes($str); //返回一个去除转义反斜线后的字符串(\' 转换为 ' 等等)。双反斜线(\\)被转换为单个反斜线(\)。
    }
    return htmlentities($str, ENT_QUOTES);
}
可以看到,如果本地系统开启了GPC的话,将会使用stripslashes返回一个去除转义反斜线后的字符串。
关于GPC
开启magic_quotes_gpc=on之后,能实现addslshes()和stripslashes()这两个函数的功能。在PHP4.0及以上的版本中,该选项默认情况下是开启的,所以在PHP4.0及以上的版本中,就算PHP程序中的参数没有进行过滤,PHP系统也会对每一个通过GET、POST、COOKIE方式传递的变量自动转换,换句话说,输入的注入攻击代码将会全部被转换,将给攻击者带来非常大的困难。
也就是说,当本地系统开启了GPC的时候,为了让我们也能过通过这道题,作者使用clean函数去除掉了开启GPC之后的效果
接着是SQL查询语句
$query='SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';';
可以看出来,这里是典型的万能密码登录语句,我们根据语句进行构造
?username=admin\'\' AND pass=\''or 1 #&password=
将语句进行相应的闭合即可登录
PHP代码审计分段讲解(6)的更多相关文章
- PHP代码审计分段讲解(14)
		
30题利用提交数组绕过逻辑 本篇博客是PHP代码审计分段讲解系列题解的最后一篇,对于我这个懒癌患者来说,很多事情知易行难,坚持下去,继续学习和提高自己. 源码如下: <?php $role = ...
 - PHP代码审计分段讲解(13)
		
代码审计分段讲解之29题,代码如下: <?php require("config.php"); $table = $_GET['table']?$_GET['table']: ...
 - PHP代码审计分段讲解(11)
		
后面的题目相对于之前的题目难度稍微提升了一些,所以对每道题进行单独的分析 27题 <?php if(!$_GET['id']) { header('Location: index.php?id= ...
 - 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 . ': ...
 
随机推荐
- mysql between and 是[a,b]闭区间
			
mysql between and 是[a,b]闭区间 mysql between and 是[a,b]闭区间
 - Leetcode 1329. 将矩阵按对角线排序 题解
			
首先遍历对角线元素,顺序为: 先从第一列的最后一行到第一行 然后从第一行的第一列到最后一列 遍历的同时记录坐标和数值,对数值进行排序,然后坐标顺序放回. class Solution: def dia ...
 - ArrayList和LinkedList 的联系和区别
			
ArrayList和LinkedList 的联系和区别 1.联系: 都实现了List接口 有序 不唯一(可重复) 2.区别 ArrayList LinkedList
 - SMBv3远程代码执行漏洞复现(CVE-2020-0796)
			
漏洞基本信息 服务器消息块(SMB),是一个网络通信协议,用于提供共享访问到文件,打印机和串行端口的节点之间的网络上.它还提供了经过身份验证的进程间通信机制.SMB的大多数用法涉及运行Microsof ...
 - js 进度条效果
			
<!DOCTYPE html><html><head><meta charset="utf-8"><title>< ...
 - Jmeter监控插件
			
Jmeter-Plugins支持CPU.Memory.Swap.Disk和Network的监控,在测试过程中更加方便进行结果收集和统计分析. 一.准备工作: 1.下载Jmeter-Plugins插件, ...
 - 看看吧!月薪20K以上的程序员才能全部掌握RabbitMq知识,你掌握了多少
			
一.RabbitMq基础知识 0.概述 消息队列的作用就是接收消息生产者的消息,然后将消息发送到消费者 1.信道channel 我的理解是生产者/消费者和rabbitmq交互的一个通道,负责交换机.队 ...
 - 【老孟Flutter】自定义文本步进组件
			
交流 老孟Flutter博客(330个控件用法+实战入门系列文章):http://laomengit.com 欢迎加入Flutter交流群(微信:laomengit).关注公众号[老孟Flutter] ...
 - 思维导图软件iMindMap制作技巧有哪些
			
iMindMap11是iMindMap全新的版本.它可以提供给我们更好的灵活性以便我们将我们的思维进行可视化,并进一步的呈现和开发出属于自己的想法以及思维方式.在iMindMap中我们可以利用思维导图 ...
 - 如何合理利用iMindMap中的模板创建思维导图
			
思维导图的制作并不是一项简单的工作,尤其是对许多工作或学习有特殊要求的朋友而言,当我们需要应对不同场景制作不同的思维导图时,总不能都靠自己从头制作,这样难度比较大也比较耗时.而iMindMap(win ...