php代码审计基础笔记-90sec
php重要知识点总结(PHP网络开发必背)
PHP网站开发必用知识点总结,函数一览,开发必背魔术方法__construct()当实例化一个对象的时候,这个对象的这个方法首先被调用。
__destruct() 当删除一个对象或对象操作终止的时候,调用该方法。
__get()当试图读取一个并不存在的属性的时候被调用。
__set()当试图向一个并不存在的属性写入值的时候被调用。
__call() 当试图调用一个对象并不存在的方法时,调用该方法。
__toString()当打印一个对象的时候被调用__clone() 当对象被克隆时,被调用__isset()__unset()__autoload($classname)__sleep()__wakeup()系统常量__FILE__ 当前文件名__LINE__ 当前行数__FUNCTION__ 当前函数名__CLASS__ 当前类名__METHOD__ 当前对象的方法名PHP_OS 当前系统PHP_VERSION php版本DIRECTORY_SEPARATOR 根据系统决定目录的分隔符/\PATH_SEPARATOR 根据系统决定环境变量的目录列表分隔符; :E_ERROR 1E_W ARNING 2E_PARSE 4E_NOTICE 8M_PI 3。
141592$_SERVER$_ENV 执行环境提交至脚本的变量$_GET$_POST$_REQUEST$_FILES$_COOKIE$_SESSION$_GLOBALS输出echo //Output one or more stringsprint //Output a stringprint_r() //打印关于变量的易于理解的信息。
var_dump() //打印变量的相关信息var_export()//输出或返回一个变量的字符串表示printf("%。
1f",$num) //Output a formatted stringsprintf() //Return a formatted string编码转换string mb_convert_encoding (string $str , string $to_encoding [,mixed $from_encoding ] )iconv();时间date_default_timezone_set("PRC");date(”Y—m—d H:i:s”);time();date(”Y—m-d H:i:s”,time()+3600)ini_set('date.timezone’, 'PRC');msec sec microtime()以秒返回时间戳explode(' ’,microtime())错误处理@1/0error_reporting(E_ALL) 显示所有错误error_reporting(0)trigger_error(”Cannot divide by zero", E_USER_ERROR);try{throw new Exception(”执行失败");}catch (Exception $ex){echo $ex;}字符串处理string trim(”eee ") trim (’ffffe’,’e’) //ltrim rtrimarray explode(".", ”fff.ff。
90sec安全文档第一期
DOS 效果: 服务器内存使用:激增 90 Security Team5 l! l" b7 S) d 服务器 CPU 使用:激增 - 专注信息安全) K [' w& x4 M 服务器响应:不能响应正常请求 90 Security Team8 U6 {7 I$ v9 M. l, c* y - 专注信息安全/ H- ^4 O+ J; e9 W3 Q | 威胁三:HTTP RANGE DOS90 Security Team1 n& L Z) N: m" l 只需要一个请求数据包就能折腾服务器的一种攻击方式。9 K! HTTP 头字段 Range 用于文件分段下载。 迅雷, PDF 在线阅读都使用了这个功能。 这个字段也可以被用于 DOS 服务器。90sec-信息安全团队 9 B- J" w+ b1 s 攻击数据包如下: HEAD /file.rmvb HTTP/1.190 Security Team- t$ E" f v* n* n* g- S% S Host: Range: bytes=0-,5-0,5-1,5-2,5-3,5-4,,,,,2 K0 o$ J/ b1 F Accept-Encoding: gzip Connection: close 这里是我们自己的交流平台, 是属于我们 90sec 所有成员的技 术分享平台!6 I' G5 p1 n) v- Q Web 服务器收到这个包是,会将 file.rmvb 文件大量的小片段,然后使用 gzip 加 压下片段。分片后加压过程会消耗服务器大量资源,造成 DOS。 - 专注信息安 全* |* E6 \6 t+ f 参考: /?p=% h1 ]. i# B0 参考:/exploits/17696/ 威胁四:HTTP Slow Read + s. P! R8 ^/ t" K 原理:向 Web 服务器发送正常合法的 read 请求,比如下载文件。在文件下载时, 将 TCP 滑动窗口 size 设为 1 或者 2,这样服务器就会以非常缓慢的速度发送文 件,文件将长期滞留在服务器内存中,消耗资源,造成 DOS。 工具:/p/slowhttptest/90 Security Team& L" S 参考:/artic-of-service-attack/ 威胁五:hash 碰撞 DOS 参考: /showthread.php?t=145634 - A( b- U( ^, Y 实验过的朋友可能发现,这个 DOS 会造成服务 CPU 利用率 100%,但是某些服 务器依然能正常响应 HTTP 请求。原因我目前还没找到,这可能与 apache 或者 php 的配置有关。望知道答案的大牛解释
php笔记
1 php代码从右至左读取2(1)localhost:8080指向www文件夹(2)localhost:8080/phpinfo.php为php的系统环境变量,所有的参数都储存在这里3(1)//单行注释(2)/**/多行注释4 (1)echo 功能:在浏览器输出字符串;返回值void(2)print 功能:在浏览器输出字符串;返回值int(3)printf() 功能:在浏览器输出字符串返回值:字符串长度(4)sprintf功能:将字符串保存在内存中,使用echo在浏览器输出返回值:字符串5 在中英文切换过程中注意标点是在英文输入法下输入6 选中代码行ctrl+/(键)注释7 常量一旦被定义后就不能更改,常量要大写8 echo如果打印字符串需要加””,打印常量、变量不加。
9 php预定了很多常量,输入代码phpinfo()查看,echo打印需要加$;10 学习期间使用GBK编码,做项目采用UTF8,要改过来。
11 post 和get传输区别:post只传输不在网站处显示;get传输的同时显示在网址。
12 双引号里面可以放变量、转义字符进行解析出来13 (1) break退出循环,这个循环不再循环(2) exit退出整个程序(3) continue 退出当前本次循环继续下次循环14 写代码时注意for if等函数的{}和()与其他函数混在一起别搞错15相同名词key=键=下标=键=偏移量16当做字符串比较大小,从第一位开始比较17 for(…;…;) 分号;连接18 函数不区分大小写:Name()和nam()是同一个函数,变量区分大小写:$Name 和$name是不同变量。
19 include与require区别:include文件若不存在,出现两个警告,下面的程序可以继续运行;require文件若不存在,直接报错,接下来的程序也不能运行,推荐使用require.; incluce在用到时加载 ,require在一开始就加载20 header()作用:(1)重定向URL()21超全局变量:超全局变量是在全部作用域中始终可用的内置变量,注意:超级全局变量函数使用中括号[]而不是()22 isset()与empty()区别:isset检查变量是否存在,变量可以为空;empty()检查变量是否为空23 session存放于服务器端,一般存放1440秒,关闭浏览器即销毁,及时性(和cookie区别);cookie应用于会员登录,购物车,不存储在服务器,存在安全性隐患;session用于后台登陆,安全性高,一段时间不操作会过期24 zend studio查找代码ctrl+f25 /和\是有区别的26 文件格式jpg和jpeg的使用:牵涉到图片真实路径时jpg其余jpeg27 有数字规律的for循环没有的while循环28 类名第一个字母大写29 __construct()构造函数是类中的一个特殊函数,当使用new操作符创建一个类的实例时,构造函数将会自动调用(__construct两个下划线)30 php的public、protected、private三种访问控制模式的区别:public: 公有类型在子类中可以通过self::var调用public方法或属性,parent::method调用类方法在实例中可以能过$obj->var 来调用public类型的方法或属性.protected: 受保护类型在子类中可以通过self::var调用protected方法或属性,parent::method调用父类方法;在实例中不能通过$obj->var 来调用 protected类型的方法或属性private: 私有类型该类型的属性或方法只能在该类中使用,在该类的实例、子类中、子类的实例中都不能调用私有类型的属性和方法31 self 和parent 的区别a).在子类中常用到这两个对像。
PHP代码审计
CMSTOP远程代码执行
跟踪getpagin方法,进入pages方法。
CMSTOP远程代码执行
继续跟踪pages_url函数
当url变量不存在时,赋值自定义好的常量URL值。 当url变量中存在$page字符时,将$url进行执行(变量得到执行) 通过构造特殊url即可造成远程代码执行,如下链接: /?app=search&controller=index&id=$page&action=search&wd=a&test =${@eval($_POST[xxxx])}
3、上传之---截断
利用某些函数获取文件名%00截断原理,生产.php后缀(GPC off)
4、上传之---.htaccess应用
利用上传.htaccess文件控制执行后缀,达到任意解析 参考链接:/Article/html/3/62/2011/30782.htm
…...
Xss
<?php
$contetnt=$_GET[‟content']; echo $content; ?> 当提交/test.php?content=<script>alert(1)</script>即可实现弹窗。 由于通过get方式获取的变量未经过过滤导致直接输出js脚本,通过htmlspecialchars函数进行 Html实体转换输出即可大幅度降低xss产生的可能。 Xss不能直接造成危害,只能通过点击或者其他间接方式来触发该漏洞。 Xss漏洞利用因人而异,乌云G博士,xss发挥的出神入化(远程代码执行、埋雷式攻击)
CMSTOP远程代码执行
CmsTop 是一款基于PHP+MYSQL技术架构的内容管理系统,采用前后台分离技术, 前台为发布页面(全为html静态页面),用户包括各行业重点门户系统,涉足报页、广 电、网络媒体、教育等。 在cmstop当中搜索功能模块由于对搜索关键字未进行严格过滤,导致任意代码执行。 缺陷代码如下:
代码审计--php安全代码审计小结
0x01 工具篇编辑器(notepad++,editplus,UE等等,看个人习惯)TommSearch(字符串检索) || grepHttpProtocolDebugger(http协议调试器)Fiddler(分析包,改包)Seay PHP代码审计工具(php-code-audit分析辅助)几个有趣的项目dvwa(代码审计测试平台)phpmvsphp security audit checkPHP Vulnerability Hunter0x02 函数篇addslashed()添加反斜杠stripslashed()去掉反斜杠get_magic_quotes_gpc() 判断是否开启gpcexpode(".",$array)分割成数组is_numeric()判断是否为数字sizeof()判断长度trim() 去除字符串开头和末尾的空格或其他字符system() 输出并返回最后一行shell结果。
exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。
passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。
EscapeShellCmd(),把一个字符串中所有可能瞒过Shell而去执行另外一个命令的字符转义。
这些字符在Shell中是有特殊含义的,象分号(;),重定向(>)和从文件读入(<)等。
EscapeShellArg() 。
在给定的字符串两边加上单引号,并把字符串中的单引号转义,这样这个字符串就可以安全地作为命令的参数。
用popen()函数打开进程上面的方法只能简单地执行命令,却不能与命令交互。
但有些时候必须向命令输入一些东西,如在增加Linux的系统用户时,要调用su来把当前用户换到root才行,而su命令必须要在命令行上输入root的密码。
这种情况下,用上面提到的方法显然是不行的。
popen ()函数打开一个进程管道来执行给定的命令,返回一个文件句柄。
php中session的用法
学习笔记:谈谈PHP Session使用方法PHP有很多值得学习的地方,这里我们主要介绍PHP Session使用。
在PHP开发中对比起Cookie,session 是存储在服务器端的会话,相对安全,并且不像Cookie 那样有存储长度限制,下面我们就简单介绍PHP Session使用。
由于Session 是以文本文件形式存储在服务器端的,所以不怕客户端修改Session内容。
实际上在服务器端的Session 文件,PHP 自动修改session 文件的权限,只保留了系统读和写权限,而且不能通过ftp 修改,所以安全得多。
PHPChina 开源社区门户对于Cookie 来说,假设我们要验证用户是否登陆,就必须在Cookie 中保存用户名和密码(可能是md5 加密后字符串),并在每次请求页面的时候进行验证。
如果用户名和密码存储在数据库,每次都要执行一次数据库查询,给数据库造成多余的负担。
因为我们并不能只做一次验证。
为什么呢?因为客户端Cookie 中的信息是有可能被修改的。
假如你存储$admin 变量来表示用户是否登陆,$admin 为true 的时候表示登陆,为false 的时候表示未登录,在第一次通过验证后将$admin 等于true 存储在Cookie,下次就不用验证了,这样对么?错了,假如有人伪造一个值为true 的$admin 变量那不是就立即取的了管理权限么?非常的不安全。
而Session 就不同了,Session 是存储在服务器端的,远程用户没办法修改session 文件的内容,因此我们可以单纯存储一个$admin 变量来判断是否登陆,首次验证通过后设置$admin 值为true,以后判断该值是否为true,假如不是,转入登陆界面,这样就可以减少很多数据库操作了。
而且可以减少每次为了验证Cookie 而传递密码的不安全性了(session 验证只需要传递一次,假如你没有使用SSL 安全协议的话)。
PHP编程入门的基本语法知识点总结
PHP编程入门的基本语法知识点总结PHP编程入门的基本语法知识点总结想要学好PHP,怎么能够不了解基本的语法知识呢?下面是店铺为大家搜集整理出来的有关于PHP编程入门的基本语法知识点总结,一起来学习一下吧!一、何为phpPHP,即“PHP: Hypertext Preprocessor”,是一种被广泛应用的开源通用脚本语言,尤其适用于Web 开发并可嵌入HTML 中去。
它的语法利用了C、Java 和Perl,易于学习。
该语言的主要目标是允许 web 开发人员快速编写动态生成的 web 页面,但 PHP 的用途远不只于此。
简单来说,就是php是一种脚本语言,可以做很多事情。
①服务器端脚本②命令行脚本③编写桌面程序二、开始php(1)下载php解释器,其实win下面,最简单的还是wamp这个软件,下载下来什么都有了...(2)win下面貌似还需要,mscvr110.dll 这个链接库,vc2012运行库,安装即可(3)ide,无耻的使用了phpStorm,等哥有钱了一定给你补回来, so...三、入门引导(1)简单的输出34567891011121314151617181920 * Created by PhpStorm. * User: LENOVO * Date: 2014/9/28 * Time: 14:51 */ // 输出PHP 详细信息 echo phpinfo(); //C:php-5.6.1-Win32-VC11-x86php.exe D:dizzyphp_testindex.php //phpinfo() //PHP Version => 5.6.1 // //System => Windows NT LENOVO-PC 6.1 build 7600 (Windows 7 Ultimate Edition) i586 //Build Date => Sep 24 2014 18:54:12 //Compiler => MSVC11 (Visual C++ 2012)//Architecture => x86//Configure Command => cscript /nologo configure.js "--enable-snapshot-build" "--disable-isapi" "--enable-debug-pack" "--without-mssql" "--without-pdo-mssql" "--without-pi3web" "--with-pdo-oci=c:php-sdkoraclex86instantclient_12_1sdk,shared" "--with-oci8-12c=c:php-sdkoraclex86instantclient_12_1sdk,shared""--enable-object-out-dir=../obj/" "--enable-com-dotnet=shared" "--with-mcrypt=static" "--without-analyzer" "--with-pgo"//Server API => Command Line Interface(2)简单的表单处理四、基本语法(1)PHP 标记(2)从HTML 中分离(3)指令分隔符,注释PHP 需要在每个语句后面用分隔符结束指令。
php注释规范
php注释规范PHP注释规范(PHP Commenting Standards)是一套关于在PHP代码中编写注释的指南,旨在提高代码可读性和可维护性。
以下是关于PHP注释规范的一些要点,共计1000字。
1. 文件注释(File Comments):在每个PHP文件的开头,应该包含一个文件注释。
文件注释应该包含以下信息:- 文件的作者- 文件的版本号- 文件的创建日期和最后修改日期- 文件的目的和功能- 文件中包含的类和函数的概述这样的文件注释可以让其他开发者快速了解文件的基本信息,从而提高代码的可维护性。
2. 类和接口注释(Class and Interface Comments):在每个类和接口的开头,应该包含一个类和接口注释。
类和接口注释应该包含以下信息:- 类或接口的作者- 类或接口的版本号- 类或接口的创建日期和最后修改日期- 类或接口的目的和功能- 类或接口的属性和方法的概述这样的类和接口注释可以让其他开发者快速了解类或接口的基本信息,从而提高代码的可读性和可维护性。
3. 函数和方法注释(Function and Method Comments):在每个函数和方法的开头,应该包含一个函数和方法注释。
函数和方法注释应该包含以下信息:- 函数或方法的作者- 函数或方法的版本号- 函数或方法的创建日期和最后修改日期- 函数或方法的参数和返回值的类型和说明- 函数或方法的目的和功能这样的函数和方法注释可以让其他开发者快速了解函数或方法的基本信息,从而提高代码的可读性和可维护性。
4. 变量注释(Variable Comments):在每个变量的声明处,应该包含一个变量注释。
变量注释应该包含以下信息:- 变量的类型和说明- 变量的来源和用途- 变量的限制和约束这样的变量注释可以让其他开发者快速了解变量的基本信息,从而提高代码的可读性和可维护性。
5. 块注释(Block Comments):在代码中的重要的块处,应该使用块注释进行解释。
php系列教程之php语法结构学习(PHP入门-PHP基本语法)
php系列教程之php语法结构学习(PHP入门-PHP基本语法)1.PHP基本语法(一)php可以做什么认识PHP代码标识使用不同的四对标记指令分隔符程序注释变量什么是变量如何定义变量变量名的命名规则4.1PHP标量类型—整型4.2标量类型—浮点型4.3PHP标量类型—字符串4.4标量类型—布尔类型4.5第一种特殊类型—资源4.6PHP第二种特殊类型—空类型4.7第一种复合类型—数组4.8第二种复合类型—对象超全局变量empty(函数isset(函数常量系统常量内置常量php可以做什么php是一种可以在服务器端运行的编程语言,可以运行在Web服务器端。
php是一门后台编程语言,是目前比较主流的后台编程语言。
认识一下PHP及其功能。
运行在服务器端:学会了PHP,就可以指挥服务器给你干活,甚至是搞破坏^_^(千万不能真这么做咯),WEB网站的大部分数据都是存储在服务器端的,PHP就是用来处理这些存储在服务器的数据的(功能强大吧)。
跨平台:服务器可以是多种平台的服务器,比如Linu某、Windows、Uni某,你都可以指挥(不用怕只能指挥一种服务器啦吧)。
脚本语言:它是通过编写脚本,也就是一行行的计算机指令(也可以理解为特定的英文单词),来指挥服务器来工作的,因此,在编写PHP的过程其实就是与老外(服务器成老外啦)交流的过程,交流的语言就是PHP。
免费:免费使用(天下还真有免费的午餐)。
文件后缀名为.php结尾,上传到Web服务器的文档根目录下,通过浏览器访问Web服务器管理下的PHP文件,就可以运行PHP文件。
使用不同的四对标记以<?php开始和以?>结束标记是标准风格,这是PHP推荐使用的标记风格。
以<script language="php">开始和<script>结束是长风格标记,这种标记最长,总是可用的,但我们并不常用。
以<?开始和以?>结束标记是简短风格的标记,是最简单的,但是系统管理员偶尔会禁用掉它,因为它会干扰XML文档的声明。
PHP代码审计分段讲解(1)
PHP代码审计分段讲解(1)快乐的暑期学习⽣活+101 extract变量覆盖<?php$flag='xxx';extract($_GET);if(isset($shiyan)){$content=trim(file_get_contents($flag));if($shiyan==$content){echo'ctf{xxx}';}else{echo'Oh.no';}}>变量覆盖漏洞:⾃定义的参数值替换原有变量值的情况源代码使⽤extract($_GET)接收了GET请求传输进来的数据,并且将键名和键值转换为变量名和变量的值,可以看到有$flag变量是在extract之前就定义了的,file_get_contents()函数把整个⽂件读⼊⼀个字符串中。
正常的代码流程读取$flag⽂件并且去除两边的空格,将结果存储在$content⾥⾯,然后使⽤我们传⼊的$shiyan变量与$content进⾏⽐较,如果相同的话就输出flag,否则输出 Oh no。
如果$flag⽂件存在的话,因为是题⽬服务器上的⽂件,我们没有权限知道⾥⾯的内容,在其读取到$content变量⾥⾯的时候,更⽆法与其进⾏⽐较,进⽽获取flag突破点在于:extract()函数在flag变量值的下⾯,所以我们可以以GET⽅式对$flag重新赋值,进⽽读取⼀个不可能存在的⽂件,使$content为空,传⼊$shiyan变量也为空,即可获取flag如图:02 绕过过滤的空⽩字符<?php$info = "";$req = [];$flag="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";ini_set("display_error", false); //为⼀个配置选项设置值error_reporting(0); //关闭所有PHP错误报告if(!isset($_GET['number'])){header("hint:26966dc52e85af40f59b4fe73d8c323a.txt"); //HTTP头显⽰hint 26966dc52e85af40f59b4fe73d8c323a.txtdie("have a fun!!"); //die — 等同于 exit()}foreach([$_GET, $_POST] as $global_var) { //foreach 语法结构提供了遍历数组的简单⽅式foreach($global_var as $key => $value) {$value = trim($value); //trim — 去除字符串⾸尾处的空⽩字符(或者其他字符)is_string($value) && $req[$key] = addslashes($value); // is_string — 检测变量是否是字符串,addslashes — 使⽤反斜线引⽤字符串}}function is_palindrome_number($number) {$number = strval($number); //strval — 获取变量的字符串值$i = 0;$j = strlen($number) - 1; //strlen — 获取字符串长度while($i < $j) {if($number[$i] !== $number[$j]) {return false;}$i++;$j--;}return true;}if(is_numeric($_REQUEST['number'])) //is_numeric — 检测变量是否为数字或数字字符串{$info="sorry, you cann't input a number!";}elseif($req['number']!=strval(intval($req['number']))) //intval — 获取变量的整数值{$info = "number must be equal to it's integer!! ";}else{$value1 = intval($req["number"]);$value2 = intval(strrev($req["number"]));if($value1!=$value2){$info="no, this is not a palindrome number!";}else{if(is_palindrome_number($req["number"])){$info = "nice! {$value1} is a palindrome number!";}else{$info=$flag;}}}echo $info;代码⽐较长,但是不慌,从上往下看,⽤到函数的时候再到函数⾥再去看构造if(!isset($_GET['number'])){header("hint:26966dc52e85af40f59b4fe73d8c323a.txt"); //HTTP头显⽰hint 26966dc52e85af40f59b4fe73d8c323a.txtdie("have a fun!!"); //die — 等同于 exit()}foreach([$_GET, $_POST] as $global_var) { //foreach 语法结构提供了遍历数组的简单⽅式foreach($global_var as $key => $value) {$value = trim($value); //trim — 去除字符串⾸尾处的空⽩字符(或者其他字符)is_string($value) && $req[$key] = addslashes($value); // is_string — 检测变量是否是字符串,addslashes — 使⽤反斜线引⽤字符串 }}在这⾥使⽤GET⽅式传⼊number参数的值,同时也可以通过GET或者POST的⽅式传⼊其他参数的值if(is_numeric($_REQUEST['number'])) //is_numeric — 检测变量是否为数字或数字字符串{$info="sorry, you cann't input a number!";}使⽤is_numeric函数检测传⼊的$number是否为数字,不能传⼊数字elseif($req['number']!=strval(intval($req['number']))) //intval — 获取变量的整数值{$info = "number must be equal to it's integer!! ";}intval函数获取变量的整数值strval — 获取变量的字符串值这⼀步需要传⼊的是整数,也就与第⼀个if条件相⽭盾这两部分都可以通过在number参数前加%00进⾏绕过else{$value1 = intval($req["number"]);$value2 = intval(strrev($req["number"]));if($value1!=$value2){$info="no, this is not a palindrome number!";}else{if(is_palindrome_number($req["number"])){$info = "nice! {$value1} is a palindrome number!";}else{$info=$flag;}}}echo $info;这⼀部分第⼀步需要$value1和$value2相等,strrev函数令number取反,所以$number需要是⼀个回⽂数字,如12321,第⼆步需要绕过is_palindrome_number函数,使其返回值为false,其函数为:function is_palindrome_number($number) {$number = strval($number); //strval — 获取变量的字符串值$i = 0;$j = strlen($number) - 1; //strlen — 获取字符串长度while($i < $j) {if($number[$i] !== $number[$j]) {return false;}$i++;$j--;}return true;}该函数将$number数字转换为字符串,然后进⾏⾸尾依次⽐较,⾸尾相同则返回true,否则返回false。
PHP代码审计
PHP代码审计目录1. 概述 (2)2. 输入验证和输出显示 (2)1. 命令注入 (3)2. 跨站脚本 (3)3. 文件包含 (4)4. 代码注入 (4)5. SQL注入 (4)6. XPath注入 (4)7. HTTP响应拆分 (5)8. 文件管理 (5)9. 文件上传 (5)10. 变量覆盖 (5)11. 动态函数 (6)3. 会话安全 (6)1. HTTPOnly设置 (6)2. domain设置 (6)3. path设置 (6)4. cookies持续时间 (6)5. secure设置 (6)6. session固定 (7)7. CSRF (7)4. 加密 (7)1. 明文存储密码 (7)2. 密码弱加密 (7)3. 密码存储在攻击者能访问到的文件 (7)5. 认证和授权 (7)1. 用户认证 (7)1. 函数或文件的未认证调用 (7)3. 密码硬编码 (8)6. 随机函数 (8)1. rand() (8)2. mt_srand()和mt_rand() (8)7. 特殊字符和多字节编码 (8)1. 多字节编码 (8)8. PHP危险函数 (8)1. 缓冲区溢出 (8)2. session_destroy()删除文件漏洞 (9)3. unset()-zend_hash_del_key_or_index漏洞 (9)9. 信息泄露 (10)1. phpinfo (10)10. PHP环境 (10)1. open_basedir设置 (10)2. allow_url_fopen设置 (10)3. >allow_url_include设置 (10)4. safe_mode_exec_dir设置 (10)5. magic_quote_gpc设置 (10)6. register_globals设置 (11)7. safe_mode设置 (11)8. session_use_trans_sid设置 (11)9. display_errors设置 (11)10. expose_php设置 (11)1.概述代码审核,是对应用程序源代码进行系统性检查的工作。
PHP代码审计
PHP代码审计title: PHP代码审计审计前的准备编辑器:sublime textnotepad++PHPStorm + Xdebug⼀些其他的编辑器审计辅助插件Seay源代码审计系统RIPS正则调试器超级加解密转换⼯具开始之前:1、DVWA靶场练习2、CTF中⼀些代码审计相关的题南邮CTFBugku CTF多看看别⼈代码审计的⽂章通读全⽂的⽅法index⽂件,index⽂件时⼀个程序的⼊⼝⽂件。
所以通常我们只要读⼀读index⽂件就可以⼤致了解整个程序的架构,运⾏的流程,包含的⽂件,建议最好先将⼏个核⼼⽬录的index⽂件都简单读⼀遍函数集⽂件,⼀般在index⽂件中都会包含函数集⽂件,通常命名为functions,common等关键字,这些⽂件都是⼀些公共的函数,提供给其他⽂件统⼀调⽤配置⽂件,通常命名中包括config关键字。
⾥⾯包含⼀些功能性配置选项以及数据库配置信息,还可以注意下参数值使⽤单引号还是双引号安全过滤⽂件,⽂件过滤⽂件对我们做代码审计⾄关重要,关系到我们挖掘到的可以点能不能利⽤,通常命名中有filter,safe,check 等关键字,这类⽂件主要是对参数进⾏过滤。
敏感函数回溯参数过程直接使⽤⼯具可以扫出⼀些敏感的参数例如,通过select、insert 结合from和where等关键字,判定是⼀条SQL语句,然后通过对字符串的识别,判断这个SQL语句⾥边的参数有没有拼接或者单引号过滤HTTP头⾥⾯的HTTP_CLIENT、HTTP_X_FORWARDFOR等获取到的IP地址,经常没有过滤就直接凭借到SQL语句中,并且因为实在$_SERVER变量中,不受GPC的影响,因此可以查找HTTP_CLIENT、HTTP_X_FORWARDFOR关键字来快速寻找漏洞定向功能的分析:程序初始安装站点信息泄露⽂件上传⽂件管理登录认证数据库备份恢复找回密码验证码代码审计之重装漏洞漏洞复现访问提交数据库信息,⽤brupsuite抓包。
php代码审计入门前必看
php代码审计⼊门前必看1. ⾸先先介绍什么是代码审计?代码审计:是指针对源代码进⾏检查,寻找代码中的bug,这是⼀项需要多⽅⾯技能的技术包括:对编程的掌握,漏洞形成原理的理解,系统和中间件等的熟悉2.为什么要进⾏代码审计,这也是对刚进⼊代码审计领域的⼩⽩爱问的问题?代码审计是企业安全运营以及安全从业者必备的基础能⼒代码审计在很多场景中都需要⽤到,⽐如:企业安全运营,渗透测试,漏洞研究。
⽬前已经有不少公司在推⼴微软的软件SDL(Security Development Lifecycle,安全开发周期)他涵盖需求分析--->设计---->编码---->测试----->发布------>维护,安全贯穿整个软件开发周期其中设计,编码和测试是整个SDL的核⼼,安全问题⼤多在这⾥被解决掉。
其中在安全设计这⼀块,必须要⾮常了解漏洞形成的原理,纵观全局。
⽽在代码实现也就是编码阶段,安全依靠于编程⼈员的技术基础以及前期安全设计的完整性。
然后才是测试,测试包括:⽩盒测试,⿊盒测试,灰盒测试。
⿊盒测试⼜叫功能测试,是指在不接触代码的情况下,测试系统的功能是否存在bug,是否满⾜设计需求。
⽽⽩盒测试就是我们说的代码审计,以开放的形式从代码层⾯寻找bug,如果发现有bug则返回修复,直到没有bug才允许软件发布上线渗透测试⼈员掌握代码审计是很重要的,因为我们在渗透过程中经常需要针对⽬标环境对payload进⾏调试。
另外,如果通过扫描器扫描到⽬录下的1⼀个源代码备份包,通常攻击者都会利⽤源代码包找到⼀些配置⽂件,因为⾥⾯有数据库,API等⼀类配置。
如果环境有限制,⽐如⽬标站点数据库限制连接ip等,那么⼯具⼩⼦可能在源代码包进⾏的漏洞利⽤也就到此为⽌。
对于懂代码审计的⼈,结果就完全就不同了,它可以对源代码进⾏安全审计,发现⽹站代码⾥存在的漏洞,然后利⽤挖掘到的漏洞进⾏渗透。
3.这个时候有⼩⽩想说:那代码审计对编程能⼒的要求是什么?代码审计对编程语⾔的基础有⼀定要求,⾄少要能看懂代码,这⾥说的看懂代码不是简单的理解⼏个if.....else语句和for循环,⽽是能看的懂代码的逻辑,即使有很多的代码或函数没有见过,也是可以去百度进⾏搜索查找的。
PHP代码审计之入门实战
PHP代码审计之⼊门实战系统介绍CMS名称:新秀企业⽹站系统PHP版官⽹:版本:这⾥国光⽤的1.0 正式版(官⽹最新的版本有毒,⽹站安装的时候居然默认使⽤远程数据库???迷之操作那站长的后台密码岂不是直接泄露了?疑似远程数据库地址:)下载地址:Windows下使⽤PHPStudy可以直接安装,搭建起来还是很简单的。
防护策略虽然这是⼀个不知名的⼩系统,但是安全加固还是考虑到的,很多本应该有漏洞的地⽅均被加固修复了,导致国光我⼀开始⼀直碰壁,=,= 废话不多说,下⾯直接列举本次审计碰到的⼀些坑。
伪造IP注⼊过滤思路⾸先在后台发现有记录⽤户IP的功能:哦豁,会不会有传说中的伪造IP地址注⼊攻击呢???使⽤数据库监测⼯具,发现在注册⽤户发表评论的时候。
⽤户的IP地址也的确被带⼊SQL语句中查询了:select * from php_safe where saf_ip = '10.211.55.2' and saf_action = 'message'VSCode⾛起,根据关键词来查找相关功能代码:include/function.php//获取客户端IPfunction get_ip(){if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'),'unknown')){$ip = getenv('HTTP_CLIENT_IP');}elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'),'unknown')){$ip = getenv('HTTP_X_FORWARDED_FOR');}elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'),'unknown')){$ip = getenv('REMOTE_ADDR');}elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'],'unknown')){$ip = $_SERVER['REMOTE_ADDR'];}else{$ip = '0.0.0.0';}if(!is_numeric(str_replace('.','',$ip))){$ip = '0.0.0.0';}return $ip;}结果获取IP的关键防护代码:if(!is_numeric(str_replace('.','',$ip))){$ip = '0.0.0.0';}获取到的IP值,去除掉.后如果不是数字类型的话就重置为0.0.0.0,扑街,这条思路⾏不通,赶紧换个思路去存储型XSS过滤思路⽹站前台有留⾔功能,留⾔就会想到存储型XSS,2333 嗝:结果定位到留⾔函数的代码:index/module/info_main.phpfunction add_message(){safe('message');global $global,$smarty,$lang;$mes_email = post('email');$mes_type = post('type');$mes_title = post('title');$mes_text = post('text');$mes_show = post('show');if($mes_email == '' || $mes_type == '' || $mes_title == '' || $mes_text == ''){$info_text = $lang['submit_error_info'];}else{$mes_add_time = time();if($mes_show != '2'){$mes_show = '0';}$obj = new message();$obj->set_value('mes_user_id',$global['user_id']);$obj->set_value('mes_type',$mes_type);$obj->set_value('mes_email',$mes_email);$obj->set_value('mes_title',$mes_title);$obj->set_value('mes_text',$mes_text);$obj->set_value('mes_add_time',$mes_add_time);$obj->set_value('mes_show',$mes_show);$obj->set_value('mes_lang',S_LANG);$obj->add();if(intval(get_varia('sentmail'))){$email_title = '您的⽹站有了新的留⾔';$email_text = "[$mes_type] $mes_title <br /> $mes_text";call_send_email($email_title,$email_text,$global['user_id'],$mes_email);}$info_text = $lang['submit_message'];}$smarty->assign('info_text',$info_text);$smarty->assign('link_text',$lang['go_back']);$smarty->assign('link_href',url(array('channel'=>'message')));}可以看到前台⽤户传⼊的数据经过了post()函数,追踪到post()函数的定义处:include/function.phpfunction post($val,$filter = 'strict'){return $filter(isset($_POST[$val])?$_POST[$val]:'');}??? 继续找到strict的定义处:include/function.php//严格过滤字符串中的危险符号function strict($str){if(S_MAGIC_QUOTES_GPC){$str = stripslashes($str);}$str = str_replace('<','<',$str);$str = str_replace('>','>',$str);$str = str_replace('?','?',$str);$str = str_replace('%','%',$str);$str = str_replace(chr(39),''',$str);$str = str_replace(chr(34),'"',$str);$str = str_replace(chr(13).chr(10),'<br />',$str);return $str;}可以发现我们的存储XSS所⽤到的尖括号完全被过滤掉了:$str = str_replace('<','<',$str);$str = str_replace('>','>',$str);这也导致了管理员后台可以直接看到XSS Payload ,场⾯⼀度⾮常尴尬:⽤户评论的核⼼代码也被过滤了:index/module/info_main.phpfunction add_comment(){safe('comment');global $global,$smarty,$lang;$channel = post('channel');$com_page_id = post('page_id');$com_email = post('email');$com_rank = post('rank');$com_text = post('text');if($channel == '' || $com_page_id == '' || $com_rank == '' || $com_email == '' || $com_text == ''){$info_text = $lang['submit_error_info'];}......}存储XSS 扑gai~前台⽤户CSRF判断思路⽹站有留⾔板和⽂章评论,如何存在CSRF越权的话可以在评论或者留⾔处贴构造好的CSRF链接,来进⾏CSRF攻击。
php代码审计整理
php代码审计整理⽬录使⽤说明主要是⽤来查询,ctrl+f 或从⽬录查找需要的信息题⽬主要是bugku上的代码审计,除了数字正则绕过以外都总结在了这⾥部分知识点未写完⼯具Seay代码审计Notepad++了解php存在的bug基本所有的php相关的问题都会收录在这⾥变量覆盖1x01.extract 变量覆盖定义和⽤法extract() 函数从数组中将变量导⼊到当前的符号表。
该函数使⽤数组键名作为变量名,使⽤数组键值作为变量值。
针对数组中的每个元素,将在当前符号表中创建对应的⼀个变量。
该函数返回成功设置的变量数⽬。
语法extract(array,extract_rules,prefix)漏洞产⽣:使⽤了默认设置攻击⽅法:制造变量名冲突,对于需要相等的值可以同时置空修复:设定⼀个冲突时的处理规则例题:bugku extract 变量覆盖<?php$flag='xxx';extract($_GET);if(isset($shiyan)) {$content=trim(file_get_contents($flag));if($shiyan==$content) { echo'flag{xxx}'; }else { echo'Oh.no'; } }?>payload:?shiyan=&content=1x02 $$导致的变量覆盖问题1x03 全局变量覆盖1x04 parse_str()变量覆盖1x05 import_request_variables()变量覆盖弱类型2x00 strcmp定义和⽤法strcmp() 函数⽐较两个字符串。
注释strcmp() 函数是⼆进制安全的,且对⼤⼩写敏感。
提⽰该函数与 strncmp() 函数类似,不同的是,通过 strncmp() 您可以指定每个字符串⽤于⽐较的字符数语法strcmp(string1,string2)返回值:0 - 如果两个字符串相等<0 - 如果 string1 ⼩于 string2>0 - 如果 string1 ⼤于 string2漏洞在5.3之前的php中,当两个带⽐较的字符串中存在类型错误时,显⽰了报错的警告信息后,返回0例题bugku strcmp⽐较字符串<?php$flag = "flag{xxxxx}";if (isset($_GET['a'])) {if (strcmp($_GET['a'], $flag) == 0) //如果 str1 ⼩于 str2 返回 < 0;如果 str1⼤于 str2返回 > 0;如果两者相等,返回 0。
PHP代码审计学习(1)——代码设计及流程
PHP代码审计学习(1)——代码设计及流程杂⾔⼀直计划学PHP代码审计但⼀直不在状态,翻了⼀下王叹之师傅的博客发现⼈家是体系化的学习,对⽐起来我实在是太浮躁了,回想起之前的⾯试,很多问题都是似懂⾮懂的,很多东西都太零碎,是要好好静下⼼来学东西了,要把这个PHP代码审计好好学,这⾥我是参照着教程和吴翰清的《代码审计企业级Web代码安全架构》学习的,因为之前读DVWA源代码的时候配置好了环境,我这⾥直接⽤WAMP+seay审计系统了跳过环境配置了,MVC架构 MVC是⼀种使⽤MVC设计创建的WEB应⽤程序的模式,MVC同时提供HTML,CSS,JS的完全控制 V即View视图是指⽤户看到并与之交互的界⾯。
⽐如由html元素组成的⽹页界⾯,或者软件的客户端界⾯。
MVC的好处之⼀在于它能为应⽤程序处理很多不同的视图。
在视图中其实没有真正的处理发⽣,它只是作为⼀种输出数据并允许⽤户操纵的⽅式。
M即model模型是指模型表⽰业务规则。
在MVC的三个部件中,模型拥有最多的处理任务。
被模型返回的数据是中⽴的,模型与数据格式⽆关,这样⼀个模型能为多个视图提供数据,由于应⽤于模型的代码只需写⼀次就可以被多个视图重⽤,所以减少了代码的重复性。
C即controller控制器是指控制器接受⽤户的输⼊并调⽤模型和视图去完成⽤户的需求,控制器本⾝不输出任何东西和做任何处理。
它只是接收请求并决定调⽤哪个模型构件去处理请求,然后再确定⽤哪个视图来显⽰返回的数据。
常见PHP框架 1、zendframwork: (ZF)是Zend公司推出的⼀套PHP开发框架 2、Yii由国⼈开发的重量级的框架 3、CakePHP是国外的框架 4.Symfony,是⼀套国外的PHP开源框架 5、CodeIgniter(CI)轻量级框架,运⾏速度快 6、CanPHP框架是⼀个简洁,实⽤,⾼效,遵循apache协议的php开源框架 7、Laravel 是⼀个简单优雅的 PHP web 开发框架 8、SlimFramework是⼀个简单的 PHP5 框架⽤来创建 RESTful 的 Web 应⽤ 9、ThinkPHP是⼀个快速、简单、⾯向对象的轻量级PHP开发框架 10、PHPUnit是⼀个轻量级的PHP测试框架 11、KYPHP⽀持多数据库,多语⾔,多模版,多app,多缓存,多编码格式,模板布局,⾃定义类,⾃动加载公共类库 12、initPHP是⼀款轻量级的php开发框架 13、SpeedPHP是⼀款全功能的国产PHP应⽤框架系统处理流程 获取请求=》全局过滤=》模块⽂件=》C函数内容=》M函数内容=》V显⽰审计⽅法 通读原⽂ ⽹站⽬录结构、函数集⽂件、配置⽂件、安全过滤⽂件、index⽂件 优点:了解程序的架构和业务逻辑,挖掘⾼质量漏洞,⼀般适合企业对⾃⾝的铲平审计 缺点:耗费时间多,程序⽐较⼤ 敏感关键字回溯 优点:可以快速⾼效挖出想要的漏洞,最常⽤的⽅法,判断敏感触发点的位置及上下⽂,追踪参数源头 缺点:覆盖不到逻辑漏洞的挖掘,不能了解程序的基本框架 查找可控变量 功能定向审计(推荐) 程序安装、⽂件上传、⽂件管理、登陆验证、备份恢复、找回密码 ⼀切皆有可能 ⼀切输⼊都是有害的,可以控制的变量 ⼀切进⼊函数的变量都是有害的,有的变量到达有利⽤价值的函数(危险函数)。
PHP代码审计2-常用超全局变量,常用命令注入,常用XSS漏洞审计,文件包含
PHP代码审计2-常⽤超全局变量,常⽤命令注⼊,常⽤XSS漏洞审计,⽂件包含超全局$GLOBALS — 引⽤全局作⽤域中可⽤的全部变量$_SERVER — 服务器和执⾏环境信息$_GET — HTTP GET 变量$_POST — HTTP POST 变量$_FILES — HTTP ⽂件上传变量$_REQUEST — HTTP Request 变量$_SESSION — Session 变量$_ENV — 环境变量$_COOKIE — HTTP Cookies已经被弃⽤的变量$_HTTP_COOKIE_VARS$_HTTP_ENV_VARS$_HTTP_GET_VARS$_HTTP_POST_FILES$_HTTP_POST_VARS$_HTTP_SERVER_VARS常⽤命令注⼊ 【当存在以下命令时,可能导致命令注⼊(不同系统,情况不同)】system():执⾏外部程序,并且显⽰输出string system ( string $command [, int &$return_var ] )同 C 版本的 system() 函数⼀样,本函数执⾏command参数所指定的命令,并且输出执⾏结果exec():执⾏⼀个外部程序string exec ( string $command [, array &$output [, int &$return_var ]] )exec() 执⾏command参数所指定的命令。
passthru():执⾏外部程序并且显⽰原始输出void passthru ( string $command [, int &$return_var ] )同函数类似, passthru() 函数也是⽤来执⾏外部命令(command)的。
当所执⾏的 Unix 命令输出⼆进制数据,并且需要直接传送到浏览器的时候,需要⽤此函数来替代或函数。
常⽤来执⾏诸如 pbmplus 之类的可以直接输出图像流的命令。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
漏洞(二)宽字节注入 [对字符]
如果发现 cms是GBK 只有看看 能不能宽字节注入
Sqlmap 的unmagicquotes.py 可以进行宽字测试
下面摘自p神写的:浅析白盒审计中的字符编码及SQL注射.pdf
解决宽字节注入办法:
mysql_query("SET character_set_connection=gbk,character_set_results=gbk,character_set_client=binary", $conn);
0x03 注入类型
1.Selcet 注入 这个常见就不说了
一般就是联查,要是报错开启也可以报错注入
2.Update 注入
p神做了一个教程关于bluecms这cms漏洞:
Get_ip() 直接用了X-FORWARDED-FOR
$sql = "UPDATE blue_user SET last_login_time = '$last_login_time', last_login_ip = '可控位置' WHERE user_id='$_SESSION[user_id]'";
$_FILES:
可能产生的漏洞类型:
01.上传漏洞,上传一个php木马,相当于直接getshell了
02.注入,有些cms会把name的值保存在数据库里,但又没有对name进行过滤。
$_SERVER:其中部分我们可以控制。
X-FORWARDED-FOR:IP地址,很多cms取ip是首先取这个变量中的值,如果
function guest_add()//添加留言
{
global $bqz,$lang;
$exec="insert into ".$bqz."guest (title,name,email,ip,content,times) values ('".$_POST."','".$_POST."','".$_POST."','".$_SERVER."','".$_POST."','".time()."')";
所以我们要认识清楚漏洞原理,积累cms常出漏洞,积累找这种漏洞的技巧.....
--------------------------------------------------------------------
三)本地搭建环境测试
1.黑盒加白盒
不得不说黑盒的重要性!
Burp常开对你只要没有坏处!
漏洞(一)ip没过滤直接进到sql语句
函数讲解:
getenv : 这个函数是获得环境变量的函数,也可以用来获得$_SERVER数组的信息。
getenv('HTTP_X_FORWARDED_FOR') --> $_SERVER[HTTP_X_FORWARDED_FOR]
当然http头还有referer 这也是可以伪装的,要是没有过滤好也会产生会注入问题
---------------------面这几中,而是黑名单,或者你欠日什么都没有过滤的话,那么很多情况下是可以注入的。所以cms随着漏洞的爆出,慢慢的这样的情况几乎都没有了
那么问题来了,在上面这种情况漏洞怎么出现?[蓝翔.....]
二)关注什么样的漏洞
1.Sql注入
2.文件操作[上传/写入/读取/删除]
3.文件包含
4.命令执行
5.Xss
6.Cookie欺骗
7.逻辑出错
........等等
每种漏洞有对应找漏洞的方法,往往先找getshell的方法[1,2,3,4这三中漏洞是常见的getshell方法我们要多多关注这个]而逻辑出错也是很要命的。。。。 - -
02.有些输入是字符型的,不可能转换成数字。这个使用就使用addslashes对输入进行转义。
aaa’aa ==> aaa\’aa
aaa\aa ==> aaa\\aa
SELECT * FROM post WHERE id=’aaa\’ union select pwd from admin limit 0,1#
至于如何学好php代码审计?去膜拜p神吧....
/whitehats/phith0n
/
看着p神的文章,学审计...... 许多东西都是复制p神~
文章写给像我一样刚刚开始审计的小菜鸟~,有错欢迎指出~
求勿喷...........继续学审计中........
+++++++++++++++++++++++++++++++++++++++++++++++++++++
四)审计各种不同漏洞技巧
1.Sql注入审计技巧
sql注入是我们审计比较重视的漏洞之一
0x01 漏洞原理
所以现在很多cms都对注入进行了一定的过滤,一般有两种过滤方法:
01.对于数字型的输入,直接使用intval($_GET[id]),强制转换成整数,这种过滤是毫无办法的。
有些cms会把name的值保存在数据库里,但又没有对name进行过滤。
例如:p神的emlog后台注入(需要作者权限即可)
还有Thinksaas最新版注入无视GPC
/bugs/wooyun-2010-051124
--------------------------------
要是使用了xxx框架的话,如何找到这些变量呢?
Mvc框架比较流行了
所以我去了解了一下thinkphp的mvc框架[/?id=14]
--------------------------------------------------------------------
mysql_query($exec)||die(mysqli_error());
echo "<script>alert('".$lang."');window.location.href='/?/guest.php';</script>";
}
$exec="insert into ".$bqz."guest (title,name,email,ip,content,times) values ('".$_POST."','".$_POST."','".$_POST."','".$_SERVER."','".$_POST."','".time()."')";
客户端提交变量:
$_GET:http://localhost/mm.php?a=xxxxx
$_POST:
$_COOKIE:
记录在我们本地浏览器中的变量,是可控的。PHP中还有一个变量$_SESSION。
每个人访问网站,他的phpsessid都是不一样的,这个值就用来区分每个用户。服务器用PHPSESSID=cmebf7jkflu5a31vf67kbiopk4来标示每个用户,是否登录或者是否是管理员。
2.大体看看文件的目录
3.cms安装到本地,大概了解功能,比如有注册会员功能的cms,我就注册一个会员,比如有搜索框,我就会搜索一下,大概查看一下搜索出来的内容,[恩 因为字符型都进行了转换 @ _@ 所以搜索型的很重要,有哪些数据提交点、能否留言等等] 摘自p神
技巧:最好可见在本地测试时候讲你的输入点打印出来
3.Insert 注入
引用了音符牛的一个文章
/?/question/310
音符的XD某套系统的代码审计第二弹:insert注入
[C] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
//字符串完全没过滤,gpc为关闭
//addrress是前台可见的,而且长度够大
//p神说.....
碰到update语句中含有注入的情况,我们怎么处理?
01.跟我刚才一样,把某个可以看到的信息给更新成管理员密码,这样就获得了密码
02.报错注入,使用某一特定的报错语句,让sql语句在执行中出错,能爆出管理员账号密码。但是有个条件,就是在执行sql语句的时候调用了mysql_error函数,否则不会显示报错信息。比如bluecms就没有调用mysql_error,所以不能使用这个方法。