PHP代码审计系列(三)

news2024/11/19 17:52:02

PHP代码审计系列(三)

本系列将收集多个PHP代码安全审计项目从易到难,并加入个人详细的源码解读。此系列将进行持续更新。

sql闭合绕过

源码如下

<?php

if($_POST[user] && $_POST[pass]) {
    $conn = mysql_connect("*******", "****", "****");
    mysql_select_db("****") or die("Could not select database");
    if ($conn->connect_error) {
        die("Connection failed: " . mysql_error($conn));
} 
$user = $_POST[user];
$pass = md5($_POST[pass]);

//select user from php where (user='admin')#

//exp:admin')#

$sql = "select user from php where (user='$user') and (pw='$pass')";
$query = mysql_query($sql);
if (!$query) {
    printf("Error: %s\n", mysql_error($conn));
    exit();
}
$row = mysql_fetch_array($query, MYSQL_ASSOC);
//echo $row["pw"];
  if($row['user']=="admin") {
    echo "<p>Logged in! Key: *********** </p>";
  }

  if($row['user'] != "admin") {
    echo("<p>You are not admin!</p>");
  }
}

?>

通读代码出现漏洞的是这一段sql存在注入,通过’)#闭合可以绕过密码的校验

$sql = "select user from php where (user='$user') and (pw='$pass')"

payload:

user=admin')#&pass=1

在这里插入图片描述

X-Forwarded-For绕过指定IP地址

源码如下

<?php
function GetIP(){
if(!empty($_SERVER["HTTP_CLIENT_IP"]))
    $cip = $_SERVER["HTTP_CLIENT_IP"];
else if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
    $cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
else if(!empty($_SERVER["REMOTE_ADDR"]))
    $cip = $_SERVER["REMOTE_ADDR"];
else
    $cip = "0.0.0.0";
return $cip;
}

$GetIPs = GetIP();
if ($GetIPs=="1.1.1.1"){
echo "Great! Key is *********";
}
else{
echo "错误!你的IP不在访问列表之内!";
}
?>

通读代码发现只要GetIP()方法返回的IP为1.1.1.1就可以获得flag,这个方法是根据HTTP_CLIENT_IP、HTTP_X_FORWARDED_FOR、REMOTE_ADDR请求头来校验ip的

我用了burp更改请求头,推荐个burp插件fakeip一键生成多种请求头进行绕过

在这里插入图片描述

md5加密相等绕过

源码如下

<?php

$md51 = md5('QNKCDZO');
$a = @$_GET['a'];
$md52 = @md5($a);
if(isset($a)){
if ($a != 'QNKCDZO' && $md51 == $md52) {
    echo "nctf{*****************}";
} else {
    echo "false!!!";
}}
else{echo "please input a";}

?>

通读代码需要绕过以下条件,我们需要找到一个不等于QNKCDZO的值MD5加密后相等

$a != 'QNKCDZO' && $md51 == $md52

==在进行比较的时候会进行数据转换,字符串与数字进行比较的时候字符串开头数字会被转换为数值进行比较例如

echo '123tpaer' == 123;

结果是1

QNKCDZO经过MD5加密后为0e开头

字符串e0XXX会转换为0,我们只需要找到MD5加密后开头为0e的字符串即可百度有很多

payload:

http://localhost/phpbugs/13.php?a=s155964671a

在这里插入图片描述

intval函数四舍五入

initval函数四舍五入

源码如下

<?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]==1024

在查询sql之前使用了intval函数

利用intval的四舍五入特性绕过

echo intval('1024.1');
//结果为1024

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字段,对该字段进行校验是否输入的都是数字不是则结束脚本,使用strops判断字符串#biubiubiu中是否存在nctf的字段如果存在输出flag

需要绕过以下条件

strpos ($_GET['nctf'], '#biubiubiu') !== FALSE

可以通过报错使strpos返回NULL,满足条件NULL!== FALSE

在这里插入图片描述

也可以利用erge的截断漏洞,绕过以下条件

@ereg ("^[1-9]+$", $_GET['nctf']) === FALSE

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/72206.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于操作PPL进程引发的一些问题

背景 之前发布过一篇关于procexp的利用&#xff0c;但是最近有brother说&#xff0c;最新的版本不能利用了&#xff0c;然后就去下载了最新版本的。 发现判断了是不是受保护进程&#xff0c;不是就拒绝。 这里简单看一下这个函数&#xff0c;发现对比的是_PS_PROTECTION,其实就…

windows cmd指令记录、监听进程是否存在、exe注册到服务中开机后台运行

cmd指令记录 mstsc&#xff1a;远程桌面 regedit&#xff1a;打开注册表 control userpasswords2&#xff1a;去掉开机登录界面 shell:startup&#xff1a;进入登录界面后自启程序 services.msc&#xff1a;启动、终止并设置服务管理界面 shutdown -r -t 0&#xff1a;-r…

一步一步学Iceberg-对比Flink+Kafka和Flink+Iceberg的差异

一 FlinkKafka做实时数仓的弊端 我们以前&#xff08;包括现在&#xff09;还有用FlinkKafka做实时数仓&#xff0c;以及日志传输。Kafka本身的存储成本很高&#xff0c;并且数据保留时间有时效性&#xff0c;一旦消费积压&#xff0c;数据达到过期事件后&#xff0c;就会导致…

[附源码]JAVA毕业设计文件发布系统(系统+LW)

[附源码]JAVA毕业设计文件发布系统&#xff08;系统LW&#xff09; 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; …

Talk预告 | 剑桥大学在读博士生苏熠暄:对比搜索(Contrastive Search)—当前最优的文本生成算法

本期为TechBeat人工智能社区第461期线上Talk&#xff01; 北京时间12月8日(周四)20:00&#xff0c;剑桥大学在读博士生——苏熠暄的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “对比搜索&#xff08;Contrastive Search&#xff09;—当前最优的…

【Keras计算机视觉】Faster R-CNN神经网络实现目标检测实战(附源码和数据集 超详细)

需要源码请点赞关注收藏后评论区留言私信~~~ 一、目标检测的概念 目标检测是计算机视觉和数字图像处理的一个热门方向&#xff0c;广泛应用于机器人导航、智能视频监控、工业检测、航空航天等诸多领域&#xff0c;通过计算机视觉减少对人力资本的消耗&#xff0c;具有重要的现…

抗疫专题网页设计 致敬最美逆行者网页制作 疫情感动人物静态HTML网页

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

开发必装最实用工具软件与网站

声明&#xff1a;有些不管你是不是程序员都可以装的软件&#xff0c;我都备注了 我是一名java开发工程师嘛&#xff0c;就给大家分享一下实用的软件 这里我就不介绍idea、postman 如果只是代码编辑&#xff0c;可以看推荐一下我使用的开发工具_我认不到你的博客-CSDN博客 存放…

【软件测试】资深测试告诉你做好测试需求分析是有多么重要......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 测试需求到底是什么…

iwebsec靶场 文件上传漏洞通关笔记2-第02关 文件名过滤绕过

目录 第02关 文件名过滤绕过 1.打开靶场 2.源码分析 3.上传info.pHp 4.获取上传脚本地址 5.访问上传脚本 第02关 文件名过滤绕过 1.打开靶场 iwebsec 靶场漏洞库iwebsechttp://iwebsec.com:81/upload/02.php 随手上传脚本info.php&#xff0c;如下所示提示不能上传php文…

日志:logback、枚举

logback下载步骤&#xff1a; logback官网https://logback.qos.ch/index.html教程http://t.csdn.cn/xSK0I 点击SLF4J API进去&#xff0c;注意看右上角的标题是有变化的&#xff0c;是什么目录下就会显示什么目录&#xff0c;点击下载 然后一样点击右下角的Maven 下载这三个&a…

12月8日:thinkphp中的杂项

缓存 缓存概念及类型&#xff1a;什么是缓存 - 与非网 缓存(cache)一般存放在runtime目录下&#xff0c;页面请求一次将请求内容进行缓存&#xff0c;下一次再次访问&#xff0c;会直接访问到缓存内容&#xff0c;不会再次请求服务器&#xff0c;减少服务器压力 场景&#xff…

C++ Primer Plus第五版笔记(p151-200)

64 空语句存在危害 p155 65 复合语句是指用花括号括起来的&#xff0c;也被叫做块 一个块就是一个作用域 66 空块的概念p155 67 else只和最近的没配对的if 进行配对 &#xff08;悬垂else&#xff09; 68 case标签必须是一个整形常量表达式 69 default也是一种特殊的case标签 …

【github项目更新以及相关常用操作】

文章目录(一)更新github项目以及更新项目里某个特定文件(二)报错(三)github更改默认分支(一)更新github项目以及更新项目里某个特定文件 更新github项目&#xff1a; 1、首先确保你有github账号并且执行过上传操作&#xff08;有项目&#xff0c;项目里有文件 2、点击想更新的…

Oracle PrimaveraUnifier 数据定义(Data Definitions),S1

目录 Basic Cost Code Data Picker 数据类型 数据长度 输入方式 Oracle Primavera Unifier数据定义描述了如何将数据输入到Unifier中并存储。数据定义是构建数据元素&#xff08;表单字段&#xff09;的基础。有三种类型的数据定义&#xff1a; BasicCost CodeData PickerBasic…

ABP框架数据库改为MySQL

项目中如果需要其他方式数据库的支持&#xff0c;那么需要先删除之前的支持程序集&#xff0c;再引入相应的支持程序集。 1、 移除默认SQL Server相关包 在EntityFrameworkCore项目下移除包Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Design 2…

如何精准分析特定用户的应用性能问题?这两个功能您一定要了解

应用发布后&#xff0c;尤其在发布初期&#xff0c;我们要格外关注应用的性能稳定性&#xff0c;如ANR、画面卡顿、加载慢等问题&#xff0c;如果不能及时被监测及解决&#xff0c;将会给用户带来非常糟糕的体验&#xff0c;导致低评、差评&#xff0c;甚至造成部分意向用户直接…

.net开发安卓入门 - Hello world!

.net开发安卓入门 - Hello world!前言新建项目启动调试调试效果添加Hello World效果安卓样式常见属性介绍第一类:属性值为true或false第二类&#xff1a;属性值必须为id的引用名第三类&#xff1a;属性值为具体的像素值&#xff0c;如30dip&#xff0c;40px第四类&#xff1a;布…

Python如何解析json数据

json 库可以自字符串或文件中解析JSON。 该库解析JSON后将其转为Python字典或者列表。它也可以转换Python字典或列表为JSON字符串。 解析JSON 创建下面包含JSON数据的字符串 json_string ‘{“first_name”: “Guido”, “last_name”:“Rossum”}’ 它可以被这样解析&#…

官方!杭州市第三批重点建设人工智能应用场景发布,创邻科技Galaxybase入选

近日&#xff0c;杭州市经济和信息化局公开发布《2022年杭州市第三批重点建设的人工智能应用场景清单》&#xff0c;对智慧城市、智慧交通、智慧教育、智慧金融等9个细分领域的申报项目进行遴选&#xff0c;最后以浙江大学、杭州城市大脑、顺丰速运为代表的46个人工智能场景脱颖…