强悍的PHP脚本注入技巧(图)

起因:
 听承诺说CASI出2.0了,而且承诺也给了一个有漏洞的地址,正好没事就测试了一下,最近非常郁闷,学不下去,正好今天承诺勾起了我学习php的美好时光,看看自己还能不能搞这样的站吧.

过程:
承诺给的地址是http://www.gametea.com//showboard.php?id=282
很标准的php注入形式,我们也按照标准的php注入方法来进行注入,首先再后面加一个',

http://www.gametea.com/showboard.php?id=282'

如图1

他告诉我们2个方面的信息,第一是magic_quotes_gpc = off
第二个就是web路径/home/newgt/showboard.php

再提交语句以前我们还是先来说明一下php注入的原理和一个小例子,php注入就是利用变量过滤不足造成的

看看下面两句SQL语句:




①SELECT * FROM article WHERE articleid='$id'
②SELECT * FROM article WHERE articleid=$id

  两种写法在各种程序中都很普遍,但安全性是不同的,第一句由于把变量$id放在一对单引号中,这样使得我们所提交的变量都变成了字符串,即使包含了正确的SQL语句,也不会正常执行,而第二句不同,由于没有把变量放进单引号中,那我们所提交的一切,只要包含空格,那空格后的变量都会作为SQL语句执行,我们针对两个句子分别提交两个成功注入的畸形语句,来看看不同之处。





① 指定变量$id为:
1' and 1=2 union select * from user where userid=1/*
此时整个SQL语句变为:
SELECT * FROM article WHERE articleid='1' and 1=2 union select * from user where userid=1/*'

②指定变量$id为:
1 and 1=2 union select * from user where userid=1
此时整个SQL语句变为:
SELECT * FROM article WHERE articleid=1 and 1=2 union select * from user where userid=1

  看出来了吗?由于第一句有单引号,我们必须先闭合前面的单引号,这样才能使后面的语句作为SQL执行,并要注释掉后面原SQL语句中的后面的单引号,这样才可以成功注入,如果php.ini中magic_quotes_gpc设置为on或者变量前使用了addslashes()函数,我们的攻击就会化为乌有,但第二句没有用引号包含变量,那我们也不用考虑去闭合、注释,直接提交就OK了。

好了现在我们就要按照angel的方法来提交语句了http://www.gametea.com/showboard.php?id=282%20and%2

01=2%20union%20select%2050,9,8,7,6,5,4,3,2,1

如图2

再这里我们可以得知7和9这两个地方是文本的,也就是说可以显示我们想要的文件的内容,下面我们就是要读取服务器上的文件了从web路径上看这台机器应该是UNIX的,那么我们的目标就是拿到/etc/passwd这个文件了

我们知道,在SQL语句中,可以使用各种MySQL内置的函数,经常使用的就是DATABASE()、USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()这些函数来获取一些系统的信息,还有一个应用得比较多的函数,就是load_file(),该函数的作用是读入文件,并将文件内容作为一个字符串返回。
  看到这里,应该可以想到我们可以做什么了,就是读取一些机密文件,但是也是有条件限制的:

  • 欲读取文件必须在服务器上
  • 必须指定文件完整的路径
  • 必须有权限读取并且文件必须完全可读
  • 欲读取文件必须小于 max_allowed_packet

  如果该文件不存在,或因为上面的任一原因而不能被读出,函数返回空。比较难满足的就是权限,在windows下,如果NTFS设置得当,是不能读取相关的文件的,当遇到只有administrators才能访问的文件,users就别想load_file出来。

  在实际的注入中,我们有两个难点需要解决:

  • 绝对物理路径
  • 构造有效的畸形语句

  在很多PHP程序中,当提交一个错误的Query,如果display_errors = on,程序就会暴露WEB目录的绝对路径,只要知道路径,那么对于一个可以注入的PHP程序来说,整个服务器的安全将受到严重的威胁。构造语句已经是小意思了。

我们这里用的load_file(char())这个函数我们需要把/etc/passwd转化成16进制的我们请出asc2chr这个工具来帮我们完成转化工作

如图三

(0)

相关推荐

  • 强悍的PHP脚本注入技巧(图)

    起因: 听承诺说CASI出2.0了,而且承诺也给了一个有漏洞的地址,正好没事就测试了一下,最近非常郁闷,学不下去,正好今天承诺勾起了我学习php的美好时光,看看自己还能不能搞这样的站吧. 过程:承诺给的地址是http://www.gametea.com//showboard.php?id=282很标准的php注入形式,我们也按照标准的php注入方法来进行注入,首先再后面加一个', http://www.gametea.com/showboard.php?id=282' 如图1 他告诉我们2个方面

  • Java使用过滤器防止SQL注入XSS脚本注入的实现

    前几天有个客户在系统上写了一段html语句,打开页面就显示一张炒鸡大的图片,影响美观.后来仔细想想,幸亏注入的仅仅是html语句,知道严重性后,马上开始一番系统安全配置. 一. 定义过滤器 package com.cn.unit.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; i

  • 浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入

    在<浏览器环境下JavaScript脚本加载与执行探析之defer与async特性>中,我们研究了延迟脚本(defer)和异步脚本(async)的执行时机.浏览器支持情况.浏览器bug以及其他的细节问题.而除了defer和async特性,动态脚本和Ajax脚本注入也是两种常用的创建无阻塞脚本的方法.总的来看,这两种方法都能达到脚本加载不影响页面解析和渲染的作用,但是在不同的浏览器中,这两种技术所创建的脚本的执行时机还是有一定差异,今天我们再来探讨一下通过动态脚本技术和Ajax注入的脚本在这些方

  • Java如何防止JS脚本注入代码实例

    1.java中防止JS脚本注入的工具类-通用 public class XssUtil { private static Map<String, String> xssMap = new LinkedHashMap<String, String>(); private static Map<String, String> xssNewMap = new LinkedHashMap<String, String>(); static { init(); } p

  • Javascript注入技巧

    作者: kostis90gr 翻译: 黯魂[S.S.T] 本文已发表于<黑客防线>6月刊,版权属于<黑客防线>及脚本安全小组,转载请保持文章完整性,谢谢 :) 这份指南仅仅是出于报告目的,如果任何人把它用于违法目的,我不负责任. 通过使用javascript注入,用户不用关闭网站或者把页面保存在他的PC上就可以改变网站中的内容.这是由他的浏览器的地址栏完成的. 命令的语法看上去像这样: Copy code javascrit:alert(#command#) 比方说如果你想看到在网

  • 收集的48个Shell脚本小技巧

    本文收集了一堆的shell脚本技巧,我说过,我写博客主要是作一些学习笔记,方便自己查阅,所以,我会搞出这么一篇文章,也没有什么不可理解的.关于这些技巧的出处,诶,我也忘了,可能来自theunixschool. commandlinefu.酷勤网和igigo.net,当然了,也有部分是我自己的经验心得,管他呢,进了我的脑子就是我的了. 0. shell 调试 复制代码 代码如下: sh -x somefile.sh 在somefile.sh 文件里加上set+x set-x 1. 用 &&

  • 十三个写好shell脚本的技巧分享

    前言 产品的最终用户通常不懂技术,所以不管你怎么折腾产品代码都无所谓.但脚本代码不一样,它们是开发人员写给开发人员的. 有多少次,你运行./script.sh,然后输出一些东西,但却不知道它刚刚都做了些什么.这是一种很糟糕的脚本用户体验.我将在这篇文章中介绍如何写出具有良好开发者体验的 shell 脚本. 产品的最终用户通常不懂技术,所以不管你怎么折腾产品代码都无所谓.但脚本代码不一样,它们是开发人员写给开发人员的. 这样会导致一些问题: 混乱的脚本--我知道,我们都是工程师,读得懂代码,但即使

  • 请注意那些容易被忽略的SQL注入技巧

    下面我要谈到一些Sqlserver新的Bug,虽然本人经过长时间的努力,当然也有点幸运的成分在内,才得以发现,不敢一个人独享,拿出来请大家鉴别. 1.关于Openrowset和Opendatasource 可能这个技巧早有人已经会了,就是利用openrowset发送本地命令.通常我们的用法是(包括MSDN的列子)如下: select * from openrowset('sqloledb','myserver';'sa';'','select * from  table') 可见(即使从字面意义

  • 全面认识ASP注入技巧

    复制代码 代码如下: 1.判断是否有注入  ;and 1=1  ;and 1=2 2.初步判断是否是mssql  ;and user>0 3.注入参数是字符  'and [查询条件] and ''=' 4.搜索时没过滤参数的  'and [查询条件] and '%25'=' 5.判断数据库系统  ;and (select count(*) from sysobjects)>0 mssql  ;and (select count(*) from msysobjects)>0 access

  • SQL注入技巧之显注与盲注中过滤逗号绕过详析

    前言 sql注入在很早很早以前是很常见的一个漏洞.后来随着安全水平的提高,sql注入已经很少能够看到了.但是就在今天,还有很多网站带着sql注入漏洞在运行.下面这篇文章主要介绍了关于SQL注入逗号绕过的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 1.联合查询显注绕过逗号 在联合查询时使用 UNION SELECT 1,2,3,4,5,6,7..n 这样的格式爆显示位,语句中包含了多个逗号,如果有WAF拦截了逗号时,我们的联合查询不能用了. 绕过 在显示位上替换为常见

随机推荐