博客转载 --代码审计入门
代码审计--准备
1,先放一张大图,php代码审计的几个方向,也是容易出问题的地方,没事的时候可以多看看。
2,代码审计也就是拿到某网站的源码,进行审计,从而发现漏洞,但是我们审计的时候并不一定要一行一行的去看吧,这样未免也太浪费时间了,所以我们需要工具进行帮助我们。当属 "Seay源代码审计系统2.1" 优先选择(静态分析,关键字查找定位代码不错,但是误报很高)。
我们在做代码审计的时候,个人建议先要把审计的某CMS随便点点,先熟悉一下功能。代码审计前先进行黑盒测试是个不错的选择,知道哪里有问题,然后再去找出问题的代码。
要关注变量和函数,
代码审计--漏洞
一,漏洞类型
1.sql注入
反射型xss审计的时候基本的思路都一样,通过寻找可控没有过滤(或者可以绕过)的参数,通过echo等输出函数直接输出。寻找的一般思路就是寻找输出函数,再去根据函数寻找变量。一般的输出函数有这些:print , print_r , echo , printf , sprintf , die , var_dump ,var_export。
测试代码如下:
<?php echo $_GET['xssf']; ?>
http://127.0.0.1/test/xssf.php?xssf=<script>alert(/orange/);</script>
我们可以用渗透平台 DVWA
分析如下:首先看下源码
<?php // Is there any input? if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) { // Feedback for end user echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>'; } ?>
这里我们可以清楚的看到 if 里面的php函数array_key_exists
,现在不懂没关系,百度一下你就知道。
array_key_exists(key,array)
key--键值
arrray--规定数组
输入的值也就是GET得到的值是以数组的形式,然后判断GET得到的name是不是空,如果满足 if 语句,这里就会进行 if 括号里面的
echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
我们可以清楚的看到,这里直接输出传的name参数,并没有任何的过滤与检查,存在明显的XSS漏洞。
medium中等难度下的代码
<?php // Is there any input? if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) { // Get input $name = str_replace( '<script>', '', $_GET[ 'name' ] ); // Feedback for end user echo "<pre>Hello ${name}</pre>"; } ?>
可以看到有一点上low的代码是不一样的,那就是进行了一次过滤,
用的str_replace()函数,这个函数的功能是:以其他字符替换字符串中的一些字符(区分大小写)。
这里的作用是替换<script>,也就是把<script>替换成空格,然后再进行输出。
这里对输入进行了过滤,基于黑名单的思想,使用str_replace函数将输入中的<script>删除,这种防护机制是可以被轻松绕过的。
双写绕过:输入<sc<script>ript>alert(/xss/)</script>,成功弹框。
大小写混淆绕过:输入<ScRipt>alert(/xss/)</script>,成功弹框
High等级也是基于黑名单思想,进行过滤。但是我们可以通过其他标签来进行XSS。
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
。。。后续学习内容再补充(学业繁忙)