<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>FSCK &#187; proxy</title>
	<atom:link href="http://blog.fsck.hu/index.php/tag/proxy/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.fsck.hu</link>
	<description>Everything Goes!</description>
	<lastBuildDate>Sun, 19 Jul 2009 17:49:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Netcat proxy második nekifutás</title>
		<link>http://blog.fsck.hu/index.php/2009/05/28/netcat-proxy-2/</link>
		<comments>http://blog.fsck.hu/index.php/2009/05/28/netcat-proxy-2/#comments</comments>
		<pubDate>Thu, 28 May 2009 20:33:00 +0000</pubDate>
		<dc:creator>Kerekes Attila</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[netcat]]></category>
		<category><![CDATA[proxy]]></category>

		<guid isPermaLink="false">http://blog.fsck.hu/?p=8</guid>
		<description><![CDATA[Előző gondolatmenetet kicsit tovább vittem. Tegyük fel, hogy állandóan proxyzni szeretnénk egy porton. Ha az alábbi parancsot használjuk:
nc -l -p 31337 0&#60;backstream &#124; nc google.hu 80 1&#62;backstream
akkor ha csatlakozunk a böngészőnkkel, bejön a google.hu, de a program ki is lép a routeren, így ha másodikra is próbálkozunk, nem fog már bejönni a honlap. Mit tehetünk [...]]]></description>
			<content:encoded><![CDATA[<p>Előző gondolatmenetet kicsit tovább vittem. Tegyük fel, hogy állandóan proxyzni szeretnénk egy porton. Ha az alábbi parancsot használjuk:</p>
<pre class="brush: plain;">nc -l -p 31337 0&lt;backstream | nc google.hu 80 1&gt;backstream</pre>
<p>akkor ha csatlakozunk a böngészőnkkel, bejön a google.hu, de a program ki is lép a routeren, így ha másodikra is próbálkozunk, nem fog már bejönni a honlap. Mit tehetünk ilyenkor? Erre találták ki a inetd-t vagy Xinetd-t. Én most a Xinetd-s megoldást fogom vázolni. Elsőre is az /etc/services fájlban létre kéne hozni az új szolgáltatásunkat. Ezt az alábbi sorral tehetjük meg:</p>
<pre class="brush: bash;">duckroll        31337/tcp                       # duckrolling nc</pre>
<p>Létre is hoztuk a duckroll servicet, ami bizony a 31337-es tcp portot használja. Ezekután jöhet a Xinetd bejegyzés. Hozzunk létre egy filet az /etc/xinetd.d/-ben:</p>
<pre class="brush: bash;">touch /etc/xinetd.d/duckroll</pre>
<p>És másoljuk bele a következőt:</p>
<pre class="brush: plain;">service duckroll
{
   flags           = Reuse
   socket_type     = stream
   wait            = no
   user            = root
   protocol        = tcp
   server          = /root/duckroll.sh
   only_from       = localhost 10.0.0.0/8
   disable         = no
}</pre>
<p>Az only_from mezőt értelemszerűen töltsük ki, hogy a saját hálónkról is be tudjunk lépni (pl 192.168.0.0/24). Nézzük mi is kerüljön a /root/duckroll.sh-ba:</p>
<pre class="brush: bash;">#!/bin/bash
/bin/nc google.hu 80</pre>
<p>Ezekután már akárhányszor csatlakozunk a 31337-es portunkra, mindig a google.hu fog bejönni.<br />
Oké, de mi az értelme ennek az egésznek. Elmélkedjünk rajt egy kicsit. Lényegében az adatforgalmat átdobtuk egy shell scripten, amiben össze vissza loggolhatjuk és átírhatjuk az egészet. Nézzünk egy példát:</p>
<pre class="brush: bash;">#!/bin/bash
/bin/tee -a forgalom.log | /bin/nc google.hu 80</pre>
<p>Most a forgalom.log-ba már láthatjuk is a böngészőnk által küldött kérést. Nézzük tovább:</p>
<pre class="brush: bash;">#!/bin/bash
/bin/sed -u s/duckroll/rickroll/ | /bin/nc google.hu 80</pre>
<p>Lehet tippelni. Ha esetleg valaki a hálón rákeresne a duckrollra, akkor rickroll eredményét fogja megkapni. Persze miért írná be bárki is a google.hu cím helyett a routerünk címét, ráadásul a 31337-es porttal utána. Ez így elég furcsa&#8230; De egy iptables szabály segíthet a problémán:</p>
<pre class="brush: plain;">iptables -t nat -A PREROUTING -p tcp --dport 80 -d google.hu -j REDIRECT --to-port 31337</pre>
<p>A REDIRECT mindig a routernek a &#8211;to-port-ban megadott portjára küldi a csomagokat tovább. Így már ha simán a google.hu-ra vagyunk kiváncsiak is a proxyzott, shell scripten átfuttatott oldalt kapjuk.<br />
Ez szép és jó, de most már igazán nézhetnénk valami hasznos példát az egészre&#8230; Tegyük fel, hogy egy adott torrent oldalon például az arányunkkal akarunk játszani. Mi minden kéne:</p>
<ul>
<li>iptables-ben egy szabály ami a torrent oldal felé haladó kapcsolatokat beszipkázza.</li>
<li>egy script ami az adatokat megfelelően módosítja</li>
</ul>
<p>Az iptables szabály valahogy így nézne ki:</p>
<pre class="brush: plain;">iptables -t nat -A PREROUTING -p tcp --dport PORT -d HOST -j REDIRECT --to-port 31337</pre>
<p>PORT: a torrent tracker portja (pl 11337)<br />
HOST: a torrent tracker címe (pl  &#8230; :)<br />
A duckroll.sh scriptünk valami ilyesmi is lehetne, ha mondjuk az általunk letöltött mennyiséget szeretnénk kinullázni (freeleech):</p>
<pre class="brush: bash;">#!/bin/bash
/bin/sed -u 's/downloaded=.*\&amp;amp;left/downloaded=0\&amp;amp;left/' | /bin/nc HOST PORT</pre>
<p>És kész is vagyunk. Innéttől ha a torrent kliensünk kapcsolódni akar a trackerhez, a kapcsolatot elkapja a routerünk, átírja benne az általunk letöltött mennyiséget nullára, majd továbbítja az adatokat. Persze a trackerek nagyrésze az ilyen ügyeskedéseket figyeli, és bannolja a csalókat. Egy bonyolultabb scripttel akár ésszerű feltöltést is lehet szimulálni.</p>
<p>Gondoljuk csak végig, milyen könnyen és milyen kevés alap unix eszközzel sikerült ezt elérnünk. Hasonló módszerrel különböző adatfolyamokat manipulálhat bárki, ezt kombinálva mitm támadásokkal könnyedén lehet rosszindulatú kódot bejuttatni egyes adatfolyamokba&#8230;</p>
<p>Ajánlott irodalom:<br />
<a href="http://www.linuxfocus.org/English/November2000/article175.shtml" target="_blank">http://www.linuxfocus.org/English/November2000/article175.shtml</a><br />
<a href="http://www.stearns.org/doc/nc-intro.v0.80.html" target="_blank">http://www.stearns.org/doc/nc-intro.v0.80.html</a></p>
<p>#eof</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fsck.hu/index.php/2009/05/28/netcat-proxy-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Netcat proxy</title>
		<link>http://blog.fsck.hu/index.php/2009/05/27/netcat-proxy/</link>
		<comments>http://blog.fsck.hu/index.php/2009/05/27/netcat-proxy/#comments</comments>
		<pubDate>Wed, 27 May 2009 13:52:00 +0000</pubDate>
		<dc:creator>Kerekes Attila</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[netcat]]></category>
		<category><![CDATA[proxy]]></category>

		<guid isPermaLink="false">http://blog.fsck.hu/?p=7</guid>
		<description><![CDATA[Sok helyen olvastam, hogy ez lehetséges, de valahogy igazi élő példát nem találtam rá. Viszont amit találtam:
mkfifo backstream
nc -l -p 31337 0&#60;backstream &#124; nc google.hu 80 1&#62;backstream
Ezek után ha csatlakozunk a gépünk 31337-es portjára egy böngészővel, jó eséllyel a google.hu fog bejönni. Oké, ez frankó, de mire megyünk vele? Ebben a formában tényleg nem sokra. [...]]]></description>
			<content:encoded><![CDATA[<p>Sok helyen olvastam, hogy ez lehetséges, de valahogy igazi élő példát nem találtam rá. Viszont amit találtam:</p>
<pre class="brush: plain;">mkfifo backstream
nc -l -p 31337 0&lt;backstream | nc google.hu 80 1&gt;backstream</pre>
<p>Ezek után ha csatlakozunk a gépünk 31337-es portjára egy böngészővel, jó eséllyel a google.hu fog bejönni. Oké, ez frankó, de mire megyünk vele? Ebben a formában tényleg nem sokra. De tegyük fel, hogy valahol egy tűzfal mögött ücsörgünk, és szeretnénk ircezni, de csak a 80as port van engedélyezve kifele (suli, meló, stb).</p>
<pre class="brush: plain;">mkfifo backstream
nc -l -p 31337 0&lt;backstream | nc irc.atw.hu 6667 1&gt;backstream</pre>
<p>Most ha kívülről csatlakoznánk az otthoni gépünk 80as portjára egy irc klienssel mondjuk, akkor az továbbküldene minket az atw.irc.hu 6667es portjára. Persze erre sok más és talán egyszerűbb megoldás is létezik. Mégis miért lenne érdemes ezt így megvalósítani? Itt lényegében akármilyen egyéb shellscriptet közbe szúrhatunk, pl:</p>
<pre class="brush: plain;">mkfifo backstream
nc -l -p 31337 0&lt;backstream | sed -u s/rick/duck/g | nc irc.atw.hu 6667 1&gt;backstream</pre>
<p>Ezt használva ezentúl ircen akárhányszor azt írjuk be a kliensünkbe, hogy rick, a többiek duck-ot fognak látni. Magyarul megváltoztattuk az áthaladó adatfolyamot. És ezt kombinálva pár egyéb technikával igen komoly eredményeket érhetünk el&#8230;</p>
<p>#eof</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fsck.hu/index.php/2009/05/27/netcat-proxy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
