MySQL创建用户与授权方法

2019-03-11 16:23:44 阅读:2837

-一,创建用户:命令:CREATEUSER'username'@'host'IDENTIFIEDBY'password';说明:username-你将创建的用户名,host-指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%.password-该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器.例子:CREATEUSER'dog'@'localhost'IDENTIFIEDBY'123456';CREATEUSER'pig'@'192.168.1.101_'IDENDIFIEDBY'123456';CREATEUSER'root'@'%'IDENTIFIEDBY'root';CREATEUSER'pig'@'%'IDENTIFIEDBY'';CREATEUSER'pig'@'%';二,授权:命令:GRANTprivilegesONdatabasename.tablenameTO'username'@'host'说明:privileges-用户的操作权限,如SELECT,INSERT,UPDATE等(详细列表见该文最后面).如果要授予所的权限则使用ALL.;databasename-数据库名,tablename-表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示,如*.*.例子:GRANTSELECT,INSERTONtest.userTO'pig'@'%';GRANTALLON*.*TO'pig'@'%';注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:GRANTprivilegesONdatabasename.tablenameTO'username'@'host'WITHGRANTOPTION;flushprivileges;刷新授权三.设置与更改用户密码3.1通过登录mysql系统,#mysql-uroot-pEnterpassword:【输入原来的密码】mysql>usemysql;mysql>updateusersetpassword=passworD("test")whereuser='root';mysql>flushprivileges;mysql>exit;命令:SETPASSWORDFOR'username'@'host'=PASSWORD('newpassword');如果是当前登陆用户用SETPASSWORD=PASSWORD("newpassword");例子:SETPASSWORDFOR'pig'@'%'=PASSWORD("123456");3.2删除用户:DeleteFROMuserWhereUser='test'andHost='localhost';然后刷新权限;删除账户及权限:>dropuser用户名@'%';        >dropuser用户名@localhost;四.撤销用户权限命令:REVOKEprivilegeONdatabasename.tablenameFROM'username'@'host';说明:privilege,databasename,tablename-同授权部分.例子:REVOKESELECTON*.*FROM'pig'@'%';注意:假如你在给用户'pig'@'%'授权的时候是这样的(或类似的):GRANTSELECTONtest.userTO'pig'@'%',则在使用REVOKESELECTON*.*FROM'pig'@'%';命令并不能撤销该用户对test数据库中user表的SELECT操作.相反,如果授权使用的是GRANTSELECTON*.*TO'pig'@'%';则REVOKESELECTONtest.userFROM'pig'@'%';命令也不能撤销该用户对test数据库中user表的Select权限.具体信息可以用命令SHOWGRANTSFOR'pig'@'%';查看.五.删除用户命令:DROPUSER'username'@'host';附表:在MySQL中的操作权限ALTERAllowsuseofALTERTABLE.ALTERROUTINEAltersordropsstoredroutines.CREATEAllowsuseofCREATETABLE.CREATEROUTINECreatesstoredroutines.CREATETEMPORARYTABLEAllowsuseofCREATETEMPORARYTABLE.CREATEUSERAllowsuseofCREATEUSER,DROPUSER,RENAMEUSER,andREVOKEALLPRIVILEGES.CREATEVIEWAllowsuseofCREATEVIEW.DELETEAllowsuseofDELETE.DROPAllowsuseofDROPTABLE.EXECUTEAllowstheusertorunstoredroutines.FILEAllowsuseofSELECT...INTOOUTFILEandLOADDATAINFILE.INDEXAllowsuseofCREATEINDEXandDROPINDEX.INSERTAllowsuseofINSERT.LOCKTABLESAllowsuseofLOCKTABLESontablesforwhichtheuseralsohasSELECTprivileges.PROCESSAllowsuseofSHOWFULLPROCESSLIST.RELOADAllowsuseofFLUSH.REPLICATIONAllowstheusertoaskwhereslaveormasterCLIENTserversare.REPLICATIONSLAVENeededforreplicationslaves.SELECTAllowsuseofSELECT.SHOWDATABASESAllowsuseofSHOWDATABASES.SHOWVIEWAllowsuseofSHOWCREATEVIEW.SHUTDOWNAllowsuseofmysqladminshutdown.SUPERAllowsuseofCHANGEMASTER,KILL,PURGEMASTERLOGS,andSETGLOBALSQLstatements.Allowsmysqladmindebugcommand.Allowsoneextraconnectiontobemadeifmaximumconnectionsarereached.UPDATEAllowsuseofUPDATE.USAGEAllowsconnectionwithoutanyspecificprivileges.

windows系统Java常用开发环境

2019-03-11 16:22:27 阅读:2660

JDK简介JDK是Java语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。安装及配置1.安装jdk,随意选择目录2.安装jre,目录和jdk目录相同即可3.创建JAVA_HOME环境变量指向该目录,系统变量path追加%JAVA_HOME%\bin4.检验是否配置成功,打开cmd窗口,输入java-version,显示版本信息则说明安装和配置成功JMeter简介ApacheJMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。它可以用于测试静态和动态资源,例如静态文件、Java小服务程序、CGI脚本、Java对象、数据库、FTP服务器,等等。JMeter可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。Apachejmeter可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。安装及配置将压缩文件解压到某个目录,创建JMETER_HOME环境变量指向该目录,系统变量path追加%JMETER_HOME%\bin运行打开cmd窗口,输入jmeter启动Tomcat简介Tomcat是Apache软件基金会(ApacheSoftwareFoundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和JSP规范总是能在Tomcat中得到体现,Tomcat5支持最新的Servlet2.4和JSP2.0规范。因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat时,它实际上作为一个与Apache独立的进程单独运行的。诀窍是,当配置正确时,Apache为HTML页面服务,而Tomcat实际上运行JSP页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。安装及配置1.安装Tomcat前需安装JDK2.将压缩文件解压到某个目录,创建CATALINA_HOME环境变量指向该目录,系统变量path追加%CATALINA_HOME%\bin3.检验是否配置成功,进入bin目录,运行startup.bat,启动成功则说明安装和配置成功Maven简介Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。Maven除了以程序构建能力为特色之外,还提供高级项目管理工具。由于Maven的缺省构建规则有较高的可重用性,所以常常用两三行Maven构建脚本就可以构建简单的项目。由于Maven的面向项目的方法,许多ApacheJakarta项目发文时使用Maven,而且公司项目采用Maven的比例在持续增长。Maven这个单词来自于意第绪语(犹太语),意为知识的积累,最初在JakataTurbine项目中用来简化构建过程。当时有一些项目(有各自Antbuild文件),仅有细微的差别,而JAR文件都由CVS来维护。于是希望有一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,以及一种简单的方式在多个项目中共享JARs。安装及配置将压缩文件解压到某个目录,创建MAVEN_HOME环境变量指向该目录,系统变量path追加%MAVEN_HOME%\binsettings.xml配置在Maven中提供了一个settings.xml文件来定义Maven的全局环境信息。这个文件存在于Maven安装目录的conf子目录下面,主要包括以下元素:llocalRepository表示Maven用来在本地储存信息的本地仓库的目录。默认是用户家目录下面的.m2/repository目录。linteractiveMode表示是否使用交互模式,默认是true;如果设为false,那么当Maven需要用户进行输入的时候,它会使用一个默认值。loffline表示是否离线,默认是false。这个属性表示在Maven进行项目编译和部署等操作时是否允许Maven进行联网来下载所需要的信息。lpluginGroups在pluginGroups元素下面可以定义一系列的pluginGroup元素。表示当通过plugin的前缀来解析plugin的时候到哪里寻找。pluginGroup元素指定的是plugin的groupId。默认情况下,Maven会自动把org.apache.maven.plugins和org.codehaus.mojo添加到pluginGroups下。lproxies其下面可以定义一系列的proxy子元素,表示Maven在进行联网时需要使用到的代理。当设置了多个代理的时候第一个标记active为true的代理将会被使用。lservers其下面可以定义一系列的server子元素,表示当需要连接到一个远程服务器的时候需要使用到的验证方式。lmirrors用于定义一系列的远程仓库的镜像。alimavencentralaliyunmavenhttp://maven.aliyun.com/nexus/content/groups/public/lprofiles用于指定一系列的profile。profile元素由activation、repositories、pluginRepositories和properties四个元素组成。当一个profile在settings.xml中是处于活动状态并且在pom.xml中定义了一个相同id的profile时,settings.xml中的profile会覆盖pom.xml中的profile。修改maven的默认JDK版本:settings.xml添加如下代码jdk-1.8true1.81.81.81.8MySQL简介MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件。MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。安装及配置1.将压缩文件解压到某个目录,创建MYSQL_HOME环境变量指向该目录,系统变量path追加%MYSQL_HOME%\bin2.在该目录下新建my.ini文件,修改配置basedir、datadir,文件内容:[mysqld]basedir=D:\ProgramFiles\mysql-5.7\datadir=D:\ProgramFiles\mysql-5.7\data\port=3306skip-grant-tables3.以管理员身份打开cmd窗口,进入该目录的bin文件夹,输入mysqld--install把MySQL服务器进程添加到服务选项4.输入mysqld--initialize初始化数据文件,创建一个登陆用户,用户名默认是root,密码默认为空5.输入netstartmysql启动MySQL服务6.输入mysql-uroot-p进入MySQL管理界面,使用updatemysql.usersetauthentication_string=password('123456789')whereuser='root'andHost='localhost';修改root密码7.输入flushprivileges;刷新权限8.修改my.ini文件,删除skip-grant-tables9.重启MySQL服务NavicatforMySQL软件连接报错1862解决方法:管理员权限运行命令mysqladmin-uroot-ppassword修改密码Redis简介Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset--有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。Redis是一个高性能的key-value数据库。Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。安装及配置将压缩文件解压到某个目录,创建REDIS_HOME环境变量指向该目录,系统变量path追加%REDIS_HOME%运行打开cmd窗口,输入redis-server.exeredis.windows.conf启动服务端;打开另一个cmd窗口,输入redis-cli.exe-h127.0.0.1-p6379启动客户端Eclipse简介Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。安装及配置1.安装Eclipse前需安装JDK2.将压缩文件解压到某个目录,运行eclipse.exe启动程序即可集成Tomcat打开Eclipse,单击“Window”菜单,选择“Preferences”,找到“Server”—“RuntimeEnvironments”,点击“Add”添加对应版本的Tomcat点击“Next”,选择Tomcat的安装目录点击“Finish”集成Maven打开Eclipse,单击“Window”菜单,选择“Preferences”,找到“Maven”—“Installations”,点击“Add”选择Maven的安装目录点击“Finish”;找到“Maven”—“UserSettings”,修改setting.xml为刚才配置的Maven目录下的setting.xml集成SVN使用Eclipse在线安装subclipse插件,打开Eclipse,单击“Help”菜单,选择“InstallNewSoftware”,点击“Add”,填入地址“https://dl.bintray.com/subclipse/releases/subclipse/latest/”,点击“OK”,加载出列表后选择“SelectAll”,点击“Next”直到看到“Finish”,安装完成后需要重启Eclipse

Android开发优化之——从代码角度进行优化

2019-03-11 16:21:26 阅读:2517

Android开发优化之——从代码角度进行优化通常我们写程序,都是在项目计划的压力下完成的,此时完成的代码可以完成具体业务逻辑,但是性能不一定是最优化的。一般来说,优秀的程序员在写完代码之后都会不断的对代码进行重构。重构的好处有很多,其中一点,就是对代码进行优化,提高软件的性能。下面我们就从几个方面来了解Android开发过程中的代码优化。通常我们写程序,都是在项目计划的压力下完成的,此时完成的代码可以完成具体业务逻辑,但是性能不一定是最优化的。一般来说,优秀的程序员在写完代码之后都会不断的对代码进行重构。重构的好处有很多,其中一点,就是对代码进行优化,提高软件的性能。下面我们就从几个方面来了解Android开发过程中的代码优化。1)静态变量引起内存泄露在代码优化的过程中,我们需要对代码中的静态变量特别留意。静态变量是类相关的变量,它的生命周期是从这个类被声明,到这个类彻底被垃圾回收器回收才会被销毁。所以,一般情况下,静态变量从所在的类被使用开始就要一直占用着内存空间,直到程序退出。如果不注意,静态变量引用了占用大量内存的资源,造成垃圾回收器无法对内存进行回收,就可能造成内存的浪费。先来看一段代码,这段代码定义了一个Activity。privatestaticResourcesmResources;@OverrideprotectedvoidonCreate(Bundlestate){super.onCreate(state);if(mResources==null){mResources=this.getResources();}}这段代码中有一个静态的Resources对象。代码片段mResources=this.getResources()对Resources对象进行了初始化。这时Resources对象拥有了当前Activity对象的引用,Activity又引用了整个页面中所有的对象。如果当前的Activity被重新创建(比如横竖屏切换,默认情况下整个Activity会被重新创建),由于Resources引用了第一次创建的Activity,就会导致第一次创建的Activity不能被垃圾回收器回收,从而导致第一次创建的Activity中的所有对象都不能被回收。这个时候,一部分内存就浪费掉了。经验分享:在实际项目中,我们经常会把一些对象的引用加入到集合中,如果这个集合是静态的话,就需要特别注意了。当不需要某对象时,务必及时把它的引用从集合中清理掉。或者可以为集合提供一种更新策略,及时更新整个集合,这样可以保证集合的大小不超过某值,避免内存空间的浪费。2)使用Application的Context在Android中,ApplicationContext的生命周期和应用的生命周期一样长,而不是取决于某个Activity的生命周期。如果想保持一个长期生命的对象,并且这个对象需要一个Context,就可以使用Application对象。可以通过调用Context.getApplicationContext()方法或者Activity.getApplication()方法来获得Application对象。依然拿上面的代码作为例子。可以将代码修改成下面的样子。privatestaticResourcesmResources;@OverrideprotectedvoidonCreate(Bundlestate){super.onCreate(state);if(mResources==null){//mResources=this.getResources();mResources=this.getApplication().getResources();}}在这里将this.getResources()修改为this.getApplication().getResources()。修改以后,Resources对象拥有的是Application对象的引用。如果Activity被重新创建,第一次创建的Activity就可以被回收了。3)及时关闭资源Cursor是Android查询数据后得到的一个管理数据集合的类。正常情况下,如果我们没有关闭它,系统会在回收它时进行关闭,但是这样的效率特别低。如果查询得到的数据量较小时还好,如果Cursor的数据量非常大,特别是如果里面有Blob信息时,就可能出现内存问题。所以一定要及时关闭Cursor。下面给出一个通用的使用Cursor的代码片段。Cursorcursor=null;try{cursor=mContext.getContentResolver().query(uri,null,null,null,null);if(cursor!=null){cursor.moveToFirst();//处理数据}}catch(Exceptione){e.printStatckTrace();}finally{if(cursor!=null){cursor.close();}}即对异常进行捕获,并且在finally中将cursor关闭。同样的,在使用文件的时候,也要及时关闭。4)使用Bitmap及时调用recycle()前面的章节讲过,在不使用Bitmap对象时,需要调用recycle()释放内存,然后将它设置为null。虽然调用recycle()并不能保证立即释放占用的内存,但是可以加速Bitmap的内存的释放。在代码优化的过程中,如果发现某个Activity用到了Bitmap对象,却没有显式的调用recycle()释放内存,则需要分析代码逻辑,增加相关代码,在不再使用Bitmap以后调用recycle()释放内存。5)对Adapter进行优化下面以构造ListView的BaseAdapter为例说明如何对Adapter进行优化。在BaseAdapter类中提供了如下方法:publicViewgetView(intposition,ViewconvertView,ViewGroupparent)当ListView列表里的每一项显示时,都会调用Adapter的getView方法返回一个View,来向ListView提供所需要的View对象。下面是一个完整的getView()方法的代码示例。publicViewgetView(intposition,ViewconvertView,ViewGroupparent){ViewHolderholder;if(convertView==null){convertView=mInflater.inflate(R.layout.list_item,null);holder=newViewHolder();holder.text=(TextView)convertView.findViewById(R.id.text);convertView.setTag(holder);}else{holder=(ViewHolder)convertView.getTag();}holder.text.setText("line"+position);returnconvertView;}privateclassViewHolder{TextViewtext;}当向上滚动ListView时,getView()方法会被反复调用。getView()的第二个参数convertView是被缓存起来的List条目中的View对象。当ListView滑动的时候,getView可能会直接返回旧的convertView。这里使用了convertView和ViewHolder,可以充分利用缓存,避免反复创建View对象和TextView对象。如果ListView的条目只有几个,这种技巧并不能带来多少性能的提升。但是如果条目有几百甚至几千个,使用这种技巧只会创建几个convertView和ViewHolder(取决于当前界面能够显示的条目数),性能的差别就非常非常大了。6)代码“微优化”当今时代已经进入了“微时代”。这里的“微优化”指的是代码层面的细节优化,即不改动代码整体结构,不改变程序原有的逻辑。尽管Android使用的是Dalvik虚拟机,但是传统的Java方面的代码优化技巧在Android开发中也都是适用的。下面简要列举一部分。因为一般Java开发者都能够理解,就不再做具体的代码说明。创建新的对象都需要额外的内存空间,要尽量减少创建新的对象。将类、变量、方法等等的可见性修改为最小。针对字符串的拼接,使用StringBuffer替代String。不要在循环当中声明临时变量,不要在循环中捕获异常。如果对于线程安全没有要求,尽量使用线程不安全的集合对象。使用集合对象,如果事先知道其大小,则可以在构造方法中设置初始大小。文件读取操作需要使用缓存类,及时关闭文件。慎用异常,使用异常会导致性能降低。如果程序会频繁创建线程,则可以考虑使用线程池。经验分享:代码的微优化有很多很多东西可以讲,小到一个变量的声明,大到一段算法。尤其在代码Review的过程中,可能会反复审查代码是否可以优化。不过我认为,代码的微优化是非常耗费时间的,没有必要从头到尾将所有代码都优化一遍。开发者应该根据具体的业务逻辑去专门针对某部分代码做优化。比如应用中可能有一些方法会被反复调用,那么这部分代码就值得专门做优化。其它的代码,需要开发者在写代码过程中去注意。

PhpStorm 2018 安装及破解方法

2019-03-11 15:43:05 阅读:2501

https://blog.csdn.net/u012278016/article/details/81772566目录1>.安装:2>.破解PhpStorm是JetBrains公司开发的一款商业的PHP集成开发工具。PhpStorm可随时帮助用户对其编码进行调整,运行单元测试或者提供可视化debug功能和智能HTML/CSS/JavaScript/PHP编辑、代码质量分析、版本控制集成(SVN、GIT)、调试和测试等功能。另外,它还是跨平台。在Windows和MacOS下都可以使用。PhpStorm-让开发更智能,而不是更困难。1>.安装:首先官网下载PhpStorm。下载完软件之后,双击安装文件即可进行安装,双击后出现下图所示的提示,点击Next即可。然后会出现一个选择安装目标路径的提示,你可以自定义安装路径也可以选择默认安装路径(默认安装路径是在C盘,以后运行软件时会更加快),我是自定义安装路径把软件安装在D盘。选择完后点击Next即可。配置你的PhpStorm,除了32位,其他的全部选中,点击Next。点击Install即可。然后就会出现安装过程界面以及下载一些主要的程序。安装完成,点击Finish即可。第一次启动会出现下面设置界面,主要是IDE的配置信息,如果没有选择Donotimportsetting即可。然后出现注册界面。2>.破解修改电脑中hosts文件(地址:C:\Windows\System32\drivers\etc),改变IDE注册验证服务器地址如下:添加“0.0.0.0account.jetbrains.com”字符串到host文件中进入网站http://idea.lanyus.com/获取注册码。点击获取注册码。在激活界面粘贴注册码,点击Ok即可激活。激活后打开Phpstorm出现新建打开项目界面。完毕!

本文主要介绍APP漏洞挖掘中逻辑漏洞,包括任意用户密码重置,支付漏洞,任意用户未授权登录。

2019-03-09 15:03:06 阅读:3030

浅谈APP漏洞挖掘之逻辑漏洞作者:陈奕霖联系方式:1909498865@qq.com文章中若无特别说明,实例皆为本人自主挖掘。转载请注明出处,本文仅为个人经验总结,介绍的并非所有方法,只是一些最常见的方法。如有错误,烦请指出。0x00简介本文主要介绍APP漏洞挖掘中逻辑漏洞,包括任意用户密码重置,支付漏洞,任意用户未授权登录。0x01任意用户密码重置正文首先,我们来看看任意用户密码重置。方法一:密码找回的凭证太弱,为4位或6位纯数字,并且时效过长,导致可爆破从而重置用户密码。这里我们来看一个实例,目前厂商已经修复。验证码为4位纯数字,我们使用burpsuite爆破。可以看到成功爆破出了。4位数字0~9有9999种可能,我们线程设置10,五分钟之内就可以爆破出凭证。方法二:验证码传输在数据包中。这里共有两种可能,一种在返回包,一种在获取验证码的数据包中。我们来看两个实例。第一个:验证码在返回包中在输入好手机号点击下一步时,我们抓包,截取返回包。第二个:验证码在获取验证码的数据包中Checkcode后面的六位数字就为验证码了,这种情况我只见过一次。方法三:输入好凭证后,重置密码时替换手机号。看个实例:这款APP重置密码分为两步,第一步是输入手机号获取验证码并填入,正确后即跳转到下一步,然后就是输入新密码。我们在输入新密码后抓包,替换手机号放包即可重置。方法四:修改返回包内容,把错误的改为正确的。具体来看一个实例:我在输入好手机号获取验证码后,随便输入一个数字。然后抓包截取返回包修改1为0方法五:获取验证码时手机号为明文,修改为自己的从而达到欺骗验证。这种方法由于我在挖掘APP漏洞中暂时没有遇到,所以无法找到APP实例,但是有一个WEB实例,这里也贴上来,思路方法都是一样的。改为自己的,即可收到验证码。0x02支付漏洞正文方法一:修改金额还是来看一个实例,确认支付时候抓包,截取返回包。嘿嘿,放包即可成功一毛钱买飞机杯^_^方法二:修改金额为负数。此方法我目前没有遇到过,所以不配实例,操作起来也是一样的。0x03任意用户未授权登录方法一:登录时抓包,修改uid0x04总结以上漏洞修复方法:找回密码凭证够复杂并且不可猜测,同时注意以上逻辑问题,不可存在越权,或者重要的凭证在不该出现的地方出现。

上报错误