记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

php代码审计基础

2016-11-18 04:20

1.session

本地浏览器中的变量,是可控的.PHP中还有一个变量$_session

每个访问者的sessionID是不同的.这个值就用来区分每个用户.

PHPSESSID=cmebf7jkflu5a31vf67kbiopk4

2.$_files 上传变量
包含了:js验证,扩展名验证,MIME验证,目录验证
js验证简单,不加载就可以了。
扩展名验证, 如php,php3
MIME验证, text/php
demo: if (($_FILES['upfile']['type'] == 'image/gif') || ($_FILES['upfile']['type'] == 'image/jpeg')
目录验证,利用iis6的特殊解析,这里主讲php,就不细说了。

3数字型注射
直接使用intval($_GET[id]),强制转换成整数,这种过滤是毫无办法的.

$ann_id = !empty($_REQUEST['ann_id']) ? intval($_REQUEST['ann_id']) : '';

如果没有 intval($_GET[id]) 就可以进行注射.

4.字符型注射
这个不可能会转换成数字。使用addslashes对输入进行转义.

aaa'aa ==> aaa\'aa
aaa\aa ==> aaa\\aa
SELECT * FROM post WHERE id='aaa\' union select pwd from admin limit 0,1#

————————–
5.getenv环境变量
这个函数是获得环境变量的函数,也可以用来获得$_SERVER数组的信息。

getenv(‘HTTP_X_FORWARDED_FOR’) –> $_SERVER[HTTP_X_FORWARDED_FOR]
还有referer。也可以抓包修改.

6(1).宽字节注射
gbk的源码,极可能存在宽字节注入.
iconv会自动转码。
iconv(‘utf-8’, ‘gbk’, $_GET[‘word’]); 如果上传的doc文件是utf8,将自动转成gbk.
錦的utf-8 编码是0xe98ca6,而的gbk 编码是0xe55c。
我们输入錦’ –>%e5%5c%27 (%5c=\)
在经过转移——>%e5%5c%5c%27 (%5c%5c=\\)
这样就可以进行注射了。

6(2).文件名注射
$_FILE,$_SERVER不受gpc影响,造成注射
有些cms会把文件名称保存在数据库里,但又没有对文件名称进行过滤。

6(3).Update注射
Get_ip() 直接用了X-FORWARDED-FOR

$sql = "UPDATE blue_user SET last_login_ip = '可控位置' WHERE user_id='$_SESSION[user_id]'";

UPDATE blue_user SET last_login_ip = '8.8.8.8',address=(SELECT left(version())), qq=' ' WHERE user_id='2'
————————
6(4).insert注入

guest_add()//添加留言的函数

6
没有过滤就将数据放入guest表中。
demo:标题’,’1′,’姓名’,’1.1.1.1′,内容(SELECT left(version())),’1314205172′)#

带入了执行:
insert into xdxx_guest (title,name,email,ip,content,times) values ('我的表弟','1','表弟','1.1.1.1',(SELECT left(version())),'1314205172')#','time()')

7.文件包含
(1)本地包含

demo:
if( !ini_get('display_errors') ) {
ini_set('display_errors', 'On');
}
error_reporting(E_ALL);
$f = $_GET["file"];
if ($f){
require "".$f.".";
}else{
print("No File Included");
}

.php?f=robots.txt%00 这样就包含了robots.txt文件。(%00截断作用)
由于file参数没有过滤,我们可以自己提交参数内容,这个时候就导致了包含漏洞的出现。

(2)远程包含
利用条件:在php.ini文件
allow_url_include=On
allow_url_fopen=On

.php?file=http://www.ashker.net/robots.txt

8.命令执行

命令执行函数

php代码执行函数:Eval,assert,array_map,nffreg
sys命令执行函数:system,passthru,exec,pcntl_exec,shell_exec,popen,proc_open

9.任意下载or任意读取。
对传入的参数filename进行过滤,就可以实现下载服务任何文件,产生任意文件下载。

判断过程:在路径中添加aa/../看是否可以回溯。
有时候会存在数据库备份文件下载或者php参数调用的形式下载文件。
index.php?run=download&path=/../../&file=robots.txt

10.任意删除。

uid=$_COOKIE['uid'];
delfiledir("../upload/".$this->uid);

——————–
就可以直接修改cookle的uid内容1/../../data/robots.txt

11.找回密码爆破

验证码无失效时间,可以重复使用。无验证session对话时间。

部分原创,记录学习!

知识来源: www.ashker.net/archives/931

阅读:120615 | 评论:0 | 标签:Code MySQL PHP

想收藏或者和大家分享这篇好文章→复制链接地址

“php代码审计基础”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云