sqli靶场完结篇!!!!

靶场,靶场,一个靶场打一天,又是和waf斗智斗勇的一天,waf我和你拼啦!!

sqli靶场完结篇!!!!_第1张图片

31.多个)号

先是一套基本的判断 ,发现是字符型,然后发现好像他什么都不过滤?于是开始poc

321313132"+union+select+2,user(),"2

于是你就会又见到熟悉的朋友,于是就能猜到又有)(这种东西

换句poc?发现就能成功bypasss

321313132")+union+select+2,user(),("2

sqli靶场完结篇!!!!_第2张图片

32.宽字节注入

当我们添加一个' 就能看见这样的回显

sqli靶场完结篇!!!!_第3张图片

那就想都不用想,就是宽字节注入,于是就猜测是不是字符型,其实如果他把注释符号也过滤了的话那就是绝杀了,但是好险他不过滤

sqli靶场完结篇!!!!_第4张图片

sqli靶场完结篇!!!!_第5张图片

于是我们就构造poc ,但是这里的盲注poc是不行的,因为会被转义 所以要联合查询

sqli靶场完结篇!!!!_第6张图片

33.你三十二关再考我一次是吧?

这题还以为有什么过滤,结果发现和上一关一摸一样

                        sqli靶场完结篇!!!!_第7张图片 玩我是吧

34.宽字节登录

首先我们能看见一个登录界面,不用想,肯定是要我们免密码登录

sqli靶场完结篇!!!!_第8张图片

由于先测试一下注入的姿势,能发现是宽字节的过滤

于是就有poc:

admin%df'or+1=1--+

成功登录

sqli靶场完结篇!!!!_第9张图片

35.why_care_for_addslahes()

做这题真就有种打ctf的感觉了,有意思       sqli靶场完结篇!!!!_第10张图片

首先一顿操作猛如虎,先加一个单引号,猜测是宽字节

然后就发现为啥啥都过滤但是却报错???

sqli靶场完结篇!!!!_第11张图片

无意间我瞅了一眼网页标签,然后就就开始笑了,我们判断字符注入的方法是什么?你肯定会说

sqli靶场完结篇!!!!_第12张图片 :“单引号报错,两个引号不报错

不错,确实是这样的,但是对应宽字节呢??来看宽字节的绕过过程

  1. 原来:select * from users where id='1' ;
  2. 开始注入: select * from users where id='1 %df/ '  %df/'   ';
  3. 然后就会被解释成 select * from users where id='1運'  運'';

这是候的sql语句是肯定是错的 因为 中间多了一个中文字 所以我们根本无法根据报错来判断注入类型   也就是这个可能是字符型或者数字型!!!! 不信 不妨试试数字型的poc

0+union+select+1,database(),user()--+

所以这就是他的网页名的来由:why_care_addslashes的原因 与这个函数根本就没有关系!!

36.mysql_real_escape_string

这个函数和addslashes差不都是对一些特定的字符添加一个 / 并且拼接 ,所以他的poc和前面差不多,(或者说是一摸一样)

0%df'+union+select+1,user(),database()--+

37.你三十四关又又又考完一次是吧??

这个和三十四关又是一样的

我belike:sqli靶场完结篇!!!!_第13张图片 不多说,直接上poc

admin%df'+or+1=1--+

38.堆叠注入

这个我在我之前的blog里面讲过,就不多赘述了

39.堆叠注入但是数字型

这个其实就是堆叠注入的数字型 比字符型还简单 也不多赘述了

                        sqli靶场完结篇!!!!_第14张图片

40.Seems 这个代码有点问题??

做这一关的时候,小编是有一点疑惑,因为你会发现这一关的poc可以无限写

0')union+select+1,database(),user()--+
1')and+length(database())=8--+
0')union+select+1,user(),database()--+

你就会发现,他们都是可以的,难道这一关就止步于此???

sqli靶场完结篇!!!!_第15张图片

于是就去看了一下他的源代码,发现好家伙,代码还不少,那不因该毫无新意啊!?

sqli靶场完结篇!!!!_第16张图片

访问login.php,发现报错

sqli靶场完结篇!!!!_第17张图片

于是我就发现问题出现在了login.php那里,一起来看代码

$login = sqllogin();
if (!$login== 0) 
{
	$_SESSION["username"] = $login;
	setcookie("Auth", 1, time()+3600);  /* expire in 15 Minutes */
	header('Location: logged-in.php');
} 
else
{
?>

其中slap1.jpg就是我们看见的那张照片,所以可以知道$login=0,而$login又是通过sqllogin函数实现的,那么我们去看一下sqllogin函数就好

function sqllogin(){

   $username = mysql_real_escape_string($_POST["login_user"]);
   $password = mysql_real_escape_string($_POST["login_password"]);
   $sql = "SELECT * FROM users WHERE username='$username' and password='$password'";
//$sql = "SELECT COUNT(*) FROM users WHERE username='$username' and password='$password'";
   $res = mysql_query($sql) or die('You tried to be real smart, Try harder!!!! :( ');
   $row = mysql_fetch_row($res);
	print_r($row) ;
   if ($row[1]) {
			echo $row[1];
   } else {
      		return 0;
   }

}

来审计一下代码:

  • 首先就是mysql_real_escape_string函数,用来将特殊字符转义
  • 接着就是查询
  • 如果查询成功就将得到的第一行结果输出,否则就输出You tried to be real smart, Try harder!!!! :(  然后结束程序
  • 但是如果我们的login_user和login_password不设置值的话就会返回0 也就是我们现在所看见的页面情况

所以就在url拼接login_user 和 login_password这两个字段就好

sqli靶场完结篇!!!!_第18张图片

但是不难发现就算将这两个字段拼接上也好,也还是报错,因该是还缺了什么参数,不管了下一题

41.考了个啥,还是堆叠???

这道题也是做的云里雾里的,啥都不过滤,一句poc就注出来了

sqli靶场完结篇!!!!_第19张图片

查看了源代码才发现原来是堆叠注入,那也不多赘述了

42.Password字段没有过滤

尝试一下,发现在账号处无论怎么测试都没有发现注入点,于是就去试一下密码处,成功报错

sqli靶场完结篇!!!!_第20张图片

于是就开始我们的poc

password=1'+or+1='1 

其实这里也可以进行堆叠查询,因为这里也包含mysqli_mutil_query这个函数!!

43.还是多一个()

这题其实和上一题一模一样 就是多一个() 先上poc

password=admin')or+1=1--+

然后不知道你们会不会感到有点奇怪,对于拼接之后的那个句子结构

$sql = "SELECT * FROM users WHERE username=('111') and password=('admin') or 1=1 ";

于是我就去跑去问了一下chatgpt 结果他给到了我这样一个回答

admin'+or+1=1--+

soga~~~原来如此

44.和四十二关一样

不知道为什么他的答案和四十二关一样,那就直接上poc了

password=admin'+or+1=1--+

45.又是多个()

这个题思路和上一关一样,只不过得到的字段被()包裹,所以直接上poc

login_password=admin')or+1=1--+

46.报错,报错

这一题有点新颖,这种一看就知道是order by的查询语句sqli靶场完结篇!!!!_第21张图片

其实这种还挺难搞

  • 首先,它不能拼接select 这种语句,因为orderby 要放在句子的末尾
  • 然后,就是拼接 and 1=1 或者 and 1=2 这种语句对查询结果不影响 
  • 而且源代码里面还不存在堆叠注入的点

所以这里只能报错注入了,上poc

3+and+extractvalue(1,(concat(0x7e,(database()),0x7e)))--+

 sqli靶场完结篇!!!!_第22张图片

这样就能爆出他的数据库,如果它不返回报错信息的话那么就基本上不存在注入了

47.多了个' 号

这题其实就是和上面的那一题一样 只不过多一个 ' 而已

3'+and+extractvalue(1,(concat(0x7e,(database()),0x7e)))

48.盲注

这题更离谱,它直接啥都不给你了,于是可以盲注

3'+and+sleep(1)

但是我很好奇,就算盲注成功,那攻击者也获取不了它的数据库信息啊?所以这个sql注入有什么用????

                                sqli靶场完结篇!!!!_第23张图片

49.和上一关一样,但是字符型

这一关就和上一关一样,不过是字符型

50.可以堆叠,但是条件苛刻

这一关是可以进行堆叠注入的 ,但是你返回的值要满足这样

if ($result = mysqli_store_result($con1))
			{
				while($row = mysqli_fetch_row($result))
				{
					echo '';		
					echo "";
					echo "";
					printf("%s", $row[0]);
					echo "";
					echo "";
					printf("%s", $row[1]);
					echo "";
					echo "";
					printf("%s", $row[2]);
					echo "";
					echo "";
					echo "";		
				}

能成功地返回这样的结果,也可谓是十分困难了吧

51.我选择报错

这一关就直接报错注入就好了

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

52.我选择延时注入

poc:

sort=1+and+sleep(1) 

53.我还是选择延时注入

poc:

1'+and+sleep(4324324342)--+

54.你能在十次以内做出来吗???

这个其实有点在故弄玄虚,其实就是一个普通的注入,不要想太多 poc:

111111'+union+select+1,database(),user()--+ 

sqli靶场完结篇!!!!_第24张图片 你怎么知道我刚好在第十次猜出来了哈哈哈

55. 正常注入

还是和上面一样多试试就出来了

32131313123122)%20union%20select%201,database(),user()--+

sqli靶场完结篇!!!!_第25张图片

56.多一个 ' 无伤大雅

这个其实就是我们前面练的多的,不多说

)+union+select+1,user(),('1 

sqli靶场完结篇!!!!_第26张图片

57.换成" 还是无伤大雅

不多说,救赎之道,就在标题 上poc

?id=3213113211"%20union+select%201,user(),database()--+

sqli靶场完结篇!!!!_第27张图片

58.??再看多一眼??

这题一开始没做出来,去看了题解,才恍然大雾

$sql="SELECT * FROM security.users WHERE id='$id' LIMIT 0,1";
			$result=mysql_query($sql);
			$row = mysql_fetch_array($result);

			if($row)
			{
				echo '';	
				$unames=array("Dumb","Angelina","Dummy","secure","stupid","superman","batman","admin","admin1","admin2","admin3","dhakkan","admin4");
				$pass = array_reverse($unames);
				echo 'Your Login name : '. $unames[$row['id']];
				echo "
"; echo 'Your Password : ' .$pass[$row['id']]; echo "
";

看似一切正常,啥都不过滤,但是细看发现:     
sqli靶场完结篇!!!!_第28张图片   你的输出是什么鬼?????

所以这里只能报错注入了

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

sqli靶场完结篇!!!!_第29张图片

 59.数字型的58关

不多赘述 ,"救赎之道,就在标题 " 

60.变成了 ")

poc:

id=1")%20and%20extractvalue(1,(concat(0x7e,database(),0x7e)))%20--+

61.你没题出了是吧???

不多说,先来看看源码

$sql="SELECT * FROM security.users WHERE id=(('$id')) LIMIT 0,1";

sqli靶场完结篇!!!!_第30张图片 不是,出题人,你无聊是吧搞这些 给我弄两个括号,所以就能上poc了

id=1%27))and%20extractvalue(1,(concat(0x7e,(database()),0x7e)))--+

62.没有回显,但是延时注入

这一关是没有回显的,所以我们可以采用sleep来注入

id=1') and sleep(21)--+

63.还是62关,但是没有括号

这一关只是没有括号而已

?id=1%27and%20sleep(323)--+

64.又是))是吧???

这里的话就是还是有((这样的逆天玩意 ,所以我们直接上poc就好

?id=1))and%20if(length(database())=10,1,0)=1--+

65.完结撒花,但是有 "

这里也是不多说,直接上poc:

id=1")and%20if(length(database())=10,1,0)=1--+

终于,up的sqli靶场打完了 ,打的人都快麻了  sqli靶场完结篇!!!!_第31张图片,先存一下小编的笔记,以后回来复习(如果记得的话)

        ​​​​​​​        ​​​​​​​        sqli靶场完结篇!!!!_第32张图片

你可能感兴趣的:(sql,数据库,sql注入)