代码审计篇入门

一、漏洞挖掘与防范

1.搭建环境




<?php
header("content-type:text/html;charset=utf-8"); //设置编码
$uid = $_GET['id'];
$sql = "SELECT * FROM userinfo where id = $uid";
$conn = mysql_connect('localhost','root','root');
mysql_select_db("test",$conn);
$result = mysql_query($sql,$conn);
print_r('当前SQL语句:  '.$sql.'<br / >结果: ');
print_r(mysql_fetch_array($result));

 ?>中文


中文路径的问题似乎解决不了




有个不像是解决办法的解决办法


应该是已经可以正常显示中文了,但由于游览器编码问题导致乱码



成功链接


二、漏洞挖掘

注入漏洞:

1.sql注入

http://127.0.0.1/PHPCodeAudit/injection.php?id=-1 union select 1,user(),3,4




2.二次urldecode注入

<?php
$a = addslashes($_GET['p']);
$b = urldecode($a);
echo '$a= '.$a;
echo '<br / >';
echo '$b= '.$b;
 ?>


3.gpc/rutime魔术引号

(1)addslashes函数

<?php
$str = "phpsafe'";
echo addslashes($str);
 ?>


(2)mysql_real_escape_string

<?php
$con = mysql_connect("localhost", "root","root") ;
$id = mysql_real_escape_string($_GET['id'],$con);
$sql = "select * from test where id = '".$id."'";
echo $sql;
?>


单引号被转义


%27为单引号,被转义。

(3)intval等字符转换

<?php
$id = intval("1 union select ");
echo $id;
 ?>

把变量全部转换为int型,不容易注入

4.XSS漏洞

5.文件包含

<?php
define("ROOT",dirname(__FILE__).'/');
$mod = $_GET['mod'];
echo ROOT.$mod.'.php';
include(ROOT.$mod.'.php');
 ?>

(1)远程文件包含

设置:

allow_url_include = ON


不设置的话:


 远程文件包含:


POST     php输入流


(2)文件包含截断

<?php
include $_GET['a'].'.php';
?>

无法使用因为php5.3以后修复了00截断这个漏洞


(3)文件读取下载漏洞

问题出在@file_get_connents($url)

../../../../1.php

(4)文件上传漏洞

成功上传

这里使用burp效果更佳


(5)文件删除漏洞

session_destroy()

poc :delete&filename=../../index.php

(6)如何防御

利用点一般为:

由越权操作引起可以操作未授权操作的文件

要操作更多文件需要跳转目录

大多都是直接在请求中传入文件名

防御:

对权限的管理要合理

有的文件操作不需要直接传入文件名

要避免目录跳转的问题

6.代码执行漏洞

该漏洞主要由 eval()/assert()/preg_replace()/call_user_func_array()/array_map()引起的

<?php
preg_replace("/\[(.*)\]/e", '\\1', $_GET['str']);
 ?>,

搜索(.*)的内容作为第一组结果,\\1作为第一组结果的填充,执行str=后面的语句

参考:https://www.cdxy.me/?p=756

<?php
@preg_replace("//e", $_GET['h'], "Access Denied");
echo preg_replace("/test/e", $_GET["h"], "jutst test");
 ?>


<?php
function test($code)
{
}

// test("{${phpinfo()}}");

//提交?h=phpinfo()
// echo preg_replace("/test/e",$_GET["h"],"jutst test");

//提交?h=[php]{${phpinfo()}}[/php]
echo preg_replace("/\s*\[php\](.+?)\[\/php\]\s*/ies", 'test("\\1")', $_GET["h"]);

//echo preg_replace("/\s*\[php\](.+?)\[\/php\]\s*/ies", "test('\\1')", $_GET["h"]);
?>



7.预防手段:

addslashes()和mysql_[real_]escape_string函数过滤sql语句

escapeshellcmd()和escapeshellarg()命令

escapeshellcmd()过滤一些参数转化为^



escapeshellarg()


参数白名单限定某些参数










  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值