某天,同事扔了一个教育站点过来,里面的url看起来像有SQL注入。正好最近手痒痒,就直接开始。
后面发现他发的url是不存在SQL注入的,但是我在其他地方发现了SQL盲注。然后改站点本身也可以下载试用源代码,和该站点是同一套系统:

一开始的思路是直接用时间盲注写马,然后遇到的问题就是如何获取站点的绝对路径。通过sqlmap自带的字典去爆破,发现都失效了。(但是其实只是没写成功,不代表路径是不对。)那么接下来的思路就在源码上了。从源码里面没有找到啥可以直接未授权getshell的点。后面在本地搭建这套系统时,发现了其配置信息都在网站目录下的configure.php,后面就是尝试使用sqlmap读取文件。通过猜测,发现了站点的路径为/var/www/html/{站点域名}下面。然后再回头尝试写马,还是失败。但是可以读取文件。然后写了个脚本去跑,成功获取数据库账号密码:

Nmap一试,3306开放,心中窃喜。使用mysql连接的时候,发现root登录被做了限制,只能使用localhost进行登录。然后也通过sqlmap获取到其他账号,有的可以登录,但是都因为权限小,无法写马。

写马失败后,想着查询下数据库里面的管理员密码,登录后台看看有没有可利用的点。后面又回过头来看源码了。一边放着dump数据,一边又发现了新东西,这站点存在ckfinder和ckeditor编辑器,但是一个无法访问,一个无法上传木马。

就在我想破脑袋也没想到还有啥办法之时,我同事那边来了个好消息。他从旁站获取到了测试账号密码:

然后他在个人资料处发现了一些功能点,发现了一堆xss和csrf、会话固定后,最后测了一下上传点

这个上传点如果你直接上传php是可以上传成功的,但是路径找不到。很奇怪。
【----帮助网安学习,以下所有学习资料免费领!加vx:yj009991,备注 “博客园” 获取!】
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC漏洞分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)
不过如果你先上传一个jpg文件,就会发现图片路径为upload/fileimages/ew00000000040/user_photoa009.jpg
然后再通过bp修改文件扩展名为php,重新上传,就可以成功在前端看到php的路径:

通过抓包分析,我们发现他存在一个http_user字段可控,并且只在前端校验文件类型得到重命名组合为user_photohttp_user


直接写入phpinfo(),发现解析了,上蚁剑:

成功getshell。
虽然成功获取权限,但是这权限很低,有执行权限,但是很多操作都被限制。前面有获取数据库账号密码,在获取webshell后,可直接连接mysql数据库:

这时候可以考虑udf提权,但是尝试发现没有/usr/lib64/mysql/plugin/路径的上传权限。那么久只能通过常规的提权了。使用工具linux-exploit-suggester。

发现很多种方式可以提权,但是我用kali编译完的程序上传到目标机上,发现运行不了。后面直接在目标机编译,也出现确实一些库文件,好像因为目标机版本太低了。后面参考了这篇文章,成功进行提权。
这个提权会删除root用户,新建一个用户firefart。本来还在考虑使用内网穿透把22端口代理出来,然后直接ssh连接。但是渗透步骤不规范就会导致我这样的结果:他的ssh并不是22端口,而是999端口。我信息收集的时候没有发现到位。当时一开始看没有22端口,所以才顺势觉得要穿透进去。但是其实人家999端口就是ssh。接下来就是成功使用ssh连接。

但是有个问题又出现了:如果我想连接ssh,那么久只能使用这个账户登录,因为我不知道root密码。但是这样的话,人家登录不了root就会发现异常。但是如果我把root恢复了,我就没有root权限了。
诶,后面我在想,如果我把原始的passwd文件恢复,然后不断开ssh连接是不是我还能有权限操作呢?说干就干,使用firefart执行mv /tmp/passwd.bak /etc/passwd恢复原本的账户。然后ssh不断开,我发现我还是root权限。这就好办了。useradd新建账号edu,然后把新建的账户加入管理员组。
使用新账号edu进行登录,发现为root权限,成功!

这时候才把原本firefart账号的窗口关闭。重新再使用firefart账户登录,发现已经无法登录了。看来这应该是系统的一种机制吧,哈哈哈。
这次渗透其实走了很多弯路,到最后都没用上数据库。很多时候一个点打不进去的时候,适当的放弃,去打新的点,不要太头铁,特别是攻防的时候。
总结一下:发现盲注,源码到跑取站点账号密码(时间盲注效率低到我现在还没跑出后台管理账户密码),无果。到从旁站上传木马,获取网站服务器权限,权限较低,使用脏牛提权,到后面的恢复原本的账户,并新建一个管理员。其实这个站点是还有内网在,貌似是教育局办公内网,但目前还在尝试,后续会随缘更新。
更多靶场实验练习、网安学习资料,请点击这里>>
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
我尝试使用不同的ssh_options在同一阶段运行capistranov.3任务。我的production.rb说:set:stage,:productionset:user,'deploy'set:ssh_options,{user:'deploy'}通过此配置,capistrano与用户deploy连接,这对于其余的任务是正确的。但是我需要将它连接到服务器中配置良好的an_other_user以完成一项特定任务。然后我的食谱说:...taskswithoriginaluser...task:my_task_with_an_other_userdoset:user,'an_othe
我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类
目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时
require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame
我今天看到了一个ruby代码片段。[1,2,3,4,5,6,7].inject(:+)=>28[1,2,3,4,5,6,7].inject(:*)=>5040这里的注入(inject)和之前看到的完全不一样,比如[1,2,3,4,5,6,7].inject{|sum,x|sum+x}请解释一下它是如何工作的? 最佳答案 没有魔法,符号(方法)只是可能的参数之一。这是来自文档:#enum.inject(initial,sym)=>obj#enum.inject(sym)=>obj#enum.inject(initial){|mem
考虑一下:现在这些情况:#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2我需要用其他字符串输出URL。我如何保证&符号不会被转义?由于我无法控制的原因,我无法发送&。求助!把我的头发拉到这里:\编辑:为了澄清,我实际上有一个像这样的数组:@images=[{:id=>"fooid",:url=>"http://
我有一个super简单的脚本,它几乎包含了FayeWebSocketGitHub页面上用于处理关闭连接的内容:ws=Faye::WebSocket::Client.new(url,nil,:headers=>headers)ws.on:opendo|event|p[:open]#sendpingcommand#sendtestcommand#ws.send({command:'test'}.to_json)endws.on:messagedo|event|#hereistheentrypointfordatacomingfromtheserver.pJSON.parse(event.d
我找到了这样的东西:Rails:Howtolistdatabasetables/objectsusingtheRailsconsole?这一行没问题:ActiveRecord::Base.connection.tables并返回所有表但是ActiveRecord::Base.connection.table_structure("users")产生错误:ActiveRecord::Base.connection.table_structure("projects")我认为table_structure不是Postgres方法。如何列出Postgres数据库的Rails控制台中表中的所有