WEB
我是傻逼
暴力破解[✔]
。。。。这个密码我在流量包,找了好久还是没找到
重新做一边
根据请求是POST,筛选数据
查找表达式如下:http.request.method == "POST"
数据从89603开始到350849结束
之后的正常的思路是查看回显,但比赛时。。。。方法不对(浪费大量时间),现在想想,比较好的方法如下:
(((frame.number <= 350849 && frame.number >= 89603))&& http ) && (http.response_for.uri == "http://192.168.110.129/validate.php")
得到所有对validata.php
爆破的数据
之后观察数据中,可以观察到错误的数据长度基本分为697
、573
,只要再将这些数据剔除
以 数据长度为573
的数据为例
最终的查询语句如下:
((((frame.number <= 350849 && frame.number >= 89603))&& http ) && (http.response_for.uri == "http://192.168.110.129/validate.php")) && (frame.len != 697 && frame.len !=573)
完美 😀 ,还剩一步
、密码: wedding
之后用密码访问页面,就可以获得flag
。。。我太菜了👎
fast x 3[✔]
payload,代码很烂,希望大佬们见到了,不会玷污你们双眼
import requests
import re,urllib.parse,binascii
# 必须要有Cookie,否则每次读取的值不一样,不能正常解题
header = {
"Cookie":"PHPSESSID=6h032iev95o89iretdvfn1is56; JSESSIONID=71381F2195975829E722B94B35181A3C; session=cd8b8b1a-259a-46a2-b4b9-af31e7537370"
}
url = "http://192.168.2.110:23791/"
rep = requests.get(url,headers=header)
ress = rep.text
res = re.findall('id="math">(.*?)</div></b>',ress)
n = len(res[0])
re = res[0]
a= []
for i in range(0,n):
a.append(re[i])
a.sort()
b = []
count = 0
for i in range(0,n-1):
if(a[i] != a[i+1]):
b.append(a[i])
b.append(a[-1])
count = []
mnm = []
for i in range (len(b)):
mmm = 0
for j in range(len(a)):
if(b[i] == a[j]):
mmm = mmm + 1
mnm.append(mmm)
count.append(mmm)
count.sort()
sss =''
print(mnm,count)
for i in range(len(b)):
for j in range(len(b)):
if(count[i] == mnm[j] ):
sss=sss+b[j]
print(sss)
data= {
"res":sss
}
ccc = requests.post(url,data=data,headers=header)
print(ccc.text)
easy_python[✖]
这题应该是admin 构造 jwt
POST /login HTTP/1.1
Host: 192.168.2.110:23791
Content-Length: 14
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.2.110:23791
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36 Edg/86.0.622.38
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.2.110:23791/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: session=d47a3675-1c86-4e98-9fdb-17ba95a1e34e; PHPSESSID=6h032iev95o89iretdvfn1is56; JSESSIONID=71381F2195975829E722B94B35181A3C
Connection: close
username=fe1w0
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 185
Vary: Cookie
Set-Cookie: session=eyJ1c2VybmFtZSI6ImZlMXcwIn0.X4fmLQ.TTcQGvaoqXRwvQGYxLsfJOXBHRo; HttpOnly; Path=/
Server: Werkzeug/1.0.1 Python/3.8.5
Date: Thu, 15 Oct 2020 06:03:25 GMT
<html>
<head>
<meta http-equiv="refresh" content="1;url=/">
<link href="/static/bootstrap.min.css" rel="stylesheet">
</head>
<body>
</body>
</html>
./jwtcrack eyJ1c2VybmFtZSI6ImZlMXcwIn0.X4foXQ.6Qc3MtO9q-tceROyCRpvhOjadp4
eyJ1c2VybmFtZSI6ImZlMXcwIn0.X4foXQ.6Qc3MtO9q-tceROyCRpvhOjadp4
CRYPTO
RSA[✖]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from Crypto.Util.number import *
import gmpy2
import os
from secret import flag
p = gmpy2.next_prime(bytes_to_long(os.urandom(32) * 10))
q = getPrime(2048)
n = p * q
m = bytes_to_long(flag)
e = 65537
c = pow(m, e, n)
print 'n = ' + str(n)
print 'c = ' + str(c)
# 运行结果输出
# n = 9120210412817098868567410854637632250220555881403526554620639158581419400118706476426462580532569560128403528542849222604236640862674516611277130361890497616002043535833874824203278779255224103895976559478230598208736638548838369515266506758788653023380759388265524679357661867344583727639009050611035809615332415345615636794183389139631751072725812173232153921977529854299720035907475080123728133963132357285009229616899363413864250134103133772163607484794238528972871955212167583918722247406108717508117668301570190879613631465451744135100528987401664293214977426648232669628002711796584477405954390921585168542545024508132280795239187047607902042772074354512983547626983416047058674495234725402709185065533866399101327869049927071762987405052014360342557346201760417195526717659432120957024932822171629034785982161149134423193624715061013742839402782240625571812632970088905336230003285927069650264756078977556405903281928093668669291639199556779542688708405151017597677182338101624350346890556571828242761503472862589187188272783083175514693346986425145048900560704517281059296515380916946885637766528669652741939121435925118622627340581156923111326642804173809225000120356084999577920000481451709828075752253192537628742219663830938886966680564258836058435847445136469870523064012091603727249413340707659477419033271750976011384443208371660411376327908639483034074911057106131325663
# c = 7068462753085070298092306006815948822917293261569147262935876173777154611330212172780298815871946045639185357656186163809499649889823797927617022879328397754544340874952687572138224768719999154448738757631265317915591819395360957051438805269461772096089208044993726972263528636921213722053915213474520713305628933165329554039041526341429811011879399124487420973883220496337343697082485151325947637134492168684404895651666064423117891350949942888278577264641878267652440305311472437072576068073588628794693349303196170011208043072754814062079404857657352761995684725014730958374555123902870761944058212939416619872746207245705213743023048901892977114871581000445118225605980711967279184600832881914000747237143653411293658641093111449235793736446421524719927367452081557329271167988711131750096910582920748875147684842547191116046110455610485921697703084407073334158845880179092914138111196153821093666870713318435216431977100255451151613217255214311447270315317924828002186873831048826117341746203538919869858723643158591679168166815433400943179342639989830429265410316662281946735133048179580170395697284908451588172527612828357594205617900793644449780703541620423822874332895281227408264377675840472406248296158342659308845264164232068007825845287325024564804783116616695927303806931940737550484802677095488750998780934178991718038605826623684585430755074719975767565185371149546480577
MISC
Old_program[✔]
- readme.txt
请根据以下文字说明以及参考对照文件,解析出flaginherer.png中的信息。 以CnHongKe{}的格式提交
1801年,法国人约瑟夫·玛丽·雅卡尔发明了打孔卡用在控制织布机织出的图案。
1880年代,美国人口调查局职员赫尔曼·何乐礼发明了用于人口普查数据的穿孔卡片及机器,并用于1890年美国人口普查,仅6周就完成了统计。而此前1880年美国人口普查的数据全靠手工处理,历时7年才得出最终结果。何乐礼创建的公司,发展为今日的IBM。1890年代至20世纪初,穿孔卡广泛运用在商业和相关文书。20世纪期间,打孔卡应用在单位记录机作为输入端、处理和计算机程序。早期的数字电脑运用打孔机已输入信息的打孔卡当做计算机程序和数据的主要输入介质。另外,一些投票机也运用打孔卡。
1928年,IBM发明的80列、矩形孔卡片,成为事实上的标准。其工作原理如下:编号为0至9,总计10行;以及一块区域,用于第11、第12行(注意,没有编号为第10的行)。
每列的穿孔组合用于表示单个字符:
数字通过在行0至行9直接打1个孔来表示。
空格符的表示,不需要打孔。
字母用2个孔表示:一个孔在第11、第12、第0行;另一个孔在第1至第9行。字母表被依次分为由9个字母组成的区(zones),每个区的字母依次在第1至第9行打孔。每个区分别在第11、第12、第0行打孔。第3区第1个字符保留未使用。
一些特殊字符使用了额外的单孔表示,或者双孔表示。
大多数特殊字符(如标点符号等)用3孔表示:第8行被穿孔;第0、第11、第12行有1个穿孔;第1到第7行有1个穿孔。第9行保留未使用。
总计表示了67个字符。进入到数字计算机时代,上述穿孔卡片字符表示方式发展为6比特的字符编码:用4比特表示第0行至第9行的哪一行被穿孔;用2比特表示第11、第12行的哪一行被穿孔。这可以表示所有的单孔或者双孔的字符表示,这被称作“二进制编码的十进制交换码”(Binary Coded Decimal Information Code,BCDIC, BCD码)。
1964年,IBM在BCDIC上又增加2个比特,形成了8比特的“扩充的二进制编码的十进制交换码”(Extended Binary Coded Decimal Information Code,EBCDIC),首先用于IBM System/360计算机。EBCDIC向后兼容BCDIC,扩充了小写字母,以及从ASCII码借鉴来的一些控制字符(穿孔卡片实际上不需要,也不表示控制字符)。因为EBCDIC脱胎于穿孔卡,所以其字母表是以9个为一组,彼此不连续编码表示的,这给程序员带来了很大不便。例如,字母“I”编码为0xC9;而字母“J”编码为0xD1,二者中间有8个码位间断。EBCDIC一直用到目前的IBM System/390计算机系统。
- 参考对照文件
- flaginherer
有手就能做的题目。。。。而我一直看花了
根据readme.txt和参考对照文件,得到参照表
一一比较,得到flag: H3110W0RLD
🌧 感想
在断网的情况下,最好提前备份和下载各位师傅的博客,各类工具和知识点(尤其是python&php手册这类),否则会难受的一批,。此外,线下比赛&单人的时候,不要慌张。。。还有一个教训,多练习,多练习流量分析和脚本编写。
最后,我🙁🌧,(🥼👖🧦)💦
哦吼 才发现 换主题了 可以 可以