Last week I examined squid webproxy code to understand how this tproxy thing works. I realized that developers get most of tproxy code in kernel. So in user level, all you have to create a socket:
after all of these, when you connect someones listening port, they will see your ip address as spoofed. But ofcourse you need to have your kernel compiled with TPROXY support.
Reason of why i dig this out is that, I need to run squid in tproxied chain mode on the same machine. When I made quick search the web, everyone says squid only operates in tproxied mode as long as it gets request from iptables. So how do we create a setup like [squid] --> [dansquardian] --> [squid] with tproxy? I asked this question to Amos Jeffries and he replied that they added this feature to squid 3.2 but haven't test it.
I tested this out and I can say it works like a charm.
I configured two squid named squid-1 and squid-2. Squid-1 is the initial one which gets the request from iptables redirection.
I havequitereverseengineeringbackground but I havenevertriedtodisassemblepythonbytecode. But i found it not sohard. Anyway i disassembledsomefiles of WingIDEtopreparethiskeygen. Here it is..
def BaseConvert(number,fromdigits='0123456789ABCDEF',todigits='123456789ABCDEFGHJKLMNPQRTVWXY'): x=long(0) for digit in str(number): x=x*len(fromdigits) + fromdigits.index(digit)
res='' while True: if not(x>0):break digit= x % len(todigits) res=todigits[digit]+res x= x / len(todigits) return res
if( __name__ == "__main__" ): """ Generates 'unlimited non-commercial open source use only' license for WingIDE You can use it without any restrictions """
import random
dict='123456789ABCDEF'
lic='NN' for x in range(18): lic+=random.choice(dict)
After long period of being absent, here i am again. From now on I will try to send my posts in english and turkish according to my mood at that time. I apologise for my gramatical errors in advance :p
Anyway, while I was digging some metasploit shellcodes, i find out this strange opcodes:
D9 EE fldz D9 74 24 F4 fnstenv byte ptr [esp-0Ch] 5B pop ebx
After little search, I find out metasploit use this opcodes for retrieving the value of "EIP".
-fldz loads current float register with zeros. -fnstenv stores a structure about float processing unit status to given address. -and pop pops :)
The structure includes:
24 -> fpu operand pointer selector 20 -> fpu operand pointer offset 16 -> fpu instruction pointer selector 12 -> fpu instruction pointer offset 08 -> tag word 04 -> status word 00 -> control word
So with loading the struct to [esp-0C], esp points to last executed code address on fpu which is "fldz" in this case.
Actually it does not give us the current eip but metasploit use this opcodes for first three of shellcode so they can save where the shellcode really begins.
To retrieve current eip, this kind of code can be used:
Geçenlerde elime bir doküman geçtisql injection ile alakalı. Pratikte deneme fırsatım olmadı fakat yöntem olarak oldukça ilginç ve zekice bulduğumdan burada bahsetmek gereği duydum.
Öncelikle ortamdan bahsedeyim. Bir içerik yönetim sistemimiz(yazının verdiği örneğe bağlı kalmak açısından) olsun ve aşağıdaki gibi bir http request gönderdiğimizde hemen altındaki gibi cevap alıyoruz olalım.
*getdocument.php bu id ye karşılık veritabanından dosya adını ve dosya dilini ifade eden bir integer geri döndürür,
*sayfa bu verileri kullanarak bir url oluşturur ve kullanıcıyı bu url ye yönlendirir.
Yukarıdaki örnekleri incelersek, evet url sql injection a müsait fakat burada standart sql injection uygulayarak elde edebileceğimiz tek şey zaten varlığını bildiğimiz bir dökümandır.
Şimdi veritabanından gelen ikinci veri olan integer, eğer 0 ise bu url ye ‘en’ ekinin, 1 ise ‘de’ ekinin eklenmesini sağlıyor.Bunu nasıl kullanabiliriz? Bilgisayar ortamındaki her şeyin 0 ve 1 lerle ifade edilebildiğini hatırlarsak, yazı baya baya anlamlı olmaya başlıyor.
Bir sonraki örneklerde binary değer “01000001” olan ascii “A” yı kullanarak bakalım neler elde edebiliyoruz.
Görüleceği üzere right-shift olayını 7 den 0 kadar iterate ettiğimizde elimizde sırası ile şu dosyalar olacak.:“en,de,en, en, en, en, en,de”
Buna artı olarak bir verinin boyutunu “LENGTH()” methoduyla alabildiğimizi ve bu method sonunda 32 bitlik(int) bir veri elde edebileceğimizi hatırlarsak, ne kadar iterate etmemiz gerektiği sorununu da çözmüş oluyoruz.
Sonuç olarak şöyle bir request hiçde şaşırtıcı gelmeyecektir.
Geri dönen url yönlendirmelerinin değerine bakarak 3300 sayılı bitte 0 yada 1 olduğunu bulduktan sonra, değerleri bit-by-bit uç-uca eklersek ne elde edeceğimiz malum.
Bunu dosya boyutu kadar iterate edecek script yazmak çokta zor olmasa gerek.
Derdimi anlatamama ihtimaline karşı orjinal dokumanı Dosyalarım bölümüne ekliyorum.
Bu video ile Cebit fuarı kapsamındaki bir seminerde karşılaşmıştım. Yeniden karşılaşınca paylaşmak istedim.
Semineri yapan da yanlış hatırlamıyorsam Anne Skare Neilsen adında bir hanım ablamızdı. Kişi isimlerini çoğu zaman hatırlayamasam da bu sahsın adı nedense hatırımda kalmış :) Seminer sırasında şeker dağıtmasından olsa gerek. Her ne kadar şeker alamasam da etkisi olmuş ki hatırlıyoruz demi :) Kendisi futurist imiş.(Bu ünvan ile de ilk defa o zaman karşılaşmıştım.) Ha ne diyordum video değil mi... :)
Rootkitlerle veya daha genel anlamda driverlarla uğraşmış olanlar ‘sc create|start|delete|….’ komut varyasyonunun makina üzerindeki sürücüleri kontrol etmede kullanıldığını bilir. Sürekli şekilde driver yükleyip silenlerden iseniz bu yöntem can sıkmaya başlayabiliyor. Peki o zaman napalım: Bu işlemin programatik şekilde nasıl yapılacağına bakalım.
Şöyle küçük bir sınıf yazıp static fonksiyonları üzerinden işimizi halledebiliriz sanırım.
#include"windows.h"
#include"iostream"
#include"string"
#include"stdio.h"
usingnamespace std;
class Driver{
public:
static DWORD Install(IN LPCTSTR, IN LPCTSTR);
static DWORD Start(IN LPCTSTR);
static DWORD Open( IN LPCTSTR, HANDLE *);
static DWORD Stop(IN LPCTSTR);
static DWORD Remove(IN LPCTSTR);
};
Aşağıdaki kodu incelediğinizde de anlayacağınız üzere her bir fonksiyon öncelikle “Service Control Manager” açıyor ve onun üzerinden işini görüyor.
#include"stdafx.h"
#include"InstallDriver.h"
#include"winuser.h"
#include"stdlib.h"
DWORD Driver::Install(IN LPCTSTR DriverName, IN LPCTSTR ServiceExe){
* Kendi çapında bilişim ile uğraşan mezuniyet eşiğinde bir şahıs…
* İlerde de bu meşguliyetin artarak ,işin erbaplığı seviyesine gelinmesi yönünde bir istek…
* Ve bu bileşimin sonuçları…
justwalkingwondering(at)gmail.com