使用alpha3生成alphanumeric shellcode

0x00 背景

之前打杭電新生賽hgame的時(shí)候碰到一個題目, 題目會檢測用戶輸入的shellcode, 限制shellcoode只能是大寫字母和數(shù)字, 經(jīng)社團(tuán)大佬提醒得知對付這種問題用一個專門的工具: alpha3. 這篇文章就以這題為例來記錄一下alpha3的使用方法.

0x00 程序分析

用ida打開二進(jìn)制文件再反匯編得到main函數(shù)的偽代碼如下


int __cdecl main()

{

char buf; // [esp+Fh] [ebp-19h]

int i; // [esp+10h] [ebp-18h]

unsigned int sc; // [esp+14h] [ebp-14h]

ssize_t v4; // [esp+18h] [ebp-10h]

unsigned int canary; // [esp+1Ch] [ebp-Ch]

canary = __readgsdword(0x14u);

setvbuf(stdout, 0, 2, 0);

sc = (unsigned int)malloc(0x1000u);

puts("========== ez shellcode ver2 ==========");

printf("> ");

for ( i = 0; i <= 4095; ++i )

{

v4 = read(0, &buf, 1u);

if ( v4 == -1 )

exit(0);

if ( (buf > 90 || buf <= 64) && (buf <= 47 || buf > 57) )

break;

*(_BYTE *)(sc + i) = buf;

}

if ( mprotect((void *)(sc & 0xFFFFF000), 0x1000u, 7) == -1 )

{

puts("error ,tell admin");

}

else

{

puts("exec shellcode...");

((void (*)(void))sc)();

}

return 0;

}

程序很簡單, 只要找到僅有大寫字母數(shù)字組成的shellcode(也叫做 alphanumeric shellcode)組成就可以成功pwn. 我們使用alpha3將普通的shellcode轉(zhuǎn)化成alphanumeric shellcode, 不過alpha3 實(shí)在難用, 而且網(wǎng)上教程非常少, 這也是我寫這個文章的主要原因.

破解過程

我們首先在github上面搜索 alpha3 找到代碼的倉庫, 然后下載到本地再build之后就可以使用了,過程十分麻煩...... 這兒就直接提供build之后的給大家下載(密碼mmdj). 然后我們先找一個普通的可以getshell的shellcode, 然后我們需要將對應(yīng)的機(jī)器碼寫入到一個文件中(例如sc.bin), 然后我們在cmd中cd到apha3的文件夾中執(zhí)行alpha3來得到alphanumeric shellcode, 在之前我們先執(zhí)行python ./ALPHA3.py看一下幫助:


[Usage]

ALPHA3.py [ encoder settings | I/O settings | flags ]

[Encoder setting]

architecture Which processor architecture to target (x86,

x64).

character encoding Which character encoding to use (ascii, cp437,

latin-1, utf-16).

casing Which character casing to use (uppercase,

mixedcase, lowercase).

base address How to determine the base address in the decoder

code (each encoder has its own set of valid

values).

[I/O Setting]

--input="file" Path to a file that contains the shellcode to be

encoded (Optional, default is to read input from

stdin).

--output="file" Path to a file that will receive the encoded

shellcode (Optional, default is to write output

to stdout).

[Flags]

--verbose Display verbose information while executing. Use

this flag twice to output progress during

encoding.

--help Display this message and quit.

--test Run all available tests for all encoders.

(Useful while developing/testing new encoders).

--int3 Trigger a breakpoint before executing the result

of a test. (Use in combination with --test).

[Notes]

You can provide encoder settings in combination with the --help and --test

switches to filter which encoders you get help information for and which

get tested, respectively.

Valid base address examples for each encoder, ordered by encoder settings,

are:

[x64 ascii mixedcase]

AscMix (r64) RAX RCX RDX RBX RSP RBP RSI RDI

[x86 ascii lowercase]

AscLow 0x30 (rm32) ECX EDX EBX

[x86 ascii mixedcase]

AscMix 0x30 (rm32) EAX ECX EDX EBX ESP EBP ESI EDI [EAX] [ECX]

[EDX] [EBX] [ESP] [EBP] [ESI] [EDI] [ESP-4]

ECX+2 ESI+4 ESI+8

AscMix 0x30 (i32) (address)

AscMix Countslide (rm32) countslide:EAX+offset~uncertainty

countslide:EBX+offset~uncertainty

countslide:ECX+offset~uncertainty

countslide:EDX+offset~uncertainty

countslide:ESI+offset~uncertainty

countslide:EDI+offset~uncertainty

AscMix Countslide (i32) countslide:address~uncertainty

AscMix SEH GetPC (XPsp3) seh_getpc_xpsp3

[x86 ascii uppercase]

AscUpp 0x30 (rm32) EAX ECX EDX EBX ESP EBP ESI EDI [EAX] [ECX]

[EDX] [EBX] [ESP] [EBP] [ESI] [EDI]

[x86 latin-1 mixedcase]

Latin1Mix CALL GetPC call

[x86 utf-16 uppercase]

UniUpper 0x10 (rm32) EAX ECX EDX EBX ESP EBP ESI EDI [EAX] [ECX]

[EDX] [EBX] [ESP] [EBP] [ESI] [EDI]


我們這題是32位的, 所以architecture是X86; 因?yàn)閙ain函數(shù)中是按字節(jié)檢測的, 所以character encoding 選擇 ascii; 而且題目中要求的是大寫字母, 所以casing 自然就是upper. 但是最后的base address 是什么呢? 這個alpha會利用shellcode基址來重定位shellcode肢础,相當(dāng)于在shellcode運(yùn)行過程中重新組裝shellcode. 而查看ida中返回編的代碼可知調(diào)用shellcode的匯編指令是call eax 所以base 就是EAX 在結(jié)合我們之前得到的普通shellcode就可以用python ./PYTHON.py x86 ascii uppercase eax --input="sc.bin" > out.bin就可以在out.bin中得到一個 alphanumeric shellcode, 然后再用pwntools輸入這個alphanumeric shellcode 即可成功getshell !

總結(jié)

打這次hgame才知道pwn原來有這么多騷操作, 真的是太有意思了. 還是要多多學(xué)習(xí)呀.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盲憎,一起剝皮案震驚了整個濱河市弟断,隨后出現(xiàn)的幾起案子怔檩,更是在濱河造成了極大的恐慌脯爪,老刑警劉巖启上,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異粱坤,居然都是意外死亡隶糕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門站玄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枚驻,“玉大人,你說我怎么就攤上這事株旷〔饨眨” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵灾常,是天一觀的道長霎冯。 經(jīng)常有香客問我,道長钞瀑,這世上最難降的妖魔是什么沈撞? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮雕什,結(jié)果婚禮上缠俺,老公的妹妹穿的比我還像新娘。我一直安慰自己贷岸,他們只是感情好壹士,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著偿警,像睡著了一般躏救。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天盒使,我揣著相機(jī)與錄音崩掘,去河邊找鬼。 笑死少办,一個胖子當(dāng)著我的面吹牛苞慢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播英妓,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼挽放,長吁一口氣:“原來是場噩夢啊……” “哼麸祷!你這毒婦竟也來了柑土?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤哮兰,失蹤者是張志新(化名)和其女友劉穎贺纲,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體褪测,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡猴誊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了侮措。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片懈叹。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖分扎,靈堂內(nèi)的尸體忽然破棺而出澄成,到底是詐尸還是另有隱情,我是刑警寧澤畏吓,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布墨状,位于F島的核電站,受9級特大地震影響菲饼,放射性物質(zhì)發(fā)生泄漏肾砂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一宏悦、第九天 我趴在偏房一處隱蔽的房頂上張望镐确。 院中可真熱鬧,春花似錦饼煞、人聲如沸源葫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽息堂。三九已至,卻和暖如春块促,著一層夾襖步出監(jiān)牢的瞬間储矩,已是汗流浹背感耙。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留持隧,地道東北人即硼。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像屡拨,于是被迫代替她去往敵國和親只酥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Return-Oriented-Programming(ROP FTW) Author: Saif El-Sher...
    RealSys閱讀 3,322評論 0 2
  • 還是和linux下溢出利用對比呀狼。 開啟了DEP后裂允,棧的內(nèi)存空間變成不可執(zhí)行,無法再把shellcode布置其中然后...
    BJChangAn閱讀 1,605評論 0 0
  • IIS/6.0 MS-Author-Via: DAV 原POC: #------------Our payload...
    g0閱讀 1,360評論 0 2
  • 0x01 目錄 常見編碼: ASCII編碼 Base64/32/16編碼 shellcode編碼 Quoted-p...
    H0f_9閱讀 12,783評論 2 17
  • 7月16日:找家咖啡館或者餐廳哥艇,開始寫作 好绝编,周日了,找一個地方貌踏,坐下來十饥,舒適的,心里覺得可以開始寫作的祖乳。 看看四...
    諸慧的身心園地閱讀 243評論 0 2