php审计-最经典的_GET[‘id‘]和POST[‘id‘]注入

news/2024/7/5 19:20:52 标签: php审计

这里,_GET[‘id’]和_POST[‘id’]很多人都知道,,
但我们做php审计,后面的宽字节注入和二次注入都会和mysql交互,那审计这两段源码就非常重要。

这里建个php,放到www下面,
GET型 如果下面不带前端源码,写成这样也行。

<?php  

定义一个变量$conn通过mysql_connect(server:'localhost',username:'root',passsword:'root');
函数建立mysql连接

下一步我们用一个变量$sql or $a 接受查询语句

 $a = "select * from admin_table where id='$id'";

第三步,我们通过mysql_query()函数做数据库查询,这个函数返回值是false or true ,查询成功或失败对mysql没有影响,成功返回数据,失败了返回mysql_error()函数。


 $result = mysql_query($a) or die(mysql_error());

完整源码

<?php
$id=$_GET['id'];
$conn = mysql_connect('localhost','root','root');
mysql_select_db("admin",$conn);
$a = "select * from admin_table where id='$id'";
$result = mysql_query($a) or die(mysql_error());
while ($row = mysql_fetch_array($result)){
    echo "ID:".$row['id']."<br>";
    echo "USERNAME:".$row['username']."<br>";
    echo "PASSWORD:".$row['password']."<br>";
}
mysql_close($conn);
echo "<hr>";
echo $a;
?>

我们站点做测试
GET传入一个参数?id=1
在这里插入图片描述在这里插入图片描述

看源码,我们做的字符型,id用单引号包围,构造1’–+ or 1’# 闭合
在这里插入图片描述
这里是字符型,,如果是数字型,,源码换成

$a = "select * from admin_table where id=$id";

判断数字型 :$id-1|| $id+1 id后加引号报错但不能闭合,变量没有引号包围,都算数字型

然后我们来写_POST[‘id’]的注入;
先写一个前端页面,注意name的值,

 <form action="sqlinjection1.php" method="post">
        账号: <input type="text" name="username"><br>
        密码: <input type="password" name="password">
        <input type="submit" name="login" >
 </form>

然后用前面学的isset函数做登录检测

 if(!isset($_POST['login'])){
    echo "false";}

同样先函数myql_connect(xxx,xxx,xxx)建立连接,mysql_select_db选中活动数据库,,

然后开始写sql语句,POST这两种写法都可以’ " .$username." ’ " 闭合也行

  $a = "select * from admin_table where username='$username'";
  //$a = "select * from admin_table where username='".$username."'";

用$result变量接受查询结果,查询成功,用mysql_fetch_array函数传参赋值,查询失败,通过 mysql_error()函数处理

  while($row = mysql_fetch_array($result)){
        $db_username = $row['username'];
        $db_password = $row['password'];
    }

然后如果查询的数据内容:账号和密码和输入的匹配,那么输出success,登录成功。登录失败,设置断点,看是否$sql做了查询,

if($db_password== $password && $db_username==$username){
        echo "success";
}
else{
        echo "false"."<br>";
       // echo $db_username.$db_password."<br>";
        //echo "pasword:".$password;

    }

完整源码

 <?php

if(!isset($_POST['login'])){
    echo "false";
}else{
    $username = $_POST['username'];
    $password = $_POST['password'];
    $conn = mysql_connect('localhost','root','root');
    mysql_select_db('admin',$conn);
    //$a = "select * from admin_table where username='".$username."'";
    $a = "select * from admin_table where username='$username'";
    //$a = "select * from admin_table where username='admin' or 1=1"
    $result = mysql_query($a) or die(mysql_error());
    while($row = mysql_fetch_array($result)){
        $db_username = $row['username'];
        $db_password = $row['password'];
    }
    if($db_password== $password && $db_username==$username){
        echo "success";
    }else{
        echo "false"."<br>";
       // echo $db_username.$db_password."<br>";
        //echo "pasword:".$password;

    }

}

在这里插入图片描述
在这里插入图片描述
注意看这里我是做了万能密码的,但他没有登录成功

 $a = "select * from admin_table where username='admin' or 1=1#"

网上对万能密码解释都解释不清楚,,我们看这里,,首先构造了’ 和前面的闭合,,通过#注释掉后面的内容,,所以我们做查询返回的是整个表

这里看navicat
在这里插入图片描述
看这里,我们通过if函数对查询出来的结果和输入的结果做匹配,
在这里插入图片描述这里做了断点,很明显看到数据库查询出
username=Guest password=4321
但没绕过登录,,如果登录检测只对查询mysql中是否存在记录,而不对输入做检测,那么这里就成了万能密码。。


http://www.niftyadmin.cn/n/929231.html

相关文章

Vue安装ant-design-vue和ElementUI

前提已经安装了git和node下 使用命令: npm install ant-design-vue --save 复制代码 或者 yarn add ant-design-vue 复制代码 安装ant-design-vue相关插件之后&#xff0c;然后在项目的核心文件引入相关的东西&#xff0c;在src目录下的main.js引入 import Antd from ant-desi…

Flutter通过底部导航栏实现页面的跳转

放自己定义的BottomNavigationWidget 这个组件的核心代码 import package:flutter/material.dart; import pages/home.dart; import pages/map.dart; import pages/timer.dart;void main(){runApp(BottomNavigationWidget()); }class BottomNavigationWidget extends StatefulW…

php审计--POST[‘id‘]二次注入-GET[‘id‘]宽字节注入

POST[‘id’]二次注入在网站业务在注入点出现在注册页reg.php 我们在注册的时候&#xff0c;如果’ union select 1,2,3,4#这样的语句能带入数据库&#xff0c;但没有直接利用办法&#xff0c;那就能通过查询search.php来sql注入 前端这里写一个Form <form action"reg…

Senparc.Weixin微信开发(1) 开发验证

官方系列教程 http://www.cnblogs.com/szw/archive/2013/05/20/3089479.html 登录微信公众平台后-左侧找到开发--启用服务器配置 这样&#xff0c;我们才可以将微信公众平台的功能整合到我们自己的网站上面 启用并设置服务器配置后&#xff0c;用户发给公众号的消息以及开发者需…

php审计-->回调与反向正则匹配代码执行-可控参数$a导致命令执行

这里说一点&#xff0c;代码执行和命令执行&#xff0c;都需要php.ini关闭safe_mode的情况下。。 如果不能获取环境变量&#xff0c;当然也可以通过com组件或全局变量&#xff0c;但我们只对这种类型 $cmd $_GET[cmd]代码执行&#xff0c;这里有两个传小马常用的危险函数 eval…

Build tool

什么是构建工具 构建工具能够帮助你创建一个可重复的、可靠的、携带的且不需要手动干预的构建。构建工具是一个可编程的工具&#xff0c;它能够让你以可执行和有序的任务来表达自动化需求。假设你想要编译源代码&#xff0c;将生成的class文件拷贝到某个目录&#xff0c;然后将…

php审计--任意文件上传配合目录文件包含getshell

在黑盒中 源码 数据库配置文件都是很不好找的&#xff0c;&#xff0c;但源码审计不同 所有的漏洞&#xff0c;成因都是相同的&#xff0c;但我们自以最基础的作为代表&#xff0c; 这里文件上传这个点可以配合文件包含一块利用&#xff0c;当某个站对数据处理不严时&#xff…

wpf 右下角弹出窗

wpf 右下角弹出窗 原文:wpf 右下角弹出窗自己写的wpf 弹出框&#xff0c;欢迎拍砖&#xff0c;动画都写在了后台代码&#xff0c;前台代码不太重要&#xff0c;用了一下iconfont&#xff0c;具体样式我就不贴出来了&#xff0c;本次主要是后台代码的动画 需要有父级窗口才可以使…