常见漏洞

什么是常见的漏洞,就是OWASP TOP 10上发布的十大常见漏洞

什么是OWASP TOP 10

OWASP(开放式Web应用程序安全项目)是一个开放的社区,由非营利组织 OWASP基金会支持的项目。对所有致力于改进应用程序安全的人士开放,旨在提高对应用程序安全性的认识。
其最具权威的就是“10项最严重的Web 应用程序安全风险列表” ,总结并更新Web应用程序中最可能、最常见、最危险的十大漏洞,是开发、测试、服务、咨询人员应知应会的知识。

接下来我们一一复现每一个漏洞:

XSS(跨站脚本攻击)

类型:

反射型,DOM型,存储型

反射型:

首先了解PHP中的$_GET $_POST

简单来讲,就是用来传参数的,对应GET或者POST请求

使用方法

1
2
$get = $_GET['xss'];
$post = $_POST['xss']; #XSS为接收值

构造反射型XSS漏洞

我们就用 GET请求举例子

简单来说就是:

1
2
3
4
if(isset($_GET['xss'])) {
$xss = $_GET["xss"];
echo 'name:',$xss;
}#获取一个GET值为,并且赋值给变量$xss

通过 echo来输出 GET请求的值,没有任何过滤的情况下,可以执行Javascript代码

通过简单的代码,我们可以构造一个简单的前端,xss常出现的搜索界面

尝试输入Hello

echo会将GET参数返回,所以产生xss漏洞

XSS存储型:

我们先不用数据库,直接用txt文件的方式存储,一般存储型的,都是存储数据库上的

简单的代码还原存储型xss

出现地方:评论区,资料上传等

老规矩:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 使用get取值
if(isset($_GET['comments']))
{
$comments = $_GET['comments'];
$login = fopen('xss.txt','a'); //打开xss.txt文件
fwrite($login, $comments."\r\n");//将get请求的写入xss.txt
fclose($login);//关闭文件
$url = "xsscc.php";
echo "<meta http-equiv='refresh' content ='0.1;url=$url'>";
}
if(file_exists('xss.txt')){ //判断文件xss.txt是否存在
$read = fopen("xss.txt",'r'); //打开xss文件 "r"表示只读
while(!feof($read)){
echo fgets($read) . '</br>';//输出read的值
}
fclose($read);
}

代码解释:就是讲接收到的GET值,写入txt文件中,然后通过while输出txt的所以内容

最后:

我们输入的内容都会存储,显示页面上

最后输入:

1
<script>alert('xss')</script>

每次打开都会弹窗,这就是xss存储型的特点

如何防御:

利用PHP的函数

1
htmlentities()

将内容转换为HTML实体

例如我们的xss反射型

1
2
3
4
if(isset($_GET['xss'])) {
$xss = $_GET["xss"];
echo 'name:',htmlentities($xss);
}

这样我们输出的就直接是

1
<script>alert('xss')</script>

结束

DOM型也是差不多的,这里就不演示了,真实环境当中,

xss漏洞会加很多过滤

需要自己一步步探索

需要完整源码的可以私 !!!

RCE(远程代码执行)

什么是远程代码执行漏洞?

简单来讲就是用户直接对系统进行命令操作,危害性极高,一般来说漏洞都是出现在用户需要对系统进行执行命令的接口,在测试当中重点排查一些可疑接口,比如一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,会返回给用户返回ping的结果。

简单的远程漏洞分析

先了解一些常见可能出现漏洞的函数:

1
2
3
4
5
6
7
system()
passthru()
exec()
shell_exec()
popen()
proc_open()
pcntl_exec()

我们在代码审计的时候,重点关注以上这些函数,如果是在CTF中发现这个函数,无疑他就是存在远程代码执行漏洞。

下面我们来看看在PHP中一个简单的命令执行漏洞。

1
2
3
4
5
6
<?php
$rce = $_GET['rce'];
if (isset($rce)){
eval($rce);
}
?>

我们看到以上函数发现了有我们上面诉说的可疑函数 eval() 说明了着就存在了远程命令执行漏洞

误区:有很多新手朋友,直接上来就输入命令,例如我是Windows ,可以发送whoami

发现出错了,哪到底是哪里出错了呢??

我们分析一下eval()这个函数,我们去翻PHP的语法手册

1
2
3
eval() 函数把字符串按照 PHP 代码来计算。

该字符串必须是合法的 PHP 代码,且必须以分号结尾。

说明 eva()执行的是PHP代码,并不能执行系统命令,这时候我们就需要用 system()这个函数来配合使用

1
2
system()函数
system() 函数一样-执行shell命令也就是向dos发送一条指令

就是说这个函数可以直接运行系统命令。我们将其改成

1
2
3
4
5
6
<?php
$rce = $_GET['rce'];
if (isset($rce)){
eval(system($rce));
}
?>

我们在输入的时候:

直接获取到对面的系统命令了

Ping_Ping_Ping

Ping 是用来测试网络是否正常,用途很广,但是在开发中也可能会给用户提供这项服务。我们用简单的代码,进行漏洞复现

当然我的靶场也是有的-可以进群下载哦

HTML:

Ping_ping_Ping
Ip:

PHP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$rce = $_POST['rce'];
echo "<pre>";
if(isset($rce)){
if(strpos($rce," ")){
echo "ohhhhhh ,no no no!!";
}else{
eval(system("ping -c 4 $rce"));
}
}else{
echo "<p style='color: red;'>you don't hack</p>";
}
echo "</pre>";
?>

这段代码区别就是多了这个

1
ping -c 4 $rce

指定命令指定参数,Ping 4下

我们测试ping 一下 127.0.0.1

windows系统命令拼接方式

1
2
3
4
“|”:管道符,前面命令标准输出,后面命令的标准输入。例如:help |more
“&” commandA & commandB 先运行命令A,然后运行命令B
“||” commandA || commandB 运行命令A,如果失败则运行命令B
“&&” commandA && commandB 运行命令A,如果成功则运行命令B

Linux系统命令拼接方式

1
2
3
4
5
6
7
8
(1)  ; 
分号,没有任何逻辑关系的连接符。当多个命令用分号连接时,各命令之间的执行成功与否彼此没有任何影响,都会一条一条执行下去。
(2) ||
逻辑或,当用此连接符连接多个命令时,前面的命令执行成功,则后面的命令不会执行。前面的命令执行失败,后面的命令才会执行。
(3) &&
逻辑与,当用此连接符连接多个命令时,前面的命令执行成功,才会执行后面的命令,前面的命令执行失败,后面的命令不会执行,与 || 正好相反。
(4) |
管道符,当用此连接符连接多个命令时,前面命令执行的正确输出,会交给后面的命令继续处理。若前面的命令执行失败,则会报错,若后面的命令无法处理前面命令的输出,也会报错。

基本上是没啥区别的

所以我们可以直接使用 “ ; ”来绕过等都可以绕过

1
127.0.0.1;whoami

其他命令也是一样的

基础的远程RCE就这么多,后续文章继续更新 GETSHELL提权等

未完待续…

失效的身份认证

通常,通过错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、密钥或会话令牌,或者利用其它开发缺陷来暂时性或永久性冒充其他用户的身份。

如何判断

1.用户身份验证凭证没有使用哈希或加密保护。
2.认证凭证可猜测,或者能够通过薄弱的帐户管理功能(例如账户创建、密码修改、密码恢复, 弱会话ID)重写。
3.会话ID暴露在URL里(例如URL重写)。
4.会话ID容易受到会话固定(session fixation)的攻击。
5.会话ID没有超时限制,或者用户会话或身份验证令牌特别是单点登录令牌在用户注销时没有失效。
6.成功注册后,会话ID没有轮转。
7.密码、会话ID和其他认证凭据使用未加密连接传输。

可能产生的攻击点

  • 允许密码填充,攻击者有可能获得完整的用户名密码列表
  • 允许暴力破解(枚举法,就是一直猜直到猜对)或【其他自动攻击】
  • 默认的管理员用户名和密码太过简单
  • 比较简单的忘记密码程序或者验证密码凭证
  • 使用明文、【加密】、【弱散列】密码
  • 缺少多因素身份验证或多因素身份验证失效
  • URL暴露会话ID
  • 登录成功后不更新会话ID

案例??

1
https://xxxx.com/admin/?usrid=.......

例如:

将会话ID放在 url里,这种是最危险的行为,当你分享给你的小伙伴点击,则小伙伴就直接可以使用你的登入会话ID 进行身份验证,相当于免去了密码登入,可以使用你的账号进行一切行为。

这种危害相当于XSS 但是又区别于XSS ,因为XSS是直接可以读取你的COOKIE 进行直接登入。

危害:

这些漏洞可能导致部分甚至全部账户遭受攻击,一旦攻击成功,攻击者就能执行合法的任何操作

防范

  • 少用默认配置。特别是管理员用户,默认配置会带来很多敏感信息的泄露;
  • 多因素身份验证,比如追加手机号验证等,这样可以防止自动填充带来的登录;
  • 定期执行弱密码检查。
  • 使用更加复杂的密码策略。
  • 限制多次登录失败的会话,登录失败后使用统一的回复
  • 登录成功后随机生成新ID,且不能显示在URL中,绝对超时后失效。

敏感数据泄露

敏感数据包括但不限于:口令、密钥、证书、会话标识、License、隐私数据(如短消息的内容)、授权凭据、个人数据(如姓名、住址、电话等)等。在程序文件、配置文件、日志文件、备份文件及数据库中都有可能包含敏感数据。主要分为由版本管理软件导致的泄露, 文件包含导致的泄露和配置错误导致的泄露。

例如:某高校在上传学生资料的时候,没注意上传的安全性,直接被谷歌浏览器等 搜索到关键信息

这些信息我们可以通关弱口令猜,可以登入学生的管理账号,进一步的进行测试

操作系统的版本信息

可以使用Nmap来扫描获取。(查看你的操作系统版本-例如win7 MS7_010)

中间件的版本信息

  • 404界面,显示中间件版本号(暴露可能存在nday)
  • kali信息收集工具:webwhat(返回中间件的版本)

Web敏感信息

  • 后台目录:弱口令,万能密码,爆破

  • 安装包:获取数据库信息,甚至是网站源码

  • 上传目录:截断、上传图片马等

  • mysql管理接口:弱口令、爆破,万能密码,然后脱裤,甚至是拿到shell

  • 安装页面 :可以二次安装进而绕过(setup)

  • phpinfo:配置的各种信息暴露出来

  • 编辑器:fck、ke、等

  • iis短文件利用:条件比较苛刻 windows、apache等

网络信息泄露

DNS域传送漏洞运维监控系统弱口令、网络拓扑泄露、zabbix弱口令、zabbix sql注入等

第三方软件应用

github上源码、数据库、邮箱密码泄露

漏洞危害

  1. 扫描内网开放服务
  2. 向内部任意主机的任意端口发送payload来攻击内网服务
  3. DOS攻击(请求大文件,始终保持连接Keep-Alive Always)
  4. 攻击内网的web应用,例如直接SQL注入XSS攻击
  5. 利用file、gopher、dict协议读取本地文件、执行命令等