网络安全自学篇-PHP代码审计(五)

一个网络安全学习爱好者在学习过程中记录下的笔记,希望在CSDN能和大家一起成长,学习,分享,进步,下面分享的是代码审计中命令执行以及跨站脚本攻击的案例,希望对入门代码审计的朋友们有所帮助,大神有兴趣看看即可,勿喷感谢,同时也欢迎各位师傅私聊交流学习。文章有所参考,也感谢教授我网安知识的师父们,感谢出生在这个互联网时代,知识触手可及。

命令执行

命令执行漏洞
原理:攻击者通过存在命令执行漏洞的应用程序在主机操作系统上执行任意命令(注意与代码注入区分开),代码执行的效果取决于语言本身,而命令执行不取决于语言,也不收命令本身限制。
挖掘思路:
1、用户能够控制函数输入
2、存在能够执行代码的危险函数
命令执行的类型:
1、代码层面过滤不严格
2、系统本身存在的漏洞
3、第三方组件存在漏洞
常见的危险函数有(``):
system、exec、passthru、shell_exec
1、system

 system ( string $command [, int &$return_var ] ) : string
 //command要执行的命令。return_var如果提供 return_var 参数, 则外部命令执行后的返回状态将会被设置到此变量中。

在这里插入图片描述
2、passthru

  passthru ( string $command [, int &$return_var ] ) : void
 //command要执行的命令。return_var如果提供 return_var 参数, 如果提供 return_var 参数, Unix 命令的返回状态会被记录到此参数。 

在这里插入图片描述
3、exec(结果需要用echo回显,只显示一行)

   exec ( string $command [, array &$output [, int &$return_var ]] ) : string
 //command要执行的命令。 output如果提供了 output 参数, 那么会用命令执行的输出填充此数组, 每行输出填充数组中的一个元素。 数组中的数据不包含行尾的空白字符,例如 \n 字符。 请注意,如果数组中已经包含了部分元素,exec() 函数会在数组末尾追加内容。如果你不想在数组末尾进行追加, 请在传入 exec() 函数之前 对数组使用 unset() 函数进行重置。 return_var,如果同时提供 output 和 return_var 参数, 命令执行后的返回状态会被写入到此变量

在这里插入图片描述
4、shell_exec(结果需要用echo回显,显示全部)

    shell_exec ( string $cmd ) : string
 //command要执行的命令。

在这里插入图片描述
5、反引号``
在这里插入图片描述

XSS

跨站脚本攻击
原理:攻击者利用应用程序存在过滤不严的弱点输入可以显示在页面上对其他用户造成影响的恶意代码。
挖掘思路:
参数无过滤并传入输出函数
1、搜索内容
2、发表文章
3、留言
4、评论回复
5、资料设置
1、反射型(输入–输出)
案例:
1、将前端获取的内容直接输出到浏览器页面

$content = $_GET['xss'];
echo $content;

在这里插入图片描述
2、将前端获取的内容直接输出到HTML标签

<?php
$content = $_GET['xss'];
?>
<input type="text" value="<?php echo $content;?>">

闭合后的标签

<body><input type="text" value=""><script>alert(/xss/)</script>"&gt;</body>

在这里插入图片描述
3、将前端获取的内容直接输出到

<?php
$content = $_GET['content'];
?>
<script>
    var xss = '<?php echo $content?>';
    document.write(xss);
</script>

在这里插入图片描述
2、存储型(输入–进入数据库–取出数据-输出)
xss.php

<?php
header("content-type:text/html;charset=utf-8");
$content = $_POST['content'];
$conn = mysql_connect("localhost","root","root");
mysql_select_db("xss",$conn);
if ($content != null) {
    $sql = "INSERT INTO xss VALUES ('1','$content');";
    $result = mysql_query($sql) or die('执行SQL语句失败'.mysql_error());
}
?>
<form action="" method="post">
    <input type="text" name="content">
    <input type="submit" value="提交">
</form>

show.php

<?php
$conn = mysql_connect("localhost","root","root");
mysql_select_db("xss",$conn);
$sql = "SELECT payload FROM xss where id=1";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)) {
    echo $row['payload'];
}

插入数据
在这里插入图片描述
显示
在这里插入图片描述
在这里插入图片描述

3、DOM型(可能是存储型也可能是反射型)
数据流向:URL->浏览器
案例:

<?php
$content = $_GET['content'];
?>
<input type="text" id="tid" value="<?php echo $content;?>">
<div id="show">
    <script>
        var text = document.getElementById("tid");
        var show = document.getElementById("show");
        show.innerHTML = tid.value;
    </script>

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44047795/article/details/106600531