工具:seay源代码审计系统

源代码:网上很好找,这里就懒得贴上了,找不到的话可以给我留言

后面一段时间会深入学习安全开发,代码审计,内网渗透和免杀,快快成长。

审这个系统是因为在先知上看到一篇审它老版本的文章,索性拿来练一下生疏的手。

部署也不再赘述,直接使用phpstudy快速部署,放置源代码后访问路径下

/install/index.php

部署后的界面如下:

源代码放进seay进行白盒审计

挨个进行查看

第一个疑似注入点,可以看到包含了inc.php文件,先看一下过滤没有

套娃,在library.php里面发现了全局过滤

贴出源代码:

if (!get_magic_quotes_gpc()) {
if (!empty($_GET)) {
$_GET = addslashes_deep($_GET);
}
if (!empty($_POST)) {
$_POST = addslashes_deep($_POST);
}
$_COOKIE = addslashes_deep($_COOKIE);
$_REQUEST = addslashes_deep($_REQUEST);
}
function addslashes_deep($_var_0)
{
if (empty($_var_0)) {
return $_var_0;
} else {
return is_array($_var_0) ? array_map('addslashes_deep', $_var_0) : addslashes($_var_0);
}
}

即没有开启gpc过滤敏感字符则使用addslashes_deep函数,addslashes_deep函数是一个魔改addslashes函数的函数,起到过滤敏感字符的作用。

可以看到此处的过滤没有过滤$_SERVER参数,后面有相关的地方可以留意一下。

SESSION在Cookie参数中,所以被过滤了,继续往后面看

来到很多文章都写过的ucenter位置,reg.php内容中有这样一段代码

<?php
include('../system/inc.php');
if(isset($_SESSION['user_name'])){
header('location:index.php');
};
if(isset($_POST['submit'])){
$username = stripslashes(trim($_POST['name']));
// 检测用户名是否存在
$query = mysqli_query($conn,"select u_id from mkcms_user where u_name='$username'");
if(mysqli_fetch_array($query)){
echo '<script>alert("用户名已存在,请换个其他的用户名");window.history.go(-1);</script>';
exit;
}
$result = mysqli_query($conn,'select * from mkcms_user where u_email = "'.$_POST['email'].'"');
if(mysqli_fetch_array($result)){
echo '<script>alert("邮箱已存在,请换个其他的邮箱");window.history.go(-1);</script>';
exit;
}

这里获取到了我们POST输入的name

$username = stripslashes(trim($_POST['name']));

而因为include了inc.php文件,$_POST进来的输入被全局过滤了,如果我们使用了单引号就会被加上反斜杠,但是!

这里又在外面使用了

stripslashes

函数,关于该函数:

同时我们可以通过页面返回的值来判断查询结果是否正确,即该位置存在布尔注入

使用方法:

查询一个已注册的用户名,然后进行布尔注入

本地测试(POST payload 注意test用户已注册)

永真式:

name=test' and '1'='1&email=test%40qq.com&password=test&submit=

永假式:

name=test' and '1'='2&email=test%40qq.com&password=test&submit=

burp抓包放进sqlmap里面跑

可以直接使用工具跑出来

接着全局搜索使用了stripslashes函数的位置

active.php代码如下

<?php
include('../system/inc.php');
$verify = stripslashes(trim($_GET['verify']));
$nowtime = time();
$query = mysqli_query($conn,"select u_id from mkcms_user where u_question='$verify'");
$row = mysqli_fetch_array($query);
if($row){
echo $row['u_id'];
$sql = 'update mkcms_user set u_status=1 where u_id="'.$row['u_id'].'"';
if (mysqli_query($conn,$sql)) {
alert_href('激活成功!','login.php');
}
}else{
$msg = 'error.';
}
echo $msg;
?>

我们可以通过是否echo $row['u_id']来进行注入

去数据库里面查一下u_question是多少:

其逻辑在reg.php中,简单贴一下代码:

$token = md5($username.$password.$regtime); //创建用于激活识别码
$data['u_question'] =$token;

实际上真实环境中我们应该是拿不到u_question的,但是这里我们可以使用时间盲注来获取数据库内容

repass.php也是类似的点存在注入

$username = stripslashes(trim($_POST['name']));
$email = trim($_POST['email']);
// 检测用户名是否存在
$query = mysqli_query($conn,"select u_id from mkcms_user where u_name='$username' and u_email='$email'");

而除了因为stripslashes导致的注入外,代码里面还有因为直接拼接SQL语句而导致的注入,简单举两处:

admin_edit.php里

    $sql = 'update mkcms_manager set ' . arrtoupdate($_data) . ' where m_id = ' . $_GET['id'] . '';
if (mysqli_query($conn,$sql)) {
alert_href('管理员修改成功!', 'cms_admin.php');
} else {
alert_back('修改失败!');
}

这里的 $id 直接进行拼接,从而造成了注入,因为不需要使用引号进行闭合,所以之前的全局过滤也形同虚设了。

ad.php 里

if (isset($_GET['del'])) {
$sql = 'delete from mkcms_ad where id = ' . $_GET['del'] . '';
if (mysqli_query($conn,$sql)) {
alert_href('删除成功!', 'cms_ad.php');
} else {
alert_back('删除失败!');
}
}

这里也是通过拼接组成的SQL语句,存在SQL注入漏洞

逻辑漏洞以前有老哥提到过验证码复用+暴力遍历从而任意用户密码重置,下次还是审一个没人审的小众代码吧太菜了

参考链接:

最新文章

  1. H5常用代码:适配方案4
  2. 高清VGA编码器|上海视涛科技
  3. css常见的易混淆属性和值的区别(一)
  4. Linux 命令 - alias: 设置或显示别名
  5. Codeforces 455B A Lot of Games
  6. 03_Elasticsearch如何安装以及相关插件的介绍
  7. Function方法和属性图
  8. C#多线程和线程池 【转】
  9. 【python 3】 文件操作
  10. Int2BinaryString.java
  11. centos7安装tomcat8 新手入门 图文教程
  12. IIS webService 并发 性能
  13. vue组件中this和$el指向
  14. Code Signal_练习题_digitDegree
  15. Ghost硬盘对拷
  16. shell中执行hive命令错误:delimited by end-of-file (wanted `EOF&#39;)
  17. 《玩转Spring》第二章 BeanPostProcessor扩展
  18. Poj2919 Crane
  19. spark exectors的启动总结
  20. 【Linux】- CentOS 防火墙iptables和firewall

热门文章

  1. 嗖嗖移动大厅 源代码 Java初级小项目
  2. 手机运行Linux系统,可以办公,可以上网,太爽了!
  3. 3. Spark常见数据源
  4. go常见问题
  5. 4. 树形DP
  6. GDT,LDT,GDTR,LDTR (转 侵删)
  7. AHB SRAM控制器设计
  8. CephFS用户认证格式写错的问题
  9. 精益求精!Spring Boot 知识点全面回顾,带你重新细读源码!
  10. 凭借着这份面经,我拿下了字节,美团的offer!