20210214pentestLab1靶场 SQL注入

欢迎大家一起来Hacking水友攻防实验室学习,渗透测试,代码审计,免杀逆向,实战分享,靶场靶机,求关注
今天是情人节,因为疫情的缘故我不能和可爱的小女友在一起过,手动悲伤……但是,依旧要为国家做贡献呀,同时,也希望有情人终成家属,我们的国家越来越好,当代的中国,太需要鲁迅的傲骨和钱学森式为祖国奉献的科学家了,最后给大家拜个晚年,开始吧!giao!
example1
这是没有任何过滤的SQL注入,我将会详细介绍这一个例子,接下来每一个例子只会介绍绕过方法(敲黑板)
首先 root 后面加’ 判断是字符型:

至于为何是--+ 注释而不是#,这里有必要参考一下这篇文章,实际做题中我建议三种注释都试试……
https://blog.csdn.net/xiayun1995/article/details/86500605
接着判断列数,用order by ,判断出5列:


然后union 注入 判断可以注入的列数是那几列,得出1,2,3列可以注入:

database()查看数据库名:

union select 1,table_name,3,4,5 from information_schema.tables where table_schema='exercises'--+查看表名:

union select 1,column_name,3,4,5 from information_schema.columns where table_schema='exercises' and table_name='users'--+查看users表中列名:

最后查看列信息,账号密码:

example2过滤空格
if (preg_match('/ /', $_GET["name"])) {die("ERROR NO SPACE");}
$sql = "SELECT * FROM users where name='";
$sql .= $_GET["name"]."'";
$result = mysql_query($sql);
绕过方法有:
- %09 TAB 键(水平)
- %0a 新建一行
- %0c 新的一页
- %0d return 功能
- %0b TAB 键(垂直)
- %a0 空格
- /**/ 多行注释
采用/**/绕过:注意这里不能用--+ 因为+会被解释为空格,也被过滤掉,要用%23(#的HTML编码)

example3 过滤连续空格

if (preg_match('/\s+/', $_GET["name"])) {die("ERROR NO SPACE");}
$sql = "SELECT * FROM users where name='";
$sql .= $_GET["name"]."'";
$result = mysql_query($sql);
依旧/**/绕过,同2,不解释
example4
# id 直接拼接到 SQL 语句中
$sql="SELECT * FROM users where id=";
$sql.=mysql_real_escape_string($_GET["id"])." ";
$result = mysql_query($sql);
数字型注入,,完全没防护我感觉……同1
example5必须数字开头(简直废话id能不是数字开头吗)

example6
还是废话,id是数字就行。。。同5,不解释,手工注入时,确定列的数量,当前数据库,表,列时,payload和example1相同,只是不需要单引号,当查询各列的具体值时,会失败,因为表名不是以数字结尾,在users后面随便加几个数字就可以
example7
/m
绕过/m就用老套路%0a了,,注意,在%0a后面的语句不会被/m匹配到
example8
orderby 盲注 这里如果是忙注入就很恶心人了,首先我必须说一下第一个恶心点:
引号和反引号(键盘1左边那个)傻傻分不清楚,,因为这个卡我1下午:
然后第二个坑:![]()
这个函数会对单引号双引号等作出过滤,要绕过:

example9
这个和8是一样的,只不过字符型变为数据行就是了:注意order by之后没有`(反引号),而8里面是有的
$sql = "SELECT * FROM users ORDER BY ";
$sql .= mysql_real_escape_string($_GET["order"]);
$result = mysql_query($sql);

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
